nginx 常见模块

访问控制基于模块ngx_http_access_module实现,可以通过匹配客户端源IP地址进行限制

location = /login/ {
   root /data/nginx/html/pc;
   allow 10.0.0.0/24;
   deny all;
}

location /about {
   alias /data/nginx/html/pc;
   index index.html;
   deny  192.168.1.1;
   allow 192.168.1.0/24;
   allow 10.1.1.0/16;
   allow 2001:0db8::/32;
   deny all;              #按先小范围在前,大范围在后排序
}

自定义错误页面 error_page

自定义错误页,同时也可以用指定的响应状态码进行响应, 可用位置:http, server, location, if in location

Syntax: error_page code ... [=[response]] uri;
Default: —
Context: http, server, location, if in location


listen 80;
server_name www.wang.org;
error_page  500 502 503 504 /error.html;
location = /error.html {
   root /data/nginx/html;
}


#404转为302
#error_page 404 /index.html;
error_page  404  =302 /index.html; 
error_page 500 502 503 504 /50x.html;
     location = /50x.html {
}

自定义错误日志

Syntax: error_log file [level];
Default: 
error_log logs/error.log error;
Context: main, http, mail, stream, server, location
level: debug, info, notice, warn, error, crit, alert, emerg
#关闭错误日志
error_log /dev/null;

检测文件是否存在

try_files 会按顺序检查文件是否存在,返回第一个找到的文件或文件夹(结尾加斜线表示为文件夹), 如果所有文件或文件夹都找不到,会进行一个内部重定向到最后一个参数。只有最后一个参数可以引起 一个内部重定向,之前的参数只设置内部URI的指向。最后一个参数是回退URI且必须存在,否则会出现 内部500错误。

http://nginx.org/en/docs/http/ngx_http_core_module.html#try_files
Syntax: try_files file ... uri;
try_files file ... =code;
Default: —
Context: server, location

 location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
       try_files $uri $uri/ =404;
}

location / {
   root /data/nginx/html/pc;
   index index.html;
   try_files $uri  $uri.html $uri/index.html /default.html;
    #try_files $uri $uri/index.html $uri.html =489;
}


长连接配置

keepalive_time time;      #限制对一个连接中请求处理的最长时间,到时间后续的再有新的请求会断开连接,默认1h
keepalive_timeout timeout [header_timeout];  #设置保持空闲的连接超时时长,0表示禁止长连接,默认为75s,通常配置在http字段作为站点全局配置
keepalive_requests number;  #在一次长连接上所允许请求的资源的最大数量,默认为1000次

作为下载服务器配置

ngx_http_autoindex_module 模块处理以斜杠字符 “/” 结尾的请求,并生成目录列表,可以做为下载服务配置使用

autoindex on | off;     #自动文件索引功能,默为off
autoindex_exact_size on | off;  #计算文件确切大小(单位bytes),off 显示大概大小(单位K、M),默认on
autoindex_localtime on | off ;  #显示本机时间而非GMT(格林威治)时间,默认off
charset charset | off;      #指定字符编码,默认为off,中文会乱码,指定为utf8
autoindex_format html | xml | json | jsonp;     #显示索引的页面文件风格,默认html
limit_rate rate;        #限制响应客户端传输速率(除GET和HEAD以外的所有方法),单位B/s,即bytes/second,默认值0,表示无限制,此指令由ngx_http_core_module提供
set $limit_rate 4k;     #也可以通变量限速,单位B/s,同时设置,此项优级高.
                        #Rate limit can also be set in the $limit_rate variable, however, since version 1.17.0, this method is not recommended:
#注意:download不需要index.html文件

作为上传服务器

client_max_body_size 1m; #设置允许客户端上传单个文件的最大值,默认值为1m,上传文件超过此值会出413错误
client_body_buffer_size size; #用于接收每个客户端请求报文的body部分的缓冲区大小;默认16k;超出此大小时,其将被暂存到磁盘上的由client_body_temp_path指令所定义的位置
client_body_temp_path path [level1 [level2 [level3]]]; #设定存储客户端请求报文的body部分的临时存储路径及子目录结构和数量,目录名为16进制的数字,使用
                                                        #hash之后的值从后往前截取1位、2位、2位作为目录名

#配置示例:
client_max_body_size 100m;               #如果太大,上传时会出现下图的413错误,注意:如果php上传,还需要修改php.ini的相关配置
client_body_buffer_size 1024k;
client_body_temp_path   /apps/nginx/client_body_temp/ 1 2 2; #上传时,Nginx会自动创建相关目录

限流限速

启用限速后,如果超过指定的阈值,则默认提示503过载保护

相关模块

下载限速:限制用户下载资源的速度 ngx_http_core_module

请求限制:限制用户单位时间内所产生的Http请求数 ngx_http_limit_req_module

连接限制:限制同一时间的连接数,即并发数限制 ngx_http_limit_conn_module

限制下载速度

