1、aio(异步IO)
Syntax: aio on | off | threads[=pool]; #不知道什么原因 on设置在1.11版本中,不可用 Default: aio off; Context: http, server, location
- 在linux平台下,nginx的aio和sendfile不能同时生效。
- aio和sendfile同时开启的情况下,当请求的文件大小>= direction,aio生效,反之sendfile生效。
- 对于大文件采用aio,节省cpu,而对于小文件,采用sendfile,减少拷贝;并且对于大文件aio采用directio,避免挤占文件系统缓存,让文件系统缓存更多的小文件。
例1:线程池配置 location / { aio threads; } 例2:在http模块外配置thread_pool thread_pool one threads=128 max_queue=0;#包括一个128个线程的线程池 thread_pool two threads=32; #在未定义max_queue时默认为65536,当设置成0时,服务能力等同线程数量。 http { server { location /one { aio threads=one; directio 512k; sendfile 0n; } location /two { aio threads=two; directio 512k; sendfile on; } }
2、directio
Syntax: directio size | off; Default: directio off; Context: http, server, location
见上面的 aio
3、aio_write
Syntax: aio_write on | off; Default: aio_write off; Context: http, server, location
If aio is enabled, specifies whether it is used for writing files. Currently, this only works when using aio threads and is limited to writing temporary files with data received from proxied servers.
4、directio_alignment
Syntax: directio_alignment size; Default: directio_alignment 512; Context: http, server, location 它与directio配合使用,指定以directio方式读取文件时的对齐方式。一般情况下,512B已经足够了,但针对一些高性能文件系统,如Linux下的XFS文件系统,可能需要设置到4KB作为对齐方式。 默认512 在ngx_output_chain_get_buf生效,表示分配内存空间的时候,空间起始地址需要按照这个值对齐
4、sendfile
Syntax: sendfile on | off; Default: sendfile off; Context: http, server, location, if in location
见上面的 aio
5、alias、root ,注意他们的区别
Syntax: root path; Default: root html; Context: http, server, location, if in location
Syntax: alias path; Context: location //仅可以在location模块中
location /img/ {
alias /var/www/image/;
}
#若按照上述配置的话,则访问/img/目录里面的文件时,ningx会自动去/var/www/image/目录找文件
location /img/ {
root /var/www/image;
}
#若按照这种配置的话,则访问/img/目录下的文件时,nginx会去/var/www/image/img/目录下找文件。
6、chunked_transfer_encoding
Syntax: chunked_transfer_encoding on | off; Default: chunked_transfer_encoding on; Context: http, server, location
7、
client_body_buffer_size
client_body_temp_path
Syntax: client_body_buffer_size size;
Default: client_body_buffer_size 8k|16k;
Context: http, server, location
面配置项定义了Nginx接收HTTP包体的内存缓冲区大小。也就是说,HTTP包体会先接收到指定的这块缓存中,之后才决定是否写入磁盘。
注意 如果用户请求中含有HTTP头部Content-Length,并且其标识的长度小于定义的buffer大小,那么Nginx会自动降低本次请求所使用的内存buffer,以降低内存消耗。
Syntax: client_body_temp_path path [level1 [level2 [level3]]];
Default: client_body_temp_path client_body_temp;
Context: http, server, location
上面配置项定义HTTP包体存放的临时目录。在接收HTTP包体时,如果包体的大小大于client_body_buffer_size,则会以一个递增的整数命名并存放到client_body_temp_path指定的目录中。后面跟着的level1、level2、level3,是为了防止一个目录下的文件数量太多,从而导致性能下降,因此使用了level参数,这样可以按照临时文件名最多再加三层目录。
例如:
client_body_temp_path /opt/nginx/client_temp 1 2; //数字2表示目录名的字符数.
如果新上传的HTTP 包体使用00000123456作为临时文件名,就会被存放在这个目录中。
/opt/nginx/client_temp/6/45/00000123456
client_body_in_file_only
Syntax: client_body_in_file_only on | clean | off; Default: client_body_in_file_only off; Context: http, server, location 当值为非off时,用户请求中的HTTP包体一律存储到磁盘文件中,即使只有0字节也会存储为文件(仅包括POST、PUT等有body的操作,如GET、HEAD则不会写入文件)。当请求结束时,如果配置为on,则这个文件不会被删除(该配置一般用于调试、定位问题),但如果配置为clean,则会删除该文件。
client_body_in_single_buffer
Syntax: client_body_in_single_buffer on | off; Default: client_body_in_single_buffer off; Context: http, server, location 用户请求中的HTTP包体一律存储到内存buffer中。当然,如果HTTP包体的大小超过了下面client_body_buffer_size设置的值,包体还是会写入到磁盘文件中。 当使用变量$request_body时推荐使用这个指令以减少复制操作。
client_max_body_size
Syntax: client_max_body_size size; Default: client_max_body_size 1m; Context: http, server, location 限制客户端发送的body内容的大小,仅仅是BODY,不包括HEAD,常用的场景是限制文件上传大小.超过大小默认返回:413 Request Entity Too Large
client_body_timeout
Syntax: client_body_timeout time; Default: client_body_timeout 60s; Context: http, server, location 此配置项与client_header_timeout相似,只是这个超时时间只在读取HTTP包体时才有效。
client_header_buffer_size
large_client_header_buffers
Syntax: client_header_buffer_size size; Default: client_header_buffer_size 1k; Context: http, server 请求中的请求行/请求头大于client_header_buffer_size,请启用large_client_header_buffers,一般情况下client_header_buffer_size的大小设置为1k.现在设置为8K. Syntax: large_client_header_buffers number size; Default: large_client_header_buffers 4 8k; Context: http, server 该值现在设置为4 64K; 设置原则:对于少数请求头超长,可通过large_client_header_buffers来进行设置,提高内存利用率。 如果多数请求头都超长,则可通过client_header_buffer_size来设置,减少内存分配次数。 注意:large_client_header_buffers的值必须>=connection_pool_size;
connection_pool_size
Syntax: connection_pool_size size; Default: connection_pool_size 256|512; Context: http, server Nginx对于每个建立成功的TCP连接会预先分配一个内存池,上面的size配置项将指定这个内存池的初始大小(即ngx_connection_t结构体中的pool内存池初始大小,9.8.1节将介绍这个内存池是何时分配的),用于减少内核对于小块内存的分配次数。需慎重设置,因为更大的size会使服务器消耗的内存增多,而更小的size则会引发更多的内存分配次数。
client_header_timeout
Syntax: client_header_timeout time; Default: client_header_timeout 60s; Context: http, server 客户端与服务器建立连接后将开始接收HTTP头部,在这个过程中,如果在一个时间间隔(超时时间)内没有读取到客户端发来的字节,则认为超时,并向客户端返回408 ("Request timed out")响应。默认60s
8、default_type
Syntax: default_type mime-type; Default: default_type text/plain; Context: http, server, location
9、disable_symlinks
Syntax: disable_symlinks off; disable_symlinks on | if_not_owner [from=part]; Default: disable_symlinks off; Context: http, server, location 决定nginx打开文件时如何处理符号链接: off 默认行为,允许路径中出现符号链接,不做检查。 on 如果文件路径中任何组成部分中含有符号链接,拒绝访问该文件。 if_not_owner 如果文件路径中任何组成部分中含有符号链接,且符号链接和链接目标的所有者不同,拒绝访问该文件。 from=part 当nginx进行符号链接检查时(参数on和参数if_not_owner),路径中所有部分默认都会被检查。而使用from=part参数可以避免对路径开始部分进行符号链接检查, 而只检查后面的部分路径。如果某路径不是以指定值开始,整个路径将被检查,就如同没有指定这个参数一样。如果某路径与指定值完全匹配,将不做检查。这 个参数的值可以包含变量。
10、
error_page
recursive_error_pages
Syntax: error_page code ... [=[response]] uri; Default: — Context: http, server, location, if in location 例1: error_page 401 /401.html; //response status 401 error_page 401 =200 /; error_page 401 =200 /index.php; error_page 401 http://www.baidu.com; error_page 500 502 503 504 /50x.html; //response status = 500 502 .... error_page 400 401 =200 /401.html; //response status=200 location / { error_page 404 = @fallback; } location @fallback { proxy_pass http://backend; } Syntax: recursive_error_pages on | off; Default: recursive_error_pages off; Context: http, server, location 确定是否允许递归地定义error_page。
11、etag
Syntax: etag on | off;
Default: etag on;
Context: http, server, location
Enables or disables automatic generation of the “ETag” response header field for static resources.
12、if_modified_since
Syntax: if_modified_since off | exact | before; Default: if_modified_since exact; Context: http, server, location 出于性能考虑,Web浏览器一般会在客户端本地缓存一些文件,并存储当时获取的时间。这样,下次向Web服务器获取缓存过的资源时,就可以用If-Modified-Since头部把上次获取的时间捎带上,而if_modified_since将根据后面的参数决定如何处理If-Modified-Since头部。 相关参数说明如下。 off:表示忽略用户请求中的If-Modified-Since头部。这时,如果获取一个文件,那么会正常地返回文件内容。HTTP响应码通常是200。 exact:将If-Modified-Since头部包含的时间与将要返回的文件上次修改的时间做精确比较,如果没有匹配上,则返回200和文件的实际内容,如果匹配上,则表示浏览器缓存的文件内容已经是最新的了,没有必要再返回文件从而浪费时间与带宽了,这时会返回304 Not Modified,浏览器收到后会直接读取自己的本地缓存。 before:是比exact更宽松的比较。只要文件的上次修改时间等于或者早于用户请求中的If-Modified-Since头部的时间,就会向客户端返回304 Not Modified。
13、ignore_invalid_headers
Syntax: ignore_invalid_headers on | off; Default: ignore_invalid_headers on; Context: http, server 安全配置 如果将其设置为off,那么当出现不合法的HTTP头部时,Nginx会拒绝服务,并直接向用户发送400(Bad Request)错误。如果将其设置为on,则会忽略此HTTP头部。
14、internal – rewrite中好用
Syntax: internal; Default: — Context: location internal指令指定某个location只能被“内部的”请求调用,外部的调用请求会返回"Not found" (404) “内部的”是指下列类型: ·指令error_page重定向的请求。 ·ngx_http_ssi_module模块中使用include virtual指令创建的某些子请求。 ·ngx_http_rewrite_module模块中使用rewrite指令修改的请求。 一个防止错误页面被用户直接访问的例子: error_page 404 /404.html; location /404.html { internal; } 在location{}中配置了internal,表示匹配该uri的location{}必须是进行重定向后匹配的该location,如果不满足条件直接返回NGX_HTTP_NOT_FOUND.
15、
keepalive_disable
keepalive_requests
keepalive_timeout
Syntax: keepalive_disable none | browser ...; Default: keepalive_disable msie6; Context: http, server, location HTTP请求中的keepalive功能是为了让多个请求复用一个HTTP长连接,这个功能对服务器的性能提高是很有帮助的。但有些浏览器,如IE 6和Safari,它们对于使用keepalive功能的POST请求处理有功能性问题。因此,针对IE 6及其早期版本、Safari浏览器默认是禁用keepalive功能的。 Syntax: keepalive_requests number; Default: keepalive_requests 100; Context: http, server, location 一个keepalive连接上默认最多只能发送100个请求。 设置通过一个长连接可以处理的最大请求数。 请求数超过此值,长连接将关闭。 Syntax: keepalive_timeout timeout [header_timeout]; Default: keepalive_timeout 75s; Context: http, server, location 一个keepalive 连接在闲置超过一定时间后(默认的是75秒),服务器和浏览器都会去关闭这个连接。当然,keepalive_timeout配置项是用来约束Nginx服务器的,Nginx也会按照规范把这个时间传给浏览器,但每个浏览器对待keepalive的策略有可能是不同的。 注意和ngx_http_upstream_keepalive_commands中keepalive的区别
16、limit_except
Syntax: limit_except method ... { ... } Default: — Context: location 允许按请求的HTTP方法限制对某路径的请求。method用于指定不由这些限制条件进行过滤的HTTP方法,可选值有 GET、 HEAD、 POST、 PUT、 DELETE、 MKCOL、 COPY、 MOVE、 OPTIONS、 PROPFIND、 PROPPATCH、 LOCK、 UNLOCK 或者 PATCH。 指定method为GET方法的同时,nginx会自动添加HEAD方法。 那么其他HTTP方法的请求就会由指令引导的配置块中的ngx_http_access_module 模块和ngx_http_auth_basic_module模块的指令来限制访问。 例子: limit_except GET { allow 192.168.1.0/32; deny all; }
17、
limit_rate
limit_rate_after
Syntax: limit_rate rate; Default: limit_rate 0; Context: http, server, location, if in location 限制向客户端传送响应的速率限制。参数rate的单位是字节/秒,设置为0将关闭限速。 nginx按连接限速,所以如果某个客户端同时开启了两个连接, 那么客户端的整体速率是这条指令设置值的2倍。 也可以利用$limit_rate变量设置流量限制。如果想在特定条件下限制响应传输速率,可以使用这个功能: server { if ($slow) { set $limit_rate 4k; } ... } 此外,也可以通过“X-Accel-Limit-Rate”响应头来完成速率限制。 这种机制可以用proxy_ignore_headers指令和 fastcgi_ignore_headers指令关闭。 Syntax: limit_rate_after size; Default: limit_rate_after 0; Context: http, server, location, if in location 设置不限速传输的响应大小。当传输量大于此值时,超出部分将限速传送。 例1: location /flv/ { limit_rate_after 500k; limit_rate 50k; } 表示超过500k,将限速50K/s传输.
18、
lingering_close //延迟关闭
lingering_time //延迟时间
lingering_timeout
Syntax: lingering_close off | on | always; Default: lingering_close on; Context: http, server, location 该配置控制Nginx关闭用户连接的方式。 always表示关闭用户连接前必须无条件地处理连接上所有用户发送的数据。 off表示关闭连接时完全不管连接上是否已经有准备就绪的来自用户的数据。 on是中间值,一般情况下在关闭连接前都会处理连接上的用户发送的数据,除了有些情况下在业务上认定这之后的数据是不必要的。 Syntax: lingering_time time; Default: lingering_time 30s; Context: http, server, location lingering_close启用后,这个配置项对于上传大文件很有用。当用户请求的Content-Length大于max_client_body_size配置时,Nginx服务会立刻向用户发送413(Request entity too large)响应。但是,很多客户端可能不管413返回值,仍然持续不断地上传HTTP body,这时,经过了lingering_time设置的时间后,Nginx将不管用户是否仍在上传,都会把连接关闭掉。 Syntax: lingering_timeout time; Default: lingering_timeout 5s; Context: http, server, location lingering_close生效后,在关闭连接前,会检测是否有用户发送的数据到达服务器,如果超过lingering_timeout时间后还没有数据可读,就直接关闭连接;否则,必须在读取完连接缓冲区上的数据并丢弃掉后才会关闭连接。 参考:nginx基础概念(100%)之lingering_close
19、Listen
Syntax: listen address[:port] [default_server] [ssl] [http2 | spdy] [proxy_protocol] [setfib=number] [fastopen=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [ipv6only=on|off] [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]]; listen port [default_server] [ssl] [http2 | spdy] [proxy_protocol] [setfib=number] [fastopen=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [ipv6only=on|off] [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]]; listen unix:path [default_server] [ssl] [http2 | spdy] [proxy_protocol] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]]; Default: listen *:80 | *:8000; Context: server
20、
log_not_found
log_subrequest
Syntax: log_not_found on | off; Default: log_not_found on; Context: http, server, location 此配置项表示当处理用户请求且需要访问文件时,如果没有找到文件,是否将错误日志记录到error.log文件中。这仅用于定位问题。 Syntax: log_subrequest on | off; Default: log_subrequest off; Context: http, server, location Enables or disables logging of subrequests into access_log.
21、max_ranges
Syntax: max_ranges number; Default: — Context: http, server, location Limits the maximum allowed number of ranges in byte-range requests. Requests that exceed the limit are processed as if there were no byte ranges specified. By default, the number of ranges is not limited. The zero value disables the byte-range support completely.
22、merge_slashes
Syntax: merge_slashes on | off; Default: merge_slashes on; Context: http, server 此配置项表示是否合并相邻的“/”,例如,//test///a.txt,在配置为on时,会将其匹配为location /test/a.txt;如果配置为off,则不会匹配,URI将仍然是//test///a.txt。
23、
msie_padding
msie_refresh
Syntax: msie_padding on | off; Default: msie_padding on; Context: http, server, location 指令指定开启或关闭MSIE浏览器和chrome浏览器(0.8.25+)的msie_padding特征,当这个功能开启,nginx将为响应实体分配最小512字节,以便响应大于或等于400的状态代码。 指令预防在MSIE和chrome浏览器中激活“友好的”HTTP错误页面,以便不在服务器端隐藏更多的错误信息。 Syntax: msie_refresh on | off; Default: msie_refresh off; Context: http, server, location 指令允许或拒绝为MSIE发布一个refresh而不是做一次redirect
24、
server_names_hash_bucket_size
server_names_hash_max_size
types_hash_bucket_size
types_hash_max_size
variables_hash_bucket_size
variables_hash_max_size
Syntax: server_names_hash_bucket_size size; Default: server_names_hash_bucket_size 32|64|128; Context: http Syntax: server_names_hash_max_size size; Default: server_names_hash_max_size 512; Context: http Syntax: variables_hash_bucket_size size; Default: variables_hash_bucket_size 64; Context: http Syntax: variables_hash_max_size size; Default: variables_hash_max_size 1024; Context: http Syntax: types_hash_bucket_size size; Default: types_hash_bucket_size 64; Context: http, server, location Syntax: types_hash_max_size size; Default: types_hash_max_size 1024; Context: http, server, location 参考文章:nginx hash结构存储
25、underscores_in_headers
Syntax: underscores_in_headers on | off;
Default: underscores_in_headers off;
Context: http, server
默认为off,表示HTTP头部的名称中不允许带“_”(下画线)
26、try_files
Syntax: try_files file ... uri; try_files file ... =code; Default: — Context: server, location try_files后要跟若干路径,如path1 path2...,而且最后必须要有uri参数,意义如下:尝试按照顺序访问每一个path,如果可以有效地读取,就直接向用户返回这个path对应的文件结束请求,否则继续向下访问。如果所有的path都找不到有效的文件,就重定向到最后的参数uri上。因此,最后这个参数uri必须存在,而且它应该是可以有效重定向的。 例如: try_files /system/maintenance.html $uri $uri/index.html $uri.html @other; location @other { proxy_pass http://backend; } 上面这段代码表示如果前面的路径,如/system/maintenance.html等,都找不到,就会反向代理到http://backend服务上。还可以用指定错误码的方式与error_page配合使用,例如: location / { try_files $uri $uri/ /error.php?c=404 =404; } try_files和error_page都有重定向功能
27
tcp_nodelay
tcp_nopush
Syntax: tcp_nodelay on | off;
Default: tcp_nodelay on;
Context: http, server, location
确定对keepalive连接是否使用TCP_NODELAY选项。 TCP_NODEALY其实就是禁用naggle算法,即使是小包也立即发送,TCP_CORK则和他相反,只有填充满后才发送
Syntax: tcp_nopush on | off;
Default: tcp_nopush off;
Context: http, server, location
在打开sendfile选项时,确定是否开启FreeBSD系统上的TCP_NOPUSH或Linux系统上的TCP_CORK功能。打开tcp_nopush后,将会在发送响应时把整个响应包头放到一个TCP包中发送。
28、server_tokens
Syntax: server_tokens on | off | string; Default: server_tokens on; Context: http, server, location 出错时,是否发送nginx版本
29、
server_name_in_redirect
port_in_redirect
Syntax: server_name_in_redirect on | off; Default: server_name_in_redirect off; Context: http, server, location 该配置需要配合server_name使用。在使用on打开后,表示在重定向请求时会使用server_name里的第一个主机名代替原先请求中的Host头部,而使用off关闭时,表示在重定向请求时使用请求本身的HOST头部。 Syntax: port_in_redirect on | off; Default: port_in_redirect on; Context: http, server, location
30、sendfile_max_chunk
Syntax: sendfile_max_chunk size; Default: sendfile_max_chunk 0; Context: http, server, location
31 、send_timeout
Syntax: send_timeout time; Default: send_timeout 60s; Context: http, server, location
32、send_lowat
Syntax: send_lowat size; Default: send_lowat 0; Context: http, server, location 参考:TCP选项之SO_RCVLOWAT和SO_SNDLOWAT TCP选项之SO_RCVBUF和SO_SNDBUF
33、satisfy
Syntax: satisfy all | any; Default: satisfy all; Context: http, server, location 相对于NGX HTTP ACCESS PHASE阶段处理方法,satisfy配置项参数的意义 all: NGX HTTP ACCESS PHASE阶段可能有很多HTTP模块都对控制请求的访问权限感兴趣,那么以哪一个为准呢?当satisfy的参数为all时,这些HTTP模块必须同时发生作用,即以该阶段中全部的handler方法共同决定请求的访问权限,换句话说,这一阶段的所有handler方法必须全部返回NGX OK才能认为请求具有访问权限 any : 与all相反,参数为any时意味着在NGX—HTTP__ ACCESS—PHASE阶段只要有任意一个HTTP模块认为请求合法,就不用再调用其他HTTP模块继续检查了,可以认为请求是具有访问权限的。实际上,这时的情况有些复杂:如果其中任何一个handler方法返回NGX二OK,则认为请求具有访问权限;如果某一个handler方法返回403戎者401,则认为请求没有访问权限,还需要检查NGX—HTTP—ACCESS—PHASE阶段的其他handler方法。也就是说,any配置项下任何一个handler方法一旦认为请求具有访问权限,就认为这一阶段执行成功,继续向下执行;如果其中一个handler方法认为没有访问权限,则未必以此为准,还需要检测其他的hanlder方法。all和any有点像“&&”和“¨”的关系
34、
resolver
resolver_timeout
Syntax: resolver address ... [valid=time] [ipv6=on|off]; Default: — Context: http, server, location 设置DNS名字解析服务器的地址,例如: Syntax: resolver_timeout time; Default: resolver_timeout 30s; Context: http, server, location DNS解析超时时间
35、reset_timedout_connection
Syntax: reset_timedout_connection on | off; Default: reset_timedout_connection off; Context: http, server, location
36、read_ahead
Syntax: read_ahead size; Default: read_ahead 0; Context: http, server, location
37、postpone_output
Syntax: postpone_output size; Default: postpone_output 1460; Context: http, server, location 由于处理postpone_output指令,用于设置延时输出的阈值。比如指令“postpone s”,当输出内容的size小于s, 默认1460并且不是最后一个buffer,也不需要flush,那么就延时输出。见ngx_http_write_filter
38、output_buffers
Syntax: output_buffers number size; Default: output_buffers 2 32k; Context: http, server, location
39、
open_file_cache_valid
open_file_cache_min_uses
open_file_cache_errors
open_file_cache
Syntax: open_file_cache off; open_file_cache max=N [inactive=time]; Default: open_file_cache off; Context: http, server, location Syntax: open_file_cache_errors on | off; Default: open_file_cache_errors off; Context: http, server, location Syntax: open_file_cache_min_uses number; Default: open_file_cache_min_uses 1; Context: http, server, location Syntax: open_file_cache_valid time; Default: open_file_cache_valid 60s; Context: http, server, location
相关文章:
Pingback引用通告: Nginx反向代理和负载均衡配置 | 精彩每一天
Pingback引用通告: Nginx中http_limit_conn_module的配置 | 精彩每一天
Pingback引用通告: Nginx中http_limit_req_module的配置 | 精彩每一天