ngx_http_core_module
ngx_http_core_module模块
- 指令
- absolute_redirect
- aio
- aio_write
- 别名
- chunked_transfer_encoding
- client_body_buffer_size
- client_body_in_file_only
- client_body_in_single_buffer
- client_body_temp_path
- client_body_timeout
- client_header_buffer_size
- client_header_timeout
- client_max_body_size
- connection_pool_size
- default_type
- directio
- directio_alignment
- disable_symlinks
- error_page
- etag
- http
- if_modified_since
- ignore_invalid_headers
- internal
- keepalive_disable
- keepalive_requests
- keepalive_timeout
- large_client_header_buffers
- limit_except
- limit_rate
- limit_rate_after
- lingering_close
- lingering_time
- lingering_timeout
- listen
- location
- log_not_found
- log_subrequest
- max_ranges
- merge_slashes
- msie_padding
- msie_refresh
- open_file_cache
- open_file_cache_errors
- open_file_cache_min_uses
- open_file_cache_valid
- output_buffers
- port_in_redirect
- postpone_output
- read_ahead
- recursive_error_pages
- request_pool_size
- reset_timedout_connection
- resolver
- resolver_timeout
- root
- satisfy
- send_lowat
- send_timeout
- sendfile
- sendfile_max_chunk
- server
- server_name
- server_name_in_redirect
- server_names_hash_bucket_size
- server_names_hash_max_size
- server_tokens
- tcp_nodelay
- tcp_nopush
- try_files
- types
- types_hash_bucket_size
- types_hash_max_size
- underscores_in_headers
- variables_hash_bucket_size
- variables_hash_max_size
- Embedded Variables
指令
句法: | absolute_redirect 开启| 关闭; |
---|---|
默认: | absolute_redirect; |
语境: | http,服务器,位置 |
如果禁用,nginx发出的重定向将是相对的。
另请参阅server_name_in_redirect和port_in_redirect指令。
句法: | aio 开启 | 关闭| threads=pool ; |
---|---|
默认: | aio off; |
语境: | http,服务器,位置 |
启用或禁用在FreeBSD和Linux上使用异步文件I / O(AIO):
location /video/ {
aio on;
output_buffers 1 64k;
}
在FreeBSD上,AIO可以从FreeBSD 4.3开始使用。在FreeBSD 11.0之前,AIO可以静态链接到内核中:
options VFS_AIO
或者作为内核可加载模块动态加载:
kldload aio
在Linux上,AIO可以从内核版本2.6.22开始使用。此外,有必要启用directio,否则读取将被阻止:
location /video/ {
aio on;
directio 512;
output_buffers 1 128k;
}
在Linux上,directio只能用于读取以512字节边界对齐的块(或XFS的4K)。文件未对齐的结尾是在阻止模式下读取的。字节范围请求和FLV请求的情况也是如此,而不是从文件开始:读取文件开头和结尾的未对齐数据将被阻止。
当在Linux上启用AIO和sendfile时,AIO将用于大于或等于directio指令中指定大小的文件,而sendfile用于较小大小的文件或禁用directio时。
location /video/ {
sendfile on;
aio on;
directio 8m;
}
最后,可以使用多线程(1.7.11)读取和发送文件,而不会阻塞工作进程:
location /video/ {
sendfile on;
aio threads;
}
读取和发送文件操作被卸载到指定池的线程。如果池名称被省略,则使用名称为“ default
” 的池。池名称也可以使用变量进行设置:
aio threads=pool$disk;
默认情况下,多线程处于禁用状态,应该使用--with-threads
配置参数启用它。目前,多线程仅与epoll,kqueue和eventport方法兼容。多线程发送文件仅在Linux上受支持。
另请参阅sendfile指令。
句法: | aio_write 开启 | 关闭; |
---|---|
默认: | aio_write 关闭; |
语境: | http,服务器,位置 |
如果启用了aio,则指定它是否用于写入文件。目前,这仅适用于使用aio threads
并限于使用从代理服务器接收的数据编写临时文件。
句法: | 别名路径; |
---|---|
默认: | — |
语境: | 位置 |
定义指定位置的替代品。例如,使用以下配置
location /i/ {
alias /data/w3/images/;
}
根据“ /i/top.gif
”的要求,文件/data/w3/images/top.gif
将被发送。
该path
值可以包含变量,除了$document_root
和$realpath_root
。
如果alias
在用正则表达式定义的位置内使用,那么这样的正则表达式应该包含捕获并且alias
应该引用这些捕获(0.7.40),例如:
location ~ ^/users/(.+\.(?:gif|jpe?g|png))$ {
alias /data/w3/images/$1;
}
当位置与指令值的最后部分匹配时:
location /images/ {
alias /data/w3/images/;
}
相反,最好使用root指令:
location /images/ {
root /data/w3;
}
句法: | chunked_transfer_encoding开启| 关闭; |
---|---|
默认: | chunked_transfer_encoding开启; |
语境: | http,服务器,位置 |
允许在HTTP / 1.1中禁用分块传输编码。尽管有标准要求,但使用软件无法支持分块编码时,它可能会派上用场。
句法: | client_body_buffer_size大小; |
---|---|
默认: | client_body_buffer_size 8k | 16k; |
语境: | http,服务器,位置 |
设置读取客户端请求主体的缓冲区大小。如果请求主体大于缓冲区,则整个主体或仅其部分被写入临时文件。默认情况下,缓冲区大小等于两个内存页面。这在x86,其他32位平台和x86-64上是8K。在其他64位平台上通常为16K。
句法: | client_body_in_file_only开启| clean| 关闭; |
---|---|
默认: | client_body_in_file_only关闭; |
语境: | http,服务器,位置 |
确定nginx是否应将整个客户端请求正文保存到文件中。该指令可以在调试过程中使用,或者在使用$request_body_file变量时使用,或者在模块ngx_http_perl_module中使用$ r-> request_body_file方法。
设置为on值时,请求处理后不会删除临时文件。
该clean
值导致请求处理后留下的临时文件被删除。
句法: | client_body_in_single_buffer开启 关闭; |
---|---|
默认: | client_body_in_single_buffer 关闭; |
语境: | http,服务器,位置 |
确定nginx是否应将整个客户端请求主体保存在单个缓冲区中。在使用$request_body
变量时建议使用该指令来保存涉及的复制操作的数量。
句法: | client_body_temp_path path [level1 [level2 level3]]; |
---|---|
默认: | client_body_temp_path client_body_temp; |
语境: | http,服务器,位置 |
定义一个用于存储持有客户端请求主体的临时文件的目录。在指定的目录下最多可以使用三级子目录层次结构。例如,在以下配置中
client_body_temp_path /spool/nginx/client_temp 1 2;
临时文件的路径可能如下所示:
/spool/nginx/client_temp/7/45/00000123457
句法: | client_body_timeout时间; |
---|---|
默认: | client_body_timeout 60s; |
语境: | http,服务器,位置 |
定义读取客户端请求主体的超时。超时只能在两个连续读操作之间的一段时间内设置,而不是传输整个请求主体。如果客户端在此时间内没有传输任何内容,则408(请求超时)错误将返回给客户端。
句法: | client_header_buffer_size大小; |
---|---|
默认: | client_header_buffer_size 1k; |
语境: | http,服务器 |
设置读取客户端请求标头的缓冲区大小。对于大多数请求,1K字节的缓冲区就足够了。但是,如果请求包含长Cookie或来自WAP客户端,则可能不适合1K。如果请求行或请求头字段不适合此缓冲区,则会分配由large_client_header_buffers指令配置的较大缓冲区。
句法: | client_header_timeout时间; |
---|---|
默认: | client_header_timeout 60s; |
语境: | http,服务器 |
定义读取客户端请求标头的超时。如果客户端在此时间内未传输整个报头,则408(请求超时)错误将返回给客户端。
句法: | client_max_body_size大小; |
---|---|
默认: | client_max_body_size 1m; |
语境: | http,服务器,位置 |
设置“Content-Length”请求标题字段中指定的客户端请求主体的最大允许大小。如果请求中的大小超过配置的值,则413(请求实体太大)错误将返回给客户端。请注意,浏览器无法正确显示此错误。设置size
为0将禁用客户端请求主体大小的检查。
句法: | connection_pool_size大小; |
---|---|
默认: | connection_pool_size 256 | 512; |
语境: | http,服务器 |
允许精确调整每个连接的内存分配。该指令对性能的影响最小,通常不应使用。默认情况下,大小等于32位平台上的256字节和64位平台上的512字节。
在版本1.9.8之前,所有平台的默认值都是256。
句法: | default_type mime-type; |
---|---|
默认: | default_type text / plain; |
语境: | http,服务器,位置 |
定义响应的默认MIME类型。文件扩展名到MIME类型的映射可以使用types指令来设置。
句法: | 方向大小| 关闭; |
---|---|
默认: | 指挥; |
语境: | http,服务器,位置 |
在读取大于或等于指定大小的文件时,允许使用O_DIRECT标志(FreeBSD,Linux),F_NOCACHE标志(macOS)或directio()函数(Solaris)。 该指令自动禁用(0.7.15)给定请求的sendfile的使用。 它可以用于服务大型文件:
directio 4m;
或者在Linux上使用aio时。
句法: | directio_alignment大小; |
---|---|
默认: | directio_alignment 512; |
语境: | http,服务器,位置 |
设置方向对齐。在大多数情况下,512字节的对齐就足够了。但是,在Linux下使用XFS时,它需要增加到4K。
句法: | disable_symlinks off; disable_symlinks on | if_not_owner来自=部分; |
---|---|
默认: | disable_symlinks 关闭; |
语境: | http,服务器,位置 |
确定如何在打开文件时处理符号链接:
关闭路径名中的符号链接是允许的并且不被检查。 这是默认行为。 on如果路径名的任何组件是符号链接,则拒绝访问文件。 if_not_owner如果路径名的任何组件是符号链接,并且链接指向的链接和对象具有不同的所有者,则拒绝对文件的访问。 from = part当检查符号链接(参数on和if_not_owner)时,通常会检查路径名的所有组件。 通过额外指定from = part参数,可以避免检查路径名初始部分中的符号链接。 在这种情况下,符号链接仅从指定的初始部件后面的路径名组件检查。 如果该值不是被检查的路径名的初始部分,则检查整个路径名,就好像该参数根本没有被指定一样。 如果该值与整个文件名匹配,则不检查符号链接。 参数值可以包含变量。
例:
disable_symlinks on from=$document_root;
该指令仅在具有openat()
和fstatat()
接口的系统上可用。这些系统包括FreeBSD,Linux和Solaris的现代版本。
参数on
与if_not_owner
添加处理开销。
在不支持只为搜索打开目录的系统上,要使用这些参数,需要工作进程对所有正在检查的目录具有读取权限。ngx_http_autoindex_module,ngx_http_random_index_module和ngx_http_dav_module模块当前忽略此指令。
句法: | error_page代码... [=回复] uri; |
---|---|
默认: | — |
语境: | http,服务器,位置,如果在位置 |
定义将针对指定错误显示的URI。一个uri
值可以包含变量。
例:
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
这导致内部重定向到uri
用客户端请求方法指定更改为“ GET
”(除“ GET
”和“ HEAD
” 之外的所有方法)。
此外,可以使用“ =response
”语法将响应代码更改为另一个,例如:
error_page 404 =200 /empty.gif;
如果错误响应由代理服务器或FastCGI / uwsgi / SCGI服务器处理,并且服务器可能返回不同的响应代码(例如,200,302,401或404),则可以使用返回的代码进行响应:
error_page 404 = /404.php;
如果在内部重定向期间不需要更改URI和方法,则可以将错误处理传递到命名位置:
location / {
error_page 404 = @fallback;
}
location @fallback {
proxy_pass http://backend;
}
如果
uri
处理导致错误,则最后发生的错误的状态代码将返回给客户端。
也可以使用URL重定向进行错误处理:
error_page 403 http://example.com/forbidden.html;
error_page 404 =301 http://example.com/notfound.html;
在这种情况下,默认情况下,将响应代码302返回给客户端。只能将其更改为其中一个重定向状态代码(301,302,303,307和308)。
在版本1.1.16和1.0.13之前,代码307不被视为重定向。代码308在版本1.13.0之前不被视为重定向。
当且仅当没有error_page
在当前级别上定义的指令时,这些指令才从前一级继承。
句法: | etag 开启 | 关闭; |
---|---|
默认: | etag; |
语境: | http,服务器,位置 |
启用或禁用自动生成静态资源的“ETag”响应标题字段。
句法: | http {...} |
---|---|
默认: | — |
语境: | 主要 |
提供指定HTTP服务器指令的配置文件上下文。
句法: | if_modified_since 关闭| exact | before; |
---|---|
默认: | if_modified_since exact ; |
语境: | http,服务器,位置 |
指定如何将响应的修改时间与“If-Modified-Since”请求标头字段中的时间进行比较:
off
“If-Modified-Since”请求标题字段被忽略(0.7.34);
句法: | ignore_invalid_headers 开启|关闭; |
---|---|
默认: | ignore_invalid_headers 开启; |
语境: | http,服务器 |
控制是否应忽略具有无效名称的标题字段。有效名称由英文字母,数字,连字符和可能的下划线组成(由underscores_in_headers指令控制)。
如果该指令是在服务器级别指定的,则仅在服务器是默认服务器时才使用该值。指定的值也适用于侦听相同地址和端口的所有虚拟服务器。
句法: | 内部; |
---|---|
默认: | — |
语境: | 位置 |
指定给定位置只能用于内部请求。对于外部请求,将返回客户端错误404(未找到)。内部请求如下:
- 由error_page,index,random_index和try_files指令重定向的请求;
- 来自上游服务器的“X-Accel-Redirect”响应头字段重定向的请求;
- 通过
include virtual
ngx_http_ssi_module模块的“ ”命令,ngx_http_addition_module模块指令以及auth_request和mirror指令形成的子请求;
- 请求由重写指令改变。
例:
error_page 404 /404.html;
location /404.html {
internal;
}
每个请求有10个内部重定向的限制,以防止不正确配置中可能发生的请求处理周期。如果达到此限制,则返回错误500(内部服务器错误)。在这种情况下,可以在错误日志中看到“重写或内部重定向周期”消息。
句法: | keepalive_disable none | browser...; |
---|---|
默认: | keepalive_disable msie6; |
语境: | http,服务器,位置 |
禁用与行为不当的浏览器保持连接的连接。这些browser
参数指定哪些浏览器会受到影响。msie6
一旦收到POST请求,该值将禁用与旧版MSIE的保持连接。该值safari
在macOS和类似macOS的操作系统上禁用与Safari和类似Safari的浏览器的保持活动连接。该值none
可以保持与所有浏览器的连接。
在版本1.1.18之前,该值
safari
与所有操作系统上的所有Safari和类似Safari浏览器相匹配,并且与它们保持连接状态默认情况下处于禁用状态。
句法: | keepalive_requests数量; |
---|---|
默认: | keepalive_requests 100; |
语境: | http,服务器,位置 |
设置可通过一个保持活动连接提供服务的最大请求数。在发出最大数量的请求后,连接将关闭。
句法: | keepalive_timeout timeout header_timeout; |
---|---|
默认: | keepalive_timeout 75s; |
语境: | http,服务器,位置 |
第一个参数设置保持活动客户端连接在服务器端保持打开状态的超时时间。零值禁用保持连接的客户端连接。可选的第二个参数在“Keep-Alive:time
out = time
”响应头字段中设置一个值。两个参数可能不同。
“Keep-Alive:time
out = time
”标题字段由Mozilla和Konqueror识别。MSIE在大约60秒内自行关闭保持活动连接。
句法: | large_client_header_buffers数字大小; |
---|---|
默认: | large_client_header_buffers 4 8k; |
语境: | http,服务器 |
设置用于读取大型客户端请求标头的最大值number
和size
缓冲区。请求行不能超过一个缓冲区的大小,或者414(Request-URI太大)错误返回给客户端。请求头字段也不能超过一个缓冲区的大小,或者400(错误请求)错误返回给客户端。缓冲区仅在需求时分配。默认情况下,缓冲区大小等于8K字节。如果请求处理结束后连接转换为保持活动状态,则释放这些缓冲区。
句法: | limit_except method... {...} |
---|---|
默认: | — |
语境: | 位置 |
限制允许位置内的HTTP方法。该method
参数可以是下列之一:GET
,HEAD
,POST
,PUT
,DELETE
,MKCOL
,COPY
,MOVE
,OPTIONS
,PROPFIND
,PROPPATCH
,LOCK
,UNLOCK
,或PATCH
。允许该GET
方法HEAD
也允许该方法。使用ngx_http_access_module和ngx_http_auth_basic_module模块指令可以限制对其他方法的访问:
limit_except GET {
allow 192.168.1.0/32;
deny all;
}
请注意,这将限制访问除
GET和HEAD 以外的
所有方法。
句法: | limit_rate rate ; |
---|---|
默认: | limit_rate 0; |
语境: | http,服务器,位置,如果在此位置 |
限制对客户的响应传输速率。rate
被以每秒字节数指定。零值禁用速率限制。限制是根据请求设置的,所以如果客户端同时打开两个连接,总体速率将是指定限制的两倍。
速率限制也可以在$limit_rate
变量中设置。在某些情况下,根据一定的条件限制费率可能会有用:
server {
if ($slow) {
set $limit_rate 4k;
}
...
}
速率限制也可以在代理服务器响应的“X-Accel-Limit-Rate”标题字段中设置。可以使用proxy_ignore_headers,fastcgi_ignore_headers,uwsgi_ignore_headers和scgi_ignore_headers指令禁用此功能。
句法: | limit_rate_after size; |
---|---|
默认: | limit_rate_after 0; |
语境: | http,服务器,位置,如果在此位置 |
设置初始数目,之后将对客户进一步传送回复将受到速率限制。
例:
location /flv/ {
flv;
limit_rate_after 500k;
limit_rate 50k;
}
句法: | lingering_close 关闭| 开启| always; |
---|---|
默认: | lingering_close 开启; |
语境: | http,服务器,位置 |
控制nginx如何关闭客户端连接。
默认值“ on
”指示nginx在完全关闭连接之前等待并处理来自客户端的额外数据,但只有当启发式提示客户端可能正在发送更多数据时。
值“ always
”将导致nginx无条件地等待并处理额外的客户端数据。
值“ off
”告诉nginx永远不要等待更多数据并立即关闭连接。此行为违反了协议,不应在正常情况下使用。
句法: | lingering_time time; |
---|---|
默认: | lingering_time 30s; |
语境: | http,服务器,位置 |
当lingering_close有效时,该指令指定nginx将处理(读取和忽略)来自客户端的附加数据的最长时间。之后,即使会有更多数据,连接也会关闭。
句法: | lingering_timeout time; |
---|---|
默认: | lingering_timeout 5s; |
语境: | http,服务器,位置 |
当lingering_close生效时,此指令指定了更多客户端数据到达的最长等待时间。如果在此期间没有收到数据,则连接关闭。否则,数据被读取并被忽略,并且nginx开始再次等待更多数据。重复“wait-read-ignore”循环,但不超过lingering_time指令指定的时间。
Syntax: | listen address:port ssl proxy_protocol fastopen=number rcvbuf=size accept_filter=filter bind reuseportso_keepalive=on|off|keepidle:keepintvl:keepcnt];listen port default_server http2 | spdy setfib=number backlog=number sndbuf=size deferred ipv6only=on|off [so_keepalive=on|off|keepidle:keepintvl:keepcnt];listen unix:path default_server http2 | spdy backlog=number sndbuf=size deferred [so_keepalive=on|off|keepidle:keepintvl:keepcnt]; |
---|---|
Default: | listen *:80 | *:8000; |
Context: | server |
设置IP的地址和端口,或服务器将接受请求的UNIX域套接字的路径。 可以指定地址和端口,也可以只指定地址或只指定端口。 地址也可以是主机名,例如:
listen 127.0.0.1:8000;
listen 127.0.0.1;
listen 8000;
listen *:8000;
listen localhost:8000;
IPv6地址(0.7.36)在方括号中指定:
listen [::]:8000;
listen [::1];
UNIX域套接字(0.8.21)用“ unix:
”前缀指定:
listen unix:/var/run/nginx.sock;
如果仅给出address
,则使用端口80。
如果指令不存在,那么如果nginx以超级用户权限运行,则使用*:80;否则使用*:8000。
该default_server
参数(如果存在)将使服务器成为指定address
:port
对的默认服务器。如果没有指令具有该default_server
参数,则带有address
:port
对的第一台服务器将成为该对的默认服务器。
在0.8.21之前的版本中,这个参数被简单地命名
default
。
该ssl
参数(0.7.14)允许指定此端口上接受所有的连接应在SSL模式下工作。这可以为处理HTTP和HTTPS请求的服务器提供更紧凑的配置。
http2
参数(1.9.5)配置端口接受HTTP / 2连接。通常情况下,为了这个工作,ssl
参数也应该被指定,但是nginx也可以被配置为接受没有SSL的HTTP / 2连接。
spdy
参数(1.3.15-1.9.4)允许接受这个端口上SPDY连接。通常情况下,为了这个工作,ssl
参数也应该被指定,但是nginx也可以被配置为接受没有SSL的SPDY连接。
proxy_protocol
参数(1.5.12)允许指定这个端口上接受的所有连接应使用代理服务器协议。
listen
指令可以具有特定于套接字相关系统调用的几个附加参数。这些参数可以在任何listen
指令中指定,但对于给定address
:port
对只能指定一次。
在0.8.21之前的版本中,它们只能在
listen
指令中与default
参数一起指定。
setfib
= number
此参数(0.8.44 SO_SETFIB
)为监听套接字设置关联的路由表FIB(选项)。目前这只适用于FreeBSD。fastopen
= 为监听套接字(1.5.8)number
启用“ TCP Fast Open ”,并限制尚未完成三次握手的连接队列的最大长度。
除非服务器可以处理多次接收包含数据的同一个SYN数据包,否则不要启用此功能。
backlog = number在listen()调用中设置限制未决连接队列的最大长度的backlog参数。默认情况下,backlog在FreeBSD,DragonFly BSD和macOS上设置为-1,在其他平台上设置为511。 rcvbuf = size设置侦听套接字的接收缓冲区大小(SO_RCVBUF选项)。 sndbuf = size设置侦听套接字的发送缓冲区大小(SO_SNDBUF选项)。 accept_filter = filter为监听套接字设置接受过滤器的名称(SO_ACCEPTFILTER选项),该套接字在将传入连接传递给accept()之前对其进行过滤。这只适用于FreeBSD和NetBSD 5.0+。可能的值是dataready和httpready。延迟指示在Linux上使用延迟接受()(TCP_DEFER_ACCEPT套接字选项)。绑定指示为给定地址:端口对进行单独的bind()调用。这很有用,因为如果有几个具有相同端口但不同地址的listen指令,并且其中一个listen指令侦听给定端口(*:port)的所有地址,nginx将仅绑定(*)到*:port。应该指出的是,在这种情况下将进行getsockname()系统调用以确定接受连接的地址。如果使用setfib,backlog,rcvbuf,sndbuf,accept_filter,deferred,ipv6only或so_keepalive参数,那么对于给定的address:port对,总是会创建一个单独的bind()调用。 ipv6only = on | off此参数(0.7.42)决定(通过IPV6_V6ONLY套接字选项)侦听通配符地址[::]的IPv6套接字是仅接受IPv6连接,还是只接受IPv6和IPv4连接。该参数默认打开。它只能在启动时设置一次。
在版本1.3.4之前,如果此参数被省略,则操作系统的设置对套接字有效。
reuseport
此参数(1.9.1)指示为每个工作进程(使用SO_REUSEPORT
套接字选项)创建单独的侦听套接字,从而允许内核在工作进程之间分配传入连接。目前这只适用于Linux 3.9+和DragonFly BSD。
不恰当地使用此选项可能会产生其安全隐患。
so_keepalive = on | off | keepidle:keepintvl:keepcnt该参数(1.1.11)为监听套接字配置“TCP keepalive”行为。 如果省略此参数,则操作系统的设置将对套接字有效。 如果将其设置为“on”,则对套接字打开SO_KEEPALIVE选项。 如果将其设置为“off”,则关闭套接字的SO_KEEPALIVE选项。 某些操作系统支持使用TCP_KEEPIDLE,TCP_KEEPINTVL和TCP_KEEPCNT套接字选项以每个套接字为基础设置TCP保持活动参数。 在这样的系统上(目前Linux 2.4+,NetBSD 5+和FreeBSD 9.0-STABLE),可以使用keepidle,keepintvl和keepcnt参数来配置它们。 一个或两个参数可以省略,在这种情况下,相应套接字选项的系统默认设置将生效。 例如,
so_keepalive=30m::10
会将空闲超时(TCP_KEEPIDLE
)设置为30分钟,将探测间隔(TCP_KEEPINTVL
)保留在其系统默认值下,并将探测计数(TCP_KEEPCNT
)设置为10个探测。
例:
listen 127.0.0.1 default_server accept_filter=dataready backlog=1024;
句法: | |
---|---|
默认: | — |
语境: | 服务器,位置 |
根据请求URI设置配置。
在解码“ %XX
”表格中编码的文本,解析对相对路径分量的引用“ .
”和“ ..
”,并且可能将两个或更多个相邻斜线压缩成单斜线之后,针对规范化的URI执行匹配。
位置可以由前缀字符串定义,也可以由正则表达式定义。正则表达式由前面的“ ~*
”修饰符(用于不区分大小写的匹配)或“ ~
”修饰符(用于区分大小写的匹配)指定。要查找匹配给定请求的位置,nginx首先检查使用前缀字符串(前缀位置)定义的位置。其中,选择并记住具有最长匹配前缀的位置。然后按照它们在配置文件中出现的顺序检查正则表达式。正则表达式的搜索在第一次匹配时终止,并使用相应的配置。如果找不到与正则表达式的匹配,则使用先前记住的前缀位置的配置。
location
块可以嵌套,但有一些例外如下所述。
对于不区分大小写的操作系统,如macOS和Cygwin,与前缀字符串匹配会忽略一个案例(0.7.7)。但是,比较仅限于一个字节的区域设置。
正则表达式可以包含稍后可用于其他指令的捕获(0.7.40)。
如果最长匹配的前缀位置具有“ ^~
”修饰符,则不检查正则表达式。
另外,使用“ =
”修饰符可以定义URI和位置的精确匹配。如果找到完全匹配,则搜索结束。例如,如果一个“ /
”请求经常发生,定义“ location = /
”将加速处理这些请求,因为搜索在第一次比较之后立即终止。这样的位置显然不能包含嵌套位置。
在从0.7.1到0.8.41的版本中,如果请求与不带“
=
”和“^~
”修饰符的前缀位置匹配,则搜索也会终止,并且不检查正则表达式。
我们以一个例子来说明上面的内容:
location = / {
[ configuration A ]
}
location / {
[ configuration B ]
}
location /documents/ {
[ configuration C ]
}
location ^~ /images/ {
[ configuration D ]
}
location ~* \.(gif|jpg|jpeg)$ {
[ configuration E ]
}
“ /
”请求将匹配配置A,“ /index.html
”请求将匹配配置B,“ /documents/document.html
”请求匹配配置C,“ /images/1.gif
”请求匹配配置D,并且“ /documents/1.jpg
”请求匹配配置E.
“ @
”前缀定义了一个命名的位置。这样的位置不用于常规的请求处理,而是用于请求重定向。它们不能嵌套,也不能包含嵌套位置。
如果位置由以斜杠字符结尾的前缀字符串定义,并且请求由proxy_pass,fastcgi_pass,uwsgi_pass,scgi_pass或memcached_pass之一处理,则将执行特殊处理。为了响应URI等于此字符串的请求,但没有结尾的斜杠,使用代码301的永久重定向将返回到所请求的URI,并附加斜线。如果不需要,可以像这样定义URI和位置的精确匹配:
location /user/ {
proxy_pass http://user.example.com;
}
location = /user {
proxy_pass http://login.example.com;
}
句法: | log_not_found开启| 关闭; |
---|---|
默认: | log_not_found 开启; |
语境: | http,服务器,位置 |
启用或禁用将未找到文件的错误记录到error_log中。
句法: | 的log_subrequest 开启|关闭; |
---|---|
默认: | log_subrequest关闭; |
语境: | http,服务器,位置 |
启用或禁用将子请求记录到access_log中。
句法: | max_ranges数字; |
---|---|
默认: | — |
语境: | http,服务器,位置 |
限制字节范围请求中允许的最大范围数。如果没有指定字节范围,则处理超出限制的请求。默认情况下,范围的数量不受限制。零值完全禁用字节范围支持。
句法: | merge_slashes 开启 | 关闭; |
---|---|
默认: | merge_slashes 开启; |
语境: | http,服务器 |
启用或禁用将URI中两个或多个相邻斜杠压缩为单斜杠。
请注意,压缩对正确匹配前缀字符串和正则表达式位置至关重要。没有它,“ //scripts/one.php
”请求将不匹配
location /scripts/ {
...
}
并可能作为静态文件进行处理。所以它被转换为“ /scripts/one.php
”。
因为base64在内部使用“/”字符,所以如果URI包含base64编码的名称,则关闭压缩可能变得必要。 但是,出于安全考虑,最好避免关闭压缩。
如果该指令是在服务器级别指定的,则仅在服务器是默认服务器时才使用该值。指定的值也适用于侦听相同地址和端口的所有虚拟服务器。
句法: | msie_padding开启| 关闭; |
---|---|
默认: | msie_padding; |
语境: | http,服务器,位置 |
启用或禁用向状态超过400的MSIE客户端的响应添加注释以将响应大小增加到512字节。
句法: | msie_refresh 开启 | 关闭; |
---|---|
默认: | msie_refresh 关闭; |
语境: | http,服务器,位置 |
启用或禁用发出刷新而不是MSIE客户端的重定向。
句法: | open_file_cache off; open_file_cache max = N inactive = time; |
---|---|
默认: | open_file_cache 关闭; |
语境: | http,服务器,位置 |
配置可以存储以下内容的缓存:
- 打开文件描述符,文件大小和修改时间;
- 有关目录存在的信息;
- 文件查找错误,如“找不到文件”,“没有读取权限”等。应该通过open_file_cache_errors指令单独启用缓存错误。
该指令具有以下参数:
max
设置缓存中元素的最大数量; 在缓存溢出时,最近最少使用(LRU)元素被删除; inactive
定义一个时间,在此之后,如果元素在这段时间内未被访问,则元素从缓存中移除; 默认情况下是60秒; off
禁用缓存。
例:
open_file_cache max=1000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
句法: | open_file_cache_errors开启| 关闭; |
---|---|
默认: | open_file_cache_errors 关闭; |
语境: | http,服务器,位置 |
通过open_file_cache启用或禁用缓存文件查找错误。
句法: | open_file_cache_min_uses数字; |
---|---|
默认: | open_file_cache_min_uses 1; |
语境: | http,服务器,位置 |
设置文件描述符在缓存中保持打开状态所需的由open_file_cache指令number
的inactive
参数配置的时间段内文件访问的最小值。
句法: | open_file_cache_valid时间; |
---|---|
默认: | open_file_cache_valid 60s; |
语境: | http,服务器,位置 |
设置应该验证open_file_cache元素的时间。
句法: | output_buffers number size; |
---|---|
默认: | output_buffers 2 32k; |
语境: | http,服务器,位置 |
设置number
和size
用于读取从磁盘响应的缓冲区。
在版本1.9.5之前,默认值是1 32k。
句法: | port_in_redirect 开启|关闭; |
---|---|
默认: | port_in_redirect 开启; |
语境: | http,服务器,位置 |
启用或禁用在由nginx发布的绝对重定向中指定端口。
在重定向中使用主服务器名称由server_name_in_redirect指令控制。
句法: | postpone_output大小; |
---|---|
默认: | postpone_output 1460; |
语境: | http,服务器,位置 |
如果可能的话,客户端数据的传输将被推迟,直到nginx至少有大小字节的数据要发送。 零值禁止推迟数据传输。
句法: | read_ahead size; |
---|---|
默认: | read_ahead 0; |
语境: | http,服务器,位置 |
使用文件时设置内核的预读数量。
在Linux上,posix_fadvise(0, 0, 0, POSIX_FADV_SEQUENTIAL)
系统调用被使用,所以size
参数被忽略。
在FreeBSD上,使用了FreeBSD 9.0-CURRENT以来支持的系统调用。FreeBSD 7必须打补丁。fcntl(O_READAHEAD,
size)
句法: | recursive_error_pages on | off; |
---|---|
默认: | recursive_error_pages off; |
语境: | http,服务器,位置 |
启用或禁用使用error_page指令执行多个重定向。这种重定向的数量是有限的。
句法: | request_pool_size size; |
---|---|
默认: | request_pool_size 4k; |
语境: | http,服务器 |
允许对每个请求的内存分配进行精确的调整。该指令对性能的影响最小,通常不应使用。
句法: | reset_timedout_connection on | off; |
---|---|
默认: | reset_timedout_connection off; |
语境: | http,服务器,位置 |
启用或禁用重置超时连接。重置过程如下。在关闭一个套接字之前,该SO_LINGER
选项被设置为超时值为0.当套接字关闭时,TCP RST被发送到客户端,并且该套接字占用的所有内存被释放。这有助于避免长时间保持已充满缓冲区的已关闭套接字处于FIN_WAIT1状态。
应该指出,超时保持连接正常关闭。
句法: | resolver address ... valid=time; |
---|---|
默认: | — |
语境: | http,服务器,位置 |
将用于解析上游服务器名称的名称服务器配置为地址,例如:
resolver 127.0.0.1 [::1]:5353;
地址可以指定为域名或IP地址,以及可选端口(1.3.1,1.2.2)。如果未指定端口,则使用端口53。名称服务器以循环方式查询。
在版本1.1.7之前,只能配置一个名称服务器。从版本1.3.1和1.2.2开始,支持使用IPv6地址指定名称服务器。
默认情况下,nginx会在解析时查找IPv4和IPv6地址。如果不想查找IPv6地址,则ipv6=off
参数可以指定。
从版本1.5.8开始,支持将名称解析为IPv6地址。
默认情况下,nginx使用响应的TTL值缓存答案。可选valid
参数允许覆盖它:
resolver 127.0.0.1 [::1]:5353 valid=30s;
在版本1.1.9之前,调整缓存时间是不可能的,并且nginx始终缓存5分钟内的答案。为防止DNS欺骗,建议将DNS服务器配置在正确安全的受信任本地网络中。
句法: | resolver_timeout time; |
---|---|
默认: | resolver_timeout 30s; |
语境: | http,服务器,位置 |
设置名称解析超时,例如:
resolver_timeout 5s;
句法: | root path; |
---|---|
默认: | root html; |
语境: | http,服务器,位置,如果在此位置 |
设置请求的根目录。例如,使用以下配置
location /i/ {
root /data/w3;
}
该/data/w3/i/top.gif
文件将被发送以响应“ /i/top.gif
”请求。
该path
值可以包含变量,除了$document_root
和$realpath_root
。
文件的路径仅通过将URI添加到root
指令的值来构建。如果必须修改URI,则应使用别名指令。
句法: | satisfy all | any; |
---|---|
默认: | satisfy all; |
语境: | http,服务器,位置 |
如果全部(all
)或至少一个(any
)的ngx_http_access_module,ngx_http_auth_basic_module,ngx_http_auth_request_module或ngx_http_auth_jwt_module模块允许访问,则允许访问。
例:
location / {
satisfy any;
allow 192.168.1.0/32;
deny all;
auth_basic "closed site";
auth_basic_user_file conf/htpasswd;
}
句法: | send_lowat size; |
---|---|
默认: | send_lowat 0; |
语境: | http,服务器,位置 |
如果指令设置为非零值,nginx将尝试通过使用NOTE_LOWAT
kqueue方法的标志或SO_SNDLOWAT
套接字选项来最小化客户端套接字上的发送操作次数。在这两种情况下size
都使用指定的。
该指令在Linux,Solaris和Windows上被忽略。
句法: | send_timeout time; |
---|---|
默认: | send_timeout 60s; |
语境: | http,服务器,位置 |
设置向客户端发送响应的超时时间。超时只在两次连续的写入操作之间设置,而不是用于传输整个响应。如果客户端在此时间内没有收到任何内容,则连接关闭。
句法: | sendfile on | off; |
---|---|
默认: | sendfile off; |
语境: | http,服务器,位置,如果在此位置 |
启用或禁用使用sendfile()
。
从nginx 0.8.12和FreeBSD 5.2.1开始,aio可用于预加载数据sendfile()
:
location /video/ {
sendfile on;
tcp_nopush on;
aio on;
}
在此配置中,sendfile()
使用SF_NODISKIO
标志调用该标志,使其不会阻塞磁盘I / O,而是报告数据不在内存中。然后nginx通过读取一个字节来启动异步数据加载。在第一次读取时,FreeBSD内核会将文件的第一个128K字节加载到内存中,但下一次读取只会以16K块加载数据。这可以使用read_ahead指令进行更改。
在版本1.7.11之前,可以启用预加载
aio sendfile;
。
句法: | sendfile_max_chunk size; |
---|---|
默认: | sendfile_max_chunk 0; |
语境: | http,服务器,位置 |
设置为非零值时,会限制一次sendfile()
调用中可以传输的数据量。没有限制,一个快速连接可能会完全占用工作进程。
句法: | server { ... } |
---|---|
默认: | — |
语境: | HTTP |
设置虚拟服务器的配置。在基于IP(基于IP地址)和基于名称(基于“主机”请求头字段)的虚拟服务器之间没有明确的分离。相反,listen指令描述应接受服务器连接的所有地址和端口,server_name指令列出所有服务器名称。“如何处理请求”文档提供了示例配置。
句法: | server_name name ...; |
---|---|
默认: | server_name ""; |
语境: | 服务器 |
设置虚拟服务器的名称,例如:
server {
server_name example.com www.example.com;
}
名字成为主要的服务器名称。
服务器名称可以包含一个星号(“ *
”),替换名称的第一部分或最后一部分:
server {
server_name example.com *.example.com www.example.*;
}
这些名称被称为通配符名称。
上面提到的前两个名称可以合并为一个:
server {
server_name .example.com;
}
也可以在服务器名称中使用正则表达式,在名称前加上波浪号(“ ~
”):
server {
server_name www.example.com ~^www\d+\.example\.com$;
}
正则表达式可以包含稍后可用于其他指令的捕获(0.7.40):
server {
server_name ~^(www\.)?(.+)$;
location / {
root /sites/$2;
}
}
server {
server_name _;
location / {
root /sites/default;
}
}
正则表达式中的命名捕捉创建变量(0.8.25),稍后可用于其他指令:
server {
server_name ~^(www\.)?(?<domain>.+)$;
location / {
root /sites/$domain;
}
}
server {
server_name _;
location / {
root /sites/default;
}
}
如果指令的参数设置为“ $hostname
”(0.9.4),则插入机器的主机名。
也可以指定一个空的服务器名称(0.7.11):
server {
server_name www.example.com "";
}
它允许此服务器处理无指定地址:端口对的“主机”标题字段(而不是默认服务器)的请求。这是默认设置。
在0.8.48之前,机器的主机名被默认使用。
在按名称搜索虚拟服务器期间,如果名称与指定的多个变体(例如,通配符名称和正则表达式匹配)匹配,则将按照以下优先顺序选择第一个匹配变体:
- 确切名称
- 以星号开头的最长通配符名称,例如“
*.example.com
”
- 最长的通配符名称以星号结尾,例如“
mail.*
”
- 第一个匹配的正则表达式(按照出现在配置文件中的顺序)
服务器名称的详细描述在单独的服务器名称文档中提供。
句法: | server_name_in_redirect on | off; |
---|---|
默认: | server_name_in_redirect off; |
语境: | http,服务器,位置 |
在由nginx发布的绝对重定向中,启用或禁用使用由server_name指令指定的主服务器名称。当禁用主服务器名称的使用时,将使用“主机”请求标题字段中的名称。如果此字段不存在,则使用服务器的IP地址。
在重定向中使用端口由port_in_redirect指令控制。
句法: | erver_names_hash_bucket_size size; |
---|---|
默认: | server_names_hash_bucket_size 32 | 64 | 128; |
语境: | HTTP |
设置服务器名称散列表的存储桶大小。默认值取决于处理器的高速缓存行的大小。设置散列表的细节在单独的文档中提供。
句法: | server_names_hash_max_size size; |
---|---|
默认: | server_names_hash_max_size 512; |
语境: | HTTP |
设置服务器名称散列表的最大大小。 设置散列表的细节在单独的文档中提供。
句法: | server_tokens on | off | build | string; |
---|---|
默认: | server_tokens on; |
语境: | http,服务器,位置 |
启用或禁用在错误页面和“服务器”响应标题字段中发出nginx版本。
build
参数(1.11.10)能够与nginx的版本一起发射的生成名称。
此外,作为我们商业订阅的一部分,从版本1.9.13开始,可以使用string
with变量明确设置错误页面上的签名和“服务器”响应标题字段值。一个空字符串将禁用“服务器”字段的发射。
句法: | tcp_nodelay on | off; |
---|---|
默认: | tcp_nodelay on; |
语境: | http,服务器,位置 |
启用或禁用该TCP_NODELAY
选项的使用。仅当连接转换到保持活动状态时才启用该选项。
句法: | tcp_nopush on | off; |
---|---|
默认: | tcp_nopush off; |
语境: | http,服务器,位置 |
启用或禁用TCP_NOPUSH
FreeBSD上的TCP_CORK
套接字选项或Linux 上的套接字选项。该选项仅在使用sendfile时启用。启用该选项允许
- 在Linux和FreeBSD 4上发送一个数据包中的响应头文件和开始文件。*;
- 以完整的数据包发送文件。
句法: | try_files file ... uri;try_files file ... =code; |
---|---|
默认: | — |
语境: | 服务器,位置 |
以指定的顺序检查文件的存在,并使用第一个找到的文件进行请求处理; 该处理在当前上下文中执行。 文件路径是根据根和别名指令从文件参数构建的。 可以通过在名称末尾指定斜线来检查目录的存在,例如,“$ URI/”。 如果找不到任何文件,则将内部重定向到最后一个参数中指定的uri。 例如:
location /images/ {
try_files $uri /images/default.gif;
}
location = /images/default.gif {
expires 30s;
}
最后一个参数也可以指向一个命名的位置,如下面的示例所示。从版本0.7.51开始,最后一个参数也可以是一个 code
:
location / {
try_files $uri $uri/index.html $uri.html =404;
}
代理Mongrel的示例:
location / {
try_files /system/maintenance.html
$uri $uri/index.html $uri.html
@mongrel;
}
location @mongrel {
proxy_pass http://mongrel;
}
Drupal / FastCGI示例:
location / {
try_files $uri $uri/ @drupal;
}
location ~ \.php$ {
try_files $uri @drupal;
fastcgi_pass ...;
fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param QUERY_STRING $args;
... other fastcgi_param's
}
location @drupal {
fastcgi_pass ...;
fastcgi_param SCRIPT_FILENAME /path/to/index.php;
fastcgi_param SCRIPT_NAME /index.php;
fastcgi_param QUERY_STRING q=$uri&$args;
... other fastcgi_param's
}
在下面的例子中,
location / {
try_files $uri $uri/ @drupal;
}
该try_files
指令相当于
location / {
error_page 404 = @drupal;
log_not_found off;
}
或者以下,
location ~ \.php$ {
try_files $uri @drupal;
fastcgi_pass ...;
fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name;
...
}
try_files
在将请求传递给FastCGI服务器之前检查PHP文件的存在。
Wordpress和Joomla示例:
location / {
try_files $uri $uri/ @wordpress;
}
location ~ \.php$ {
try_files $uri @wordpress;
fastcgi_pass ...;
fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name;
... other fastcgi_param's
}
location @wordpress {
fastcgi_pass ...;
fastcgi_param SCRIPT_FILENAME /path/to/index.php;
... other fastcgi_param's
}
句法: | types { ... } |
---|---|
默认: | types { text/html html; image/gif gif; image/jpeg jpg; } |
语境: | http,服务器,位置 |
将文件扩展名映射到MIME类型的响应。扩展名不区分大小写。多个扩展可以映射到一种类型,例如:
types {
application/octet-stream bin exe dll;
application/octet-stream deb;
application/octet-stream dmg;
}
一个足够完整的映射表与nginx一起在conf/mime.types
文件中分发。
要使特定位置application/octet-stream
为所有请求发出MIME类型,可以使用以下配置:
location /download/ {
types { }
default_type application/octet-stream;
}
句法: | types_hash_bucket_size size; |
---|---|
默认: | types_hash_bucket_size 64; |
语境: | http,服务器,位置 |
设置类型散列表的桶大小。设置散列表的细节在单独的文档中提供。
在版本1.5.13之前,默认值取决于处理器的高速缓存行的大小。
句法: | types_hash_max_size size; |
---|---|
默认: | types_hash_max_size 1024; |
语境: | http,服务器,位置 |
设置size
类型散列表的最大值。设置散列表的细节在单独的文档中提供。
句法: | underscores_in_headers on | off; |
---|---|
默认: | underscores_in_headers off; |
语境: | http,服务器 |
启用或禁用在客户端请求标头字段中使用下划线。当禁用下划线时,名称中包含下划线的请求标头字段将被标记为无效,并受制于ignore_invalid_headers指令。
如果该指令是在服务器级别指定的,则仅在服务器是默认服务器时才使用该值。指定的值也适用于侦听相同地址和端口的所有虚拟服务器。
句法: | variables_hash_bucket_size大小; |
---|---|
默认: | variables_hash_bucket_size 64; |
语境: | HTTP |
设置变量哈希表的桶大小。设置散列表的细节在单独的文档中提供。
句法: | variables_hash_max_size大小; |
---|---|
默认: | variables_hash_max_size 1024; |
语境: | HTTP |
设置size
变量哈希表的最大值。设置散列表的细节在单独的文档中提供。
在版本1.5.13之前,默认值是512。
嵌入式变量
该ngx_http_core_module
模块支持名称与Apache服务器变量匹配的嵌入式变量。首先,这些是代表客户端请求的报头字段的变量,例如$http_user_agent
,$http_cookie
等。还有其他变量:
请求行中的$ arg_name参数名称请求行中的$ args参数$ binary_remote_addr二进制形式的客户端地址,对于IPv4地址,值的长度始终为4个字节或对于IPv6地址为16个字节$ body_bytes_sent发送到客户端的字节数计数响应头;此变量与mod_log_config Apache模块的“%B”参数兼容$ bytes_sent发送到客户端的字节数(1.3.8,1.2.5)$连接连接序列号(1.3.8,1.2.5)$ connection_requests当前通过连接发送的请求数(1.3.8,1.2.5)$ content_length“Content-Length”请求标头字段$ content_type“Content-Type”请求标头字段$ cookie_name名称cookie $ document_rootroot或别名指令的值当前请求$ document_uri与$ uri $ host相同,优先顺序如下:来自请求行的主机名或来自“主机”请求头字段的主机名,或与请求匹配的服务器名称$ hostname主机名$ http_name任意请求标题字段;变量名的最后一部分是字段名转换为小写,如果连接以SSL模式运行,则用下划线替换破折号$ https“on”,否则为空字符串$ is_args“?”如果请求行有参数,或者否则为空字符串$ limit_rate设置此变量可启用响应速率限制; (1.3.9,1.2.6)$ nginx_version nginx version $ pid工作进程的PID $ pipe“p”(如果请求是流水线的话),“。”否则(1.3.12 ,1.2.7)$ proxy_protocol_addr来自PROXY协议头的客户端地址,否则为空字符串(1.5.12)
通过在listen指令中设置proxy_protocol参数,必须先启用PROXY协议。
$proxy_protocol_port
来自PROXY协议头的客户端端口,否则为空字符串(1.11.0)
通过在listen指令中设置proxy_protocol参数,必须先启用PROXY协议。
$ query_string与$ args $相同$ realpath_root与当前请求的根或别名指令值相对应的绝对路径名,所有符号链接都已解析为实际路径$ remote_addr客户端地址$ remote_port客户端端口$ remote_user基本认证提供的用户名$ 请求完整的原始请求行$ request_body请求正文
当请求主体读取到内存缓冲区时,变量的值在由proxy_pass,fastcgi_pass,uwsgi_pass和scgi_pass指令处理的位置中可用。
$request_body_file
具有请求正文的临时文件的名称
在处理结束时,文件需要被删除。要始终将请求主体写入文件,需要启用client_body_in_file_only。当临时文件的名称在代理请求或向FastCGI / uwsgi / SCGI服务器的请求中传递时,应分别通过proxy_pass_request_body off,fastcgi_pass_request_body off,uwsgi_pass_request_body off或scgi_pass_request_body off指令禁用传递请求正文。
$ request_completion如果请求已完成,则为“确定”,否则为空字符串
计算此变量的值通常需要一次系统调用。为了避免系统调用,listen指令必须指定地址并使用bind
参数。
$ server_name接受请求的服务器的名称
$uri
在请求处理期间,例如在执行内部重定向或使用索引文件时,值可能会发生变化。