接《nginx配置(一)》
10.HTTP 包体只存储到磁盘文件中
语法:client_body_in_file_only onlcleanloff;
默认:client_ body_ in file only off;
配置块: http 、server 、location 。
说明: 当值为非off 时, 用户请求的HTTP 包体都会存储到文件中,即使只有0 字节也会保存为文件。当请求结束时,如果配置为on ,这个文件不会被删除( 一般用来调试定位问题) ,如果配置为clean ,则会删除该文件。
11. HTTP 包体尽量写入缰冲区
语法:client_body_in_single_buffer on|off;
默认:client_body_in_single_buffer off;
配置块: http 、server 、location 。
说明: 用户请求中的HTTP 包体写人内存缓冲区中。当包体大小超过了client_body_buffer_size ,还是会被写入文件中。
12 . 存储HTTP 头的缓冲区大小
语法:
client_header_buffer_size size;
默认:client_header_buffer_size lk;
配置块: http 、server 。
说明: 定义HTTP 头缓冲区大小。有时, HTTP 头会超过这个大小,这时large_client_header_buffers 定义的缓冲区将生效。
13 . 存储超大HTTP 头部的缓冲区大小
语法:large_client_header_buffers number size;
默认:large_client_header_buffers 48k;
配置块: http 、server 。
说明: 定义超大HTTP 头部缓冲区大小。如果HTTP 请求行( 如GET /index HTTP/1 .1 )的大小超过了单个缓冲区个数,会返回“ Request URI too large”( 414 ) 。请求中一般会有许多头域,每一个头域大小也不能超过单个缓冲区大小,否则会返回“Bad reque st ” ( 400 ) 。请求行和请求头部总和不能超过缓冲区个数×缓冲区大小。
14. 存储HTTP 包体的缓冲区大小
语法:client_body_buffer_size size;
默认:client_body_buffer_size 8k/ 16k;
配置块: http 、server 、location 。
说明: 定义接收HTTP 内存缓冲区大小。HTTP 包体会先接收到这块缓冲区里, 再决定是否写入磁盘。
15. HTTP 包体的临时存放目录
语法:client_body_temp_path dir-path[levell[level2[level3)]];
默认:client_body_temp_path client_body_temp;
配置块: http 、server 、location 。
说明:定义HTTP 包体存放的临时目录。接收HTTP 包体时,如果包体的大小大于client_ body _ buffer_ size ,则会以一个递增的整数命名并存放到client body temp path 指定的目录中。后面跟着的levell 、level2 、level3 ,是为了防止一个目录下文件数量太多导致性能下降,这样可以按照临时文件名最多再使用3 层目录。例如:client_body_temp_path /opt/nginx/client_temp 1 2;如果新上传的HTTP 包体使用00000123456 作为临时文件名,会被存放到这个目录中:/opt/nginx/client_temp/6/45/00000123456
16. 连接内存池
语法:connection_pool_size size;
默认:connection_pool_size 256;
配置块: http 、server 。
说明: Nginx 对每个建立成功的TCP 连接会预先分配一个内存池,本参数指定内存池大小,用于减少内核对于小块内存的分配次数。过大的size 会占用更多的服务器内存,更小的size 则会引发更多的内存分配次数。
17. 请求池尺寸
语法:request_pool_size size;
默认:request_pool_size 4k;
配置块: http 、server 。
说明: Nginx 为每个HTTP 请求分配一个内存池。TCP 连接关闭时会销毁connection pool _size 指定的连接内存池, HTTP 请求结束时会销毁request_pool_size 指定的HTTP 请求内存池。但它们创建、销毁时间不同,因为一个TCP 连接可能复用于多个HTTP 请求。
18.HTTP 头读取超时时间
语法:client_header_timeout time ( 默认单位:秒);
默认:client_header_timeout 60;
配置块: http 、server 、location 。
说明:客户端和服务器建立连接后开始接收HTTP 头,如果读取超时,向客户端返回408 ( Request timed out )错误。
19. 读取HTTP 包体超时时间
语法:client_body_time time;
默认:client_body_time 60;
配置块: http 、server 、location 。
说明:读取包体的超时时间。
20. 发送响应的超时时间
语法:send_timeout_time;
默认:send_timeout 60;
配置块: http 、server 、location 。
说明:发送响应的超时时间。超时发生时Nginx 将关闭这个连接。
21 . 重置超时连接
语法:reset_timeout_connection onloff;
默认:reset_timeout_connection off;
配置块: http 、server 、location 。
说明:连接超时后向客户端发送RST 包重置连接。选项打开后,在某个连接超时后,不是使用正常的四次握手关闭TCP 连接,而是直接向客户端发送RST 重置包,不再等待用户应答,直接释放套接字。相比正常关闭,这种设置可以避免许多处于FIN_WAIT_1 ,WAIT_2, TIME_WAIT 状态的连接。因为使用RST 重置连接会带来一些问题,所以默认关闭。
22. 用户连接关闭方式
语法:lingering_close off l on l always;
默认:lingering_cose on;
配置块: http 、server 、location 。
说明:设置Nginx 关闭用户连接的方式。always 表示关闭之前必须先处理连接上所有用户发送的数据; off 表示不管数据直接关闭; on 是中间值,一般都会处理完用户发送的数据,除非业务上认为这些数据是不必要的。
23. 用户连接关闭时间
语法:lingering_time time;
默认:lingering_time 30s;
配置块: http 、server 、location 。
说明: lingering_ close 启用后,这个配置项对于上传大文件很有用。当用户请求的content-length 大于max_client_ body_ size 时, Nginx 会立即返回413 ( request engity too large)响应,但是很多客户端可能不处理413 返回值,仍然上传数据。这时,经过lingering_time后, Nginx 不管是否还有数据在上传,直接把这个连接关掉。
24. 用户连接关闭超时值
语法:lingering_timeout 5s;
配置块: http 、server 、location 。
说明: lingering_close 生效后,检查关闭连接前是否有用户发送的数据到达服务器。如果超过lingering_timeout 时间后还没有数据可读,就直接关闭连接;否则,必须读取完连接缓冲区上的数据并丢弃后才会关闭连接。
25. keepalive超时时间
语法:keepalive_timeout time;
默认:keepalive_timeout 75;
配置块: http 、server 、location 。
说明: 一个keepalive 连接在闲置超过一定时间后,服务器和浏览器都会关闭这个连接。这个值是用于限制Nginx 服务器的, Nginx 会把这个值传给浏览器,但每个浏览器对待keepalive 的策略可能是不同的。
26. keepalive 连接上最大承载数
语法:keepalive_requests n;
默认:keepalive_requests 100;
配置块: http 、server 、location 。
说明: 一个keepalive 长连接上默认最多只能发送100 个请求。
27. tcp 尼古拉算法开关
语法:tcp_nodelay on | off;
默认:tcp_nodelay on;
配置块: http 、server 、location 。
说明:确定对keepalive 连接是否使用tcp_ nodelay 选项。
28. tcp 协议nopush 开关
语法:tcp_nopush on | off;
默认:tcp_nopush off;
配置块: http 、server 、location 。
说明: 在打开send file 选项时,确定是否开启FreeBSD 系统上的tcp _nopu s h 或Linux系统上的tcp_ cork 功能。打开tcp_nopush 后,将会在发送响应时把整个响应包头放到一个TCP 包中发送。
29. MIME type 到文件扩展名的映射
语法:type {…};
配置块: http 、server 、location 。
说明:定义MIME type 到文件扩展名的映射。多个扩展名可以映射到同一个MIME type 。例如:
types{
text/html html;
text/html conf;
image/gif gif;
image/jpeg jpg;
}
30. 默认MIME type
语法:default_type MIME-type;
默认:default_type text/plain;
配置块: http 、server , location 。
说明: 当找不到MIME type 的映射时,使用默认的MIME type 作为HTTP 头域中的content-type 。
31 . MIME type 映射散列桶内存大小
语法:types_hash_bucket_size size;
默认:types_hash_bucket_size 321641128;
配置块: http 、server 、location 。
说明: Nginx 使用散列表存储MIME type 映射,本指令定义了每个散列桶占用内存的大小。
32. MIME type 映射散列桶大小
语法:types_hash_max_size size;
默认:types_hash_max_size 1024;
配置块: http 、server 、location 。
说明: 本配置影响散列表的冲突率。值越大,就消耗越多的内存,但冲突率越小,检索速度更快。值越小, 冲突机率高,检索效率降低,但节省内存。
33. 接HTTP 方法限制用户请求
语法:limit except method ··· {" .. }
配置块: location 。
说明: Nginx 通过limit_except 后面指定的方法名限制用户请求。方法名取值包括GET 、HEAD 、POST 、PUT 、DEL ETE 、MKCOL 、COPY 、MOVE 、OPTIONS 、PPROPFIND 、PROPPATCH 、LOCK 、UNLOCK 、PATCH 。例如:
limit_except GET {
allow 192.168.1.0/32;
deny all;
}
上面方法中,允许GET 方法和HEAD 方法通过,其他方法禁止。
34.HTTP 请求包体最大值
语法:client_max_body_size size;
默认:client_max_body_size 1m;
配置块: http 、server 、location 。
说明:浏览器在发送较大包体的请求时,会在头部带一个content-type 字段, client_max_body_size 是用来限制content_type 大小的,这就使得Nginx 不用等待至接收完所有的包体,会大大节约时间。例如,当用户上传一个1GB 的文件时, Nginx 接收完包头后发现包体超大,直接发送4 I 3 ( request entity too large )响应给客户端。
35 . 对请求限速
语法:limit_rate speed;
默认:limit_rate 0;
配置块: http 、server 、location 、if。
说明: 限制客户端每秒传输字节数。默认为0 ,表示不限速。针对不同客户端,可以用$limit rate 参数执行不同的限速策略。例如:
server{
if ($slow)
set $limit rate 4k;
}
36. 限速闽值
语法:limit_rate_after time;
默认:limit_rate_after 1m;
配置块: http 、server 、location 、if。
说明:此配置表示Ngi nx 向客户端发送的响应长度超过limit _rate after 后才开始限速。
例如:
limit_rate_after 1;
limit_rate 100k;
37. sendfile 系统调用
语法:
sendfile on | off;
默认:sendfile off;
配置块: http 、server 、location 。
说明:可以启用Linux 上的sendfile 系统调用发送文件,它减少了用户态与核心态之间的两次内存复制,可以从磁盘中读取文件后直接在内核态发送到网卡,提高了效率。
38.AIO 系统调用
语法:aio on l off;
默认:aio off;
配置块: http 、server 、location 。
说明:表示是否在FreeBSD 或Linux 系统上启用内核级别的异步文件I / O 功能, AIO与se ndfile 是互斥的。
39. direction 选项
语法:directio size | off;
默认:directio off;
配置块: http 、server 、location 。
说明:在FreeBSD 或Linux 系统上使用O DIRECT 选项读取文件, 缓冲区大小为size,对大文件读取速度有优化作用,与se ndfile 互斥。
40 . direction 选项对齐尺寸
语法:directio_alignment size;
默认:directio_alignment 512;
配置块: http 、server 、location 。
说明: 与directio 一起使用,指定以directio 方式读取文件时的对齐方式。一般情况下,512 B 足够了,但对一些高性能文件系统, 如Linux 下的XFS 文件系统,可能需要设置到4KB 作为对齐方式。
41. 打开文件缓存
语法:open_file_cache max =N[inactive=timeJloff;
默认:
open_ file_cache off;
配置块: http、server 、location 。
说明: 文件缓存会在内存中存储3 种信息。
• 文件句柄、文件大小、上次修改时间;
• 已经打开过的目录结构;
• 没有找到的或者没有权限操作的文件信息。
通过读取缓存减少了磁盘操作。
3 个参数如下:
• max : 表示在内存中存储元素的最大个数, 当达到最大限制时,采用L RU 算法从缓存中淘汰最近最少使用的元素。
• inactive :表示在inactive 指定的时间段内没有被访问过的元素将会被淘汰。默认时间为60 秒。
• off : 关闭缓存功能。
例如:
open_filecache_max=1000 inactive=20s
42 . 是否缰存打开文件时的错误信息
语法:open_file_cache_ errors onloff;
默认:open_file_cache_errors off;
配置块: http 、server 、location 。
说明:指定是否缓存打开文件时的错误信息。
43. 不被淘汰的最小访问次数
语法:open_file_cache_min_uses number;
默认:open_file_cache_min_uses 1;
配置块: http 、server、location 。
说明:本参数与open_file_ cache_ min_ uses 配合使用。如果在inactive 指定的时间段内,访问次数超过了open _file_ cache_min_ uses 指定的最小次数,那么将不会被淘汰出缓存。
44. 检验缓存中元素高效率性的频率
语法:
open_file_cache_valid time;
默认:
open_file_cache_valid 60;
配置块: http 、server、location 。
说明:默认每60 秒检查一次缓存中的元素是否有效。
45. 忽略不合法的HTTP 头部
语法:ignore_invalid_headers onloff;
默认:ignore invalid headers on;
配置块: http 、server 。
说明: on 情况下,当出现不合法的HTTP 头部时, Nginx 会忽略此HTTP 头部; off ,情况下则会拒绝服务,并向用户发送400 (bad request )错误。
46.HTTP 头部是否允许下划线
语法:underscores_in_headers onloff;
默认:underscores in headers off;
配置块: http 、serv er 。
说明: 默认为o ff,表示头域名称不允许带下划线。
47 . if_ Modified _ Since 头域处理策略
语法:if_Modified_Since[off | exact l before];
默认:if_mod_ified_since exact ;
配置块: http 、server 、location 。
说明: 为了更好的性能,客户端浏览器会在客户端本地缓存一些文件, 并保存当时获取的时间,下次向服务器获取缓存过的资源时,就携带I f-Modified-Since 头域,本指令根据参数决定如何处理。
• off : 忽略If-Modified-Since 头域,每次都读取文件给客户端。
• exact : 将头域时间和文件修改时间做精确比较,如果未匹配上, 则读取文件返回给
用户; 如果匹配上, 则表示浏览器本地为最新内容,返回3 04 ( not modifi e d )给客户端,直接使用本地缓存,节省带宽。
• before :比exact 更宽松,只要文件修改时间等于或早于日,Modified-Since 头部时间,就向客户端返回304 ( not modified ) 。
48 . 文件来找到时是否记录到error 中
语法:log_not_found onloff;
语法:log_not_found on;
配置块: http 、server 、location 。
说明:当处理用户文件请求时, 如果没找到文件是再记录到error. log 中,一般用于调试定位问题, 生产系统需要关掉。
49. 合并相邻斜线
语法:
merge_slashes on l off;
默认:
merge_slashed on;
配置块: http 、server 、location 。
说明: 指明是否合并相邻的/ ,例如,如果//test ///a . t x t 为on , 则会匹配为location /
test/ a. txt ;如果为off ,则不会匹配, URI 还是/test //la. txt 。
50. DNS 解析
语法:resolver address …;
配置块: http 、server 、location 。
说明:设置DNS 域名解析服务器地址。例如:resolver 127.0.0.l 192.0.2.l;
51. DNS 解析超时时间
语法:resolver_timeout time;
默认:resolver_timeout 30s;
配置块: http 、server 、location 。
说明: 表示DNS 解析的超时时间。
52. 返回错误页面时是否注明Nginx 版本
语法:server_token on l off;
默认:server_token on;
配置块: http 、server 、location 。
说明:表明处理出错的请求时,是否在应答头域的server 域内标明Nginx 版本,用于定位问题。
53. upstream 块
语法:
upstream name{ ··· }
配置块: http 。
说明: upstream 块定义一个上游服务器集群,用于反向代理中的proxy_pass 指令。
例如:
upstream backend{
server backendl.example.com;
server backend2.example.com;
server backend3.example.com;
}
server{
location {
proxy_pass http://backend;
}
}
54. 上游服务器名
语法:
server name[parmamneters];
配置块: upstream 。
说明: server 配置项指定了一台上游服务器名可以是域名、IP 地址、UNI X 句柄等。
参数如下:
• weight = number : 这台上游服务器的权重,默认为1 。
• max_fails = number : 与fail timeout 配合使用,指在fail tim eo ut 时间段内,如果这台上游服务器转发失败次数超过number 则认为在fail_time_out 内该服务器不可用。默认为1,0 表示不检查失败次数。
• fail t imeout= time : 表示该时间段内上游服务器转发失败多少次后就认为该服务器暂时不可用, 用于优化反向代理。默认为IO 秒。这个超时不是连接、发送等超时。
• down :表示该服务器永久下线,只在使用ip_ hash 配置项时才有用。
• backup : 使用ip_hash 无效。表示该上游服务器仅是备份服务器,只有在所有非备份
服务器都失效后,才会向备份服务器转发请求。例如:
upstrea m backend{
server backendl.example.com weight=S;
server 127.0.0.1 ma x fails=3 fail timeout = 30s;
server unix: / tmp / backend3;
}
55 . 基于IP 的hash 算法
语法:ip_hash;
配置块: upstream 。
说明:在如有会话的Web 请求下,如Java 、PHP 的动态页面,希望一个客户端的请求最好始终分配到固定的一台上游服务器中,这样就可以保持会话,而不用在上游服务器中做会话同步。ip_hash 就是解决这个问题的,根据客户端IP Hash 出一个k ey, ~每key 与upstream 集群中的上游服务器数量取模,然后以取模后的结果把请求转发到对应的上游务器上,确保同一个客户端的请求只转发到指定的上游服务器中。ip_bash与weight 配置不可同时使用。如果upstream 中的一台服务器暂时不可用,不能直接删除该服务器配置, 要使用down 标志, 否则转发策略会混乱。例如:
upstream backend{
ip_hash;
server backendl.example.com;
server backend2.example.com;
server backend3.example.com down;
server backend4.example.com;
}
56. 转发当前代理
语法:proxy_pass URL;
配置块: location 、if。
说明:这个配置将当前请求反向代理到URL 指定的服务器上, URL 可以是主机名或IP 地址+端口。例如:proxy_pass:http://localhost:BOOO/uri/;也可以是UNIX 句柄:proxy_pass http://unix:/path/to/backend.socket:/uri/;也可以直接使用upstream 块:
upstream backend{
…
}
server{
location {
proxy pass http://backend;
}
}
也可以把HTTP 转换成HTTPS:proxy pass https://10.12.0.1;
默认情况下,反向代理不会转发请求中的Host 头部,如果需要转发,那么需要加上配置项:proxy_set_header Host $host;
57. 转发使用的协议方法
语法:proxy_method method
配置块: http 、server 、location 。
说明: 设置转发时的协议方法名。例如:proxy_method POST;则客户端发来的GET 请求在转发时方法名也会改为POST 。
58. 转发时隐藏的头域
语法:proxy_hide_header the_header;
配置块: http 、server 、location 。
说明: Nginx 会将上游服务器的响应转发给客户端,但默认不会转发以下头域一-Date 、Server 、X-Pad 、X-Accel-* 。使用proxy_hide_ header 后,可以任意指定哪些头域不用转发。例如:proxy_hide_header Cache-Control;proxy_hide_header MicrosoftOffieWebServer;
59. 转发时明确使用的头域
语法:proxy_pass_header the_header;
配置块: http 、server 、location 。
说明:与proxy_hide_header 功能相反,可以将原来禁止的头域进行转发。
60 . 是否转发请求包体
语法:request_pass_request_body on | off;
默认:request_pass_request_body on;
配置块: http 、server 、location 。
说明:指定是否向上游服务器转发请求包体。
61. 是否转发请求头
语法:proxy_pass_request_header on|off;
默认:proxy_pass_request_header on;
配置块: http 、server 、location
说明:确定是否向上游服务器转发请求包头。
62. 重定向转发
语法:proxy_redirect[default l off l redirect replacement];
默认:proxy_redirect default;
配置块: http 、server 、location 。
说明:当上游服务器返回的响应是重定向或刷新请求( 301、302 )时, proxy_ redirect可以重设HTTP 头部的location 或refresh 宇段。例如:proxy_redirect http://localhost:8000/two/ http://frontend/one/;则上游的location 字段就被替换了,客户端的一致性检查就可以通过.也可以使用ngx _http _ core_module 提供的变量设置新的location 。例如:proxy_redirect http://localhost:8000/ http://$host:$server_port/;也可以省略replacement 中的主机名,使用虚拟主机名称。例如:proxy_redirect http://localhost:8000/two/ /one/;使用off 时,则不进行转换。使用default 参数时, 会按照proxy_pass 配置项和所属的location 配置项重组发送给客户端的location 头部。例如,下面两种配置效果一样:
location /one/{
proxy_pass http://upstrearn:port/two/;
proxy redirect default;
}
location /one/{
proxy_pass http://upstrearn:port/two/;
proxy_pass http://upstrearn:port/two /one/;
}
63. 更换上游服务器
语法:proxy_next_upstrearn[error | timeout | invalid_header l http_500 | http_502 |
http_503 | http_504 l http | 404 | off];
默认:proxy_next_upstrern error timeout;
配置块: http 、server 、location 。
说明:表示向上台上游服务器转发请求错误时,继续换一台上游服务器处理这个请求。因为上游服务器一旦开始发送应答,反向代理服务器会立刻把应答包转发给客户端,所以,一旦Nginx 开始向客户端发送响应包,之后的过程中若出现错误不允许换下一台上游服务器继续处理。proxy_next_ upstream 的参数用来说明在哪些情况下会继续选择下一台上游服务器转发请求。
可以使用的值和参数如下:
• error :上游服务器出现错误。
• timeout :发送请求或读取响应发生超时。
• invalid header :上游服务器发送的响应不合法。
• http_500 :上游服务器返回状态码是500 。
• http_502 :上游服务器返回状态码是502 。
• http_503 :上游服务器返回状态码是503 。
• http_504 :上游服务器返回状态码是504 0
• http_404 :上游服务器返回状态码是404 。
• off:关闭这个功能。
ngx_http_core_module 变量
ngx_http_ core_ module 模块提供了很多变量,可以在配置日志格式或URI 中使用。ngx_ http_ core_ module 变量。
参数 | 意义 |
$arg PARAMETER | HTTP 请求中某个参数的值,如/index . html?id=OO I ,可以使用$arg_i d 获取001 这个值 |
$args | HTTP 请求中的完整参数字符串,上项中的$args 是“ id=001 |
$bmary_remote_ addr | 二进制的客户端地址 |
$body_ bytes_ sent | 表示发送给客户端应答包体字节数 |
$content一length | 客户端请求头中的Content-Length 头域值 |
$content_type | 请求头中的Content-Type 字段 |
$cookie_COOKIE | 请求头中的cookie 字段 |
$document_root | 当前请求使用的root 配置选项( root 配置指令的值) |
$uri | 表示当前请求的URI,不含参数部分 |
$document_uri | 与$uri 含义相同 |
$request_uri | 表示请求的原始URI,包含完整参数。本变量在重定向后也不变 |
$host | 请求中的host 字段,只返回IP ,全部小写。如果host 字段不存在,则使用实际处理的 sever (虚拟主机)替代。$http_HEADER 取出的http_host 是原始的host 值, 不更改 |
$http_HEADER | 取出相应的请求头,如host 为$http_host ,头域名全部小写 |
$hostname | Nginx 所在主机名 |
$seat_http_HEADER | HTTP 应答头中相应的头域值,HEADER 全小写,如$sent_http host 是应答的host 头 |
$is_args | 表示请求中的U阳是否带参数,如是带参数值为“?”(一个问号),不带返回空字符串 |
$limit_rate | 当前连接限速多少, 0 表示无限速 |
$nginx version | 当前Nginx 版本号 |
$query_string | 请求URI中的参数,与$args 相同,但是$query_string 是只读的,不会改变 |
$remote_addr | 客户端地址 |
$ remote_port | 客户端地址 |
$remote_user | 使用AuthBasic Module 时定义的用户名 |
$request_ filename | 请求中的URI 经过root 或alias 转换后的文件路径 |
$request_ body | 请求的包体,只在proxy_pass 或fastcgi_pass 中有意义 |
$request_ body_ file | 请求包体临时存储的文件名 |
$request_ completion | 请求全部处理完成, 值为“ ok ”,否则都是空字符串 |
$request_method | Hπp 请求的方法,如GET、PUT
|
$schema | HTTP scheme ,如请求https://nginx.com, 值是https |
$server_addr | 服务器地址 |
$server_name | 服务器名字 |
$server_port | 服务器端口 |
$server_protocoI | 服务器发送响应时的协议,如HTTP/ 1.1 或HTTP/ 1.0 |