server {
    listen 80;
    server_name mirrors.wang.org;
    root /data/mirrors/;
    charset utf8;
    autoindex on;
    autoindex_exact_size off;
    autoindex_localtime on;
    limit_rate_after 100m;  #下载达到100MB数据后开始限速
    limit_rate 100k;        #限速100k
    location / {
        index index.html;
    }
}

限制请求数

限制同一个IP的同时发起的最大请求数

http {
   limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
   ...
   server {
       ...
       location /search/ {
           limit_req zone=one burst=5;
           limit_req_status 500; #默认503,可以指定其它状态码
       }
   }
}

#参数说明
limit_req_zone定义在http块中,$binary_remote_addr表示以客户端IP地址的二进制形式为限流依据的key
zone=区域名字:区域大小,Zone为存放IP及URL访问频率的共享内存区域。8000个IP地址的状态信息约占用内存空间1MB,上面示例区域可以存储80000个IP地址。
rate=最大请求速率。示例中速率不能超过每秒10个请求。超过此速率的请求放入burst队列做延迟处理
burst=队列大小,当此队列满后,会中断请求报错
nodelay表示超过请求速率并且缓存区满后不延迟处理,立即返回503错误,不设置此项则排队

#常见的limit_req指令用法。例如,以下配置将限制来自单个 IP 地址的请求的处理速率,同时限制虚拟服务器的请求处理速率
limit_req_zone $binary_remote_addr zone=perip:10m rate=1r/s;
limit_req_zone $server_name zone=perserver:10m rate=10r/s;
server {
   ...
   limit_req zone=perip burst=5 nodelay;
   limit_req zone=perserver burst=10;
}

限制并发连接数

限制同一个IP的同时发起的最大并发连接数

limit_conn_zone $binary_remote_addr zone=conn_zone:10m;
server {
    listen 80;
    server_name mirrors.wang.org;
    root /data/mirrors/;
    charset utf8;
    autoindex on;
    autoindex_exact_size off;
    autoindex_localtime on;
    limit_conn conn_zone 2; #限制并发2个连接
    limit_rate 100k;
    location / {
        index index.html;
    }
}

Nginx 状态页

基于 nginx 模块 ngx_http_stub_status_module 实现,在编译安装nginx的时候需要添加编译参数 –with-http_stub_status_module, 否则配置完成之后监测会是提示语法错误 注意: 状态页显示的是整个服务器的状态,而非虚拟主机的状态

location /nginx_status {
   stub_status;
    auth_basic           "auth login";
    auth_basic_user_file /apps/nginx/conf/.htpasswd;
   allow 192.168.0.0/16;
   allow 127.0.0.1;
   deny all;
   access_log off;
 }

关于 favicon.ico

favicon.ico 文件是浏览器收藏网址时显示的图标,当客户端使用浏览器问页面时,浏览器会自己主动发 起请求获取页面的favicon.ico文件,但是当浏览器请求的favicon.ico文件不存在时,服务器会记录404日 志,而且浏览器也会显示404报错

#方法一:服务器不记录访问日志:
location = /favicon.ico {
   log_not_found off;
   access_log off;
}

#方法二:将图标保存到指定目录访问:
#location ~ ^/favicon\.ico$ {
location = /favicon.ico {
     root   /data/nginx/html/pc/images;
     expires 365d;  #设置文件过期时间
     access_log off;
}

Nginx 压缩功能

Nginx支持对指定类型的文件进行压缩然后再传输给客户端,而且压缩还可以设置压缩比例,压缩后的 文件大小将比源文件显著变小,这样有助于降低出口带宽的利用率,降低企业的IT支出,不过会占用相应的CPU资源。 Nginx对文件的压缩功能是依赖于模块 ngx_http_gzip_module,默认是内置模块

配置指令如下:

#启用或禁用gzip压缩,默认关闭
gzip on | off; 

#压缩比由低到高从1到9,默认为1
gzip_comp_level level;

#禁用IE6 gzip功能
gzip_disable "MSIE [1-6]\."; 

#gzip压缩的最小文件,小于设置值的文件将不会压缩
gzip_min_length 1k; 

#启用压缩功能时,协议的最小版本,默认HTTP/1.1
gzip_http_version 1.0 | 1.1; 

#指定Nginx服务需要向服务器申请的缓存空间的个数和大小,平台不同,默认:32 4k或者16 8k;
gzip_buffers number size;  

#指明仅对哪些类型的资源执行压缩操作;默认为gzip_types text/html,不用显示指定,否则出错
gzip_types mime-type ...; 

#如果启用压缩,是否在响应报文首部插入“Vary: Accept-Encoding”,一般建议打开
gzip_vary on | off; 

#预压缩,即直接从磁盘找到对应文件的gz后缀的式的压缩文件返回给用户,无需消耗服务器CPU

#注意: 来自于ngx_http_gzip_static_module模块
gzip_static on | off;


gzip on;
gzip_comp_level 5;
gzip_min_length 1k;
gzip_types text/plain application/javascript application/x-javascript text/css 
application/xml text/javascript application/x-httpd-php image/gif image/png;   
gzip_vary on;