模块ngx_http_core_module

Directives
absolute_redirect
aio
aio_write
alias
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

Directives

句法: absolute_redirect on | 关 T3>; T0>
默认:
absolute_redirect on;
语境: http服务器位置

该指令出现在1.11.8版本中。

如果禁用,nginx发出的重定向将是相对的。

另请参阅server_name_in_redirectport_in_redirect指令。

句法: aio |上关闭 | 线程 T4> [ = T5> pool
默认:
aio off;
语境: http服务器位置

该指令出现在0.8.11版本中。

启用或禁用在FreeBSD和Linux上使用异步文件I / O(AIO):

location /video/ {
    aio            on;
    output_buffers 1 64k;
}

在FreeBSD上,可以从FreeBSD 4.3开始使用AIO。在FreeBSD 11.0之前,AIO可以静态链接到内核中:

options VFS_AIO

或作为内核可加载模块动态加载:

kldload aio

在Linux上,可以从内核版本2.6.22开始使用AIO。另外,需要启用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配置参数启用。目前,多线程仅与epollkqueueeventport方法兼容。仅在Linux上支持多线程发送文件。

另请参阅sendfile指令。

句法: aio_write on | 关 T3>; T0>
默认:
aio_write off;
语境: http服务器位置

该指令出现在1.9.13版本中。

如果aio被启用,则指定是否用于写入文件。目前,这仅在使用aio线程时有效,并且仅限于使用从代理服务器接收的数据写入临时文件。

句法: 别名 path
默认: -
语境: 位置 T0>

定义指定位置的替换。例如,使用以下配置

location /i/ {
    alias /data/w3/images/;
}

根据“/i/top.gif”的要求,将发送文件/data/w3/images/top.gif

path值可以包含变量,除了$ document_root$ realpath_root

如果在使用正则表达式定义的位置内使用别名,那么这种正则表达式应该包含捕获,别名应该引用这些捕获(0.7.40),例如:

location ~ ^/users/(.+\.(?:gif|jpe?g|png))$ {
    alias /data/w3/images/$1;
}

当位置与指令值的最后一部分相符时:

location /images/ {
    alias /data/w3/images/;
}

更好地使用指令:

location /images/ {
    root /data/w3;
}

句法: chunked_transfer_encoding on | 关 T3>; T0>
默认:
chunked_transfer_encoding on;
语境: http服务器位置

允许在HTTP / 1.1中禁用分块传输编码。当使用软件未能支持分块编码时,尽管符合标准要求,它可能会派上用场。

句法: client_body_buffer_size size
默认:
client_body_buffer_size 8k|16k;
语境: http服务器位置

设置读取客户端请求体的缓冲区大小。如果请求体大于缓冲区,则整个身体或仅将其部分写入临时文件默认情况下,缓冲区大小等于两个内存页面。这是x86上的8K,其他32位平台和x86-64。其他64位平台通常为16K。

句法: client_body_in_file_only on | clean | 关 T4>; T0>
默认:
client_body_in_file_only off;
语境: http服务器位置

确定nginx是否应将整个客户端请求体保存到文件中。该指令可以在调试期间使用,或者当使用模块ngx_http_perl_module$ request_body_file变量​​或$ r-> request_body_file

当设置为上的值时,请求处理后不会删除临时文件。

clean将导致请求处理后剩下的临时文件被删除。

句法: client_body_in_single_buffer on | 关 T3>; T0>
默认:
client_body_in_single_buffer off;
语境: http服务器位置

确定nginx是否应将整个客户端请求体保存在单个缓冲区中。当使用$ request_body变量​​时,建议使用该指令,以保存涉及的复制操作数。

句法: client_body_temp_path path [level1 [level2 [level3]] T0>
默认:
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 time
默认:
client_body_timeout 60s;
语境: http服务器位置

定义读取客户端请求体的超时。超时设置仅在两个连续读操作之间的时间间隔,而不是整个请求体的传输。如果客户端在此时间内没有发送任何内容,则将408(请求超时)错误返回给客户端。

句法: client_header_buffer_size size
默认:
client_header_buffer_size 1k;
语境: http服务器

设置读取客户端请求标头的缓冲区大小。对于大多数请求,1K字节的缓冲区就足够了。但是,如果一个请求包含长cookie,或来自WAP客户端,则它可能不适合1K。如果请求行或请求头字段不适合此缓冲区,则分配由large_client_header_buffers指令配置的较大缓冲区。

句法: client_header_timeout time
默认:
client_header_timeout 60s;
语境: http服务器

定义读取客户端请求标头的超时。如果客户端在此时间内没有传输整个报头,则将408(请求超时)错误返回给客户端。

句法: client_max_body_size size
默认:
client_max_body_size 1m;
语境: http服务器位置

设置在“Content-Length”请求头域中指定的客户端请求体的最大允许大小。如果请求中的大小超过配置值,则将413(请求实体太大)错误返回给客户端。请注意,浏览器无法正确显示此错误。size设置为0将禁用检查客户端请求正文大小。

句法: connection_pool_size 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类型的文件扩展名映射。

句法: directio size | 关 T4>; T0>
默认:
directio off;
语境: http服务器位置

该指令出现在0.7.7版本中。

使用O_DIRECT标志(FreeBSD,Linux),F_NOCACHE标志(macOS)或directio()功能(Solaris)当读取大于或等于指定的size时。该指令自动禁用(0.7.15)对于给定请求使用sendfile它可以用于服务大文件:

directio 4m;

或在Linux上使用aio时。

句法: directio_alignment size
默认:
directio_alignment 512;
语境: http服务器位置

该指令出现在0.8.11版本中。

设置directio的对齐方式。在大多数情况下,512字节的对齐就足够了。但是,在Linux下使用XFS时,需要增加到4K。

句法: disable_symlinks 关闭

disable_symlinks on if_not_owner [from = part];
默认:
disable_symlinks off;
语境: http服务器位置

该指令出现在1.1.15版本中。

确定打开文件时应如何处理符号链接:

关 T0>
路径名中的符号链接是允许的,不被检查。这是默认行为。
T0>
如果路径名的任何组件是符号链接,则对文件的访问被拒绝。
if_not_owner T0>
如果路径名的任何组件是符号链接,并且链接指向的链接和对象具有不同的所有者,则拒绝访问文件。
从 T0> = part
当检查符号链接(和if_not_owner之间的参数)时,通常会检查路径名的所有组件。可以通过从 = part参数另外指定来避免检查路径名的初始部分中的符号链接。在这种情况下,只能从指定的初始部分后面的路径名组件检查符号链接。如果该值不是检查的路径名的初始部分,则会检查整个路径名,就好像此参数根本没有指定。如果该值与整个文件名匹配,则不会检查符号链接。参数值可以包含变量。

Example:

disable_symlinks on from=$document_root;

此指令仅适用于具有openat()fstatat()接口的系统。这样的系统包括现代版本的FreeBSD,Linux和Solaris。

中的参数if_not_owner添加了一个处理开销。

在不支持打开仅用于搜索的目录的系统上,要使用这些参数,需要工作进程对所有正在检查的目录具有读取权限。

目前,ngx_http_autoindex_modulengx_http_random_index_modulengx_http_dav_module模块忽略此指令。

句法: error_page code ... [= [response]] uri ; T0>
默认: -
语境: http服务器位置如果位置

定义将针对指定的错误显示的URI。a uri值可以包含变量。

例:

error_page 404             /404.html;
error_page 500 502 503 504 /50x.html;

这导致一个内部重定向到指定的uri,客户端请求方法更改为“GET”(对于除“GET”之外的所有方法, “ HEAD T4>”)。

此外,可以使用“= 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)。

当且仅当在当前级别上没有定义error_page指令时,这些伪指令将从上一级继承。

句法: etag |上关 T3>; T0>
默认:
etag on;
语境: http服务器位置

该指令出现在1.3.3版本中。

启用或禁用为静态资源自动生成“ETag”响应头域。

句法: http {...}
默认: -
语境: 主 T0>

提供指定HTTP服务器指令的配置文件上下文。

句法: if_modified_since 关闭 | 精确 | 前 T4>; T0>
默认:
if_modified_since exact;
语境: http服务器位置

该指令出现在0.7.24版本中。

指定如何将响应的修改时间与“If-Modified-Since”请求头字段中的时间进行比较:

关 T0>
“If-Modified-Since”请求头字段被忽略(0.7.34);
确切 T0>
完全符合;
前 T0>
响应的修改时间小于或等于“If-Modified-Since”请求头字段中的时间。

句法: ignore_invalid_headers |上关 T3>; T0>
默认:
ignore_invalid_headers on;
语境: http服务器

控制是否应忽略具有无效名称的头字段。有效的名称由英文字母,数字,连字符和可能的下划线组成(由underscores_in_headers指令控制)。

如果在服务器级别指定了该指令,则仅在服务器为默认服务器时才使用该值。指定的值也适用于侦听相同地址和端口的所有虚拟服务器。

句法: 内部 T1>; T0>
默认: -
语境: 位置 T0>

指定给定位置只能用于内部请求。对于外部请求,返回客户端错误404(未找到)。内部请求如下:

例:

error_page 404 /404.html;

location /404.html {
    internal;
}

每个请求限制10个内部重定向,以防止可能发生在不正确配置中的请求处理周期。如果达到此限制,则返回错误500(内部服务器错误)。在这种情况下,可以在错误日志中看到“重写或内部重定向循环”消息。

句法: keepalive_disable none | browser ...;
默认:
keepalive_disable msie6;
语境: http服务器位置

禁用与行为不端的浏览器保持连接。browser参数指定哪些浏览器将受到影响。一旦接收到POST请求,值msie6将禁用与旧版本MSIE的保持连接。safari在macOS和类似MacOS的操作系统上禁用Safari和Safari浏览器的保持连接。none可以与所有浏览器保持连接。

在版本1.1.18之前,值safari匹配所有操作系统上的所有Safari和Safari浏览器,默认情况下禁用与之连接的Keep-alive连接。

句法: keepalive_requests number
默认:
keepalive_requests 100;
语境: http服务器位置

该指令出现在0.8.0版本中。

设置通过一个保持活动连接可以提供的最大请求数。在发出最大请求数后,连接被关闭。

句法: keepalive_timeout timeout [header_timeout];
默认:
keepalive_timeout 75s;
语境: http服务器位置

第一个参数设置一个超时时间,保持活动的客户端连接将在服务器端保持打开状态。零值将禁用保持活动的客户端连接。可选的第二个参数在“Keep-Alive:timeout = time”响应头域中设置一个值。两个参数可能不同。

Mozilla和Konqueror会识别“Keep-Alive:timeout = time”头字段。MSIE在大约60秒内自行关闭保持连接。

句法: large_client_header_buffers number size
默认:
large_client_header_buffers 4 8k;
语境: http服务器

设置用于读取大客户端请求报头的缓冲区的最大numbersize请求行不能超过一个缓冲区的大小,或者将414(请求URI太大)错误返回给客户端。请求头字段也不能超过一个缓冲区的大小,或者将400(错误请求)错误返回给客户端。缓冲区只能按需分配。默认情况下,缓冲区大小等于8K字节。如果在请求处理结束后,连接被转换为保持活动状态,这些缓冲区被释放。

句法: limit_except method ... {...}
默认: -
语境: 位置 T0>

限制允许位置内的HTTP方法。method参数可以是以下之一:GETHEADPOSTPUT ,DELETEMKCOLCOPYMOVE选项 PRFINDPROPPATCHLOCKUNLOCKPATCH允许GET方法也允许HEAD方法。可以使用ngx_http_access_modulengx_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_headersfastcgi_ignore_headersuwsgi_ignore_headersscgi_ignore_headers指令禁用此功能。

句法: limit_rate_after size
默认:
limit_rate_after 0;
语境: http服务器位置如果位置

该指令出现在0.8.0版本中。

设置初始量,之后进一步传输对客户端的响应将被限制。

例:

location /flv/ {
    flv;
    limit_rate_after 500k;
    limit_rate       50k;
}

句法: lingering_close 关闭 | |上总是 T4>; T0>
默认:
lingering_close on;
语境: http服务器位置

该指令出现在1.1.0和1.0.6版本中。

控制nginx如何关闭客户端连接。

在完全关闭连接之前,默认值“”指示nginx到等待客户端的附加数据处理,但只有启发式建议客户端可能会发送更多的数据。

值“始终”将导致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指令指定。

句法: 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]];
默认:
listen *:80 | *:8000;
语境: 服务器 T0>

为服务器将接受请求的UNIX域套接字设置IP的addressportpath可以指定addressport,或仅addressportaddress也可以是主机名,例如:

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参数(如果存在)将导致服务器成为指定的addressport对的默认服务器。如果没有指令具有default_server参数,则具有addressport对的第一台服务器将成为该对的默认服务器。

在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)允许指定此端口上接受的所有连接都应使用PROXY协议

listen指令可以具有特定于套接字相关系统调用的几个附加参数。这些参数可以在任何listen指令中指定,但对于给定的addressport对只能指定一次。

在0.8.21之前的版本中,只能在listen指令中与默认参数一起指定。

setfib T0> = number
该参数(0.8.44)为侦听套接字设置关联的路由表FIB(SO_SETFIB选项)。这目前只适用于FreeBSD。
FASTOPEN T0> = number
对于尚未完成三次握手的连接队列的最大长度,为侦听套接字(1.5.8)和限制 t>启用“TCP快速打开”。
不要启用此功能,除非服务器可以处理数据多次接收相同的SYN数据包。
积压 T0> = number
listen()调用中设置限制挂起连接队列的最大长度的backlog参数。默认情况下,FreeBSD,DragonFly BSD和macOS上的backlog设置为-1,在其他平台上设置为511。
rcvbuf T0> = size
设置侦听套接字的接收缓冲区大小(SO_RCVBUF选项)。
sndbuf T0> = size
设置侦听套接字的发送缓冲区大小(SO_SNDBUF选项)。
accept_filter T0> = filter
设置用于过滤传入连接的侦听套接字的接受过滤器(SO_ACCEPTFILTER选项)的名称,然后再传递给accept()这只适用于FreeBSD和NetBSD 5.0+。可能的值为datareadyhttpready
推迟 T0>
指示在Linux上使用延迟的accept()TCP_DEFER_ACCEPT套接字选项)。
结合 T0>
指示为给定的addressport对单独调用bind()This is useful because if there are several listen directives with the same port but different addresses, and one of the listen directives listens on all addresses for the given port (*:port), nginx will bind() only to *:port. 应该注意的是,在这种情况下,将会进行getsockname()系统调用,以确定接受该连接的地址。如果setfibbacklogrcvbufsndbufaccept_filter对于给定的addressipv6onlyso_keepalive参数使用:port对a将一直调用bind()调用。
ipv6only T0> =上 T1> | 关 T2>
此参数(0.7.42)决定(通过IPV6_V6ONLY套接字选项)是否侦听通配符地址[::]上的IPv6套接字将仅接受IPv6连接或两个IPv6和IPv4连接。此参数默认为开启。它只能在开始时设置一次。
在版本1.3.4之前,如果该参数被省略,则操作系统的设置对于套接字有效。
reuseport T0>
此参数(1.9.1)指示为每个工作进程创建一个单独的监听套接字(使用SO_REUSEPORT套接字选项),允许内核在工作进程之间分配传入连接。目前,它仅适用于Linux 3.9+和DragonFly BSD。
不适当的使用此选项可能具有含义的安全性。
so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]
此参数(1.1.11)配置侦听套接字的“TCP keepalive”行为。如果省略此参数,则操作系统的设置将对套接字有效。如果设置为上的值“”,则套接字将打开SO_KEEPALIVE选项。如果设置为“off”,则套接字将关闭SO_KEEPALIVE选项。一些操作系统支持使用TCP_KEEPIDLETCP_KEEPINTVLTCP_KEEPCNT套接字选项在每个套接字上设置TCP保活性参数。在这样的系统上(目前为Linux 2.4+,NetBSD 5+和FreeBSD 9.0-STABLE),可以使用keepidlekeepintvlkeepcnt参数。可以省略一个或两个参数,在这种情况下,相应套接字选项的系统默认设置将生效。例如,
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 {...}

位置 @ name {...}
默认: -
语境: serverlocation

根据请求URI设置配置。

The matching is performed against a normalized URI, after decoding the text encoded in the “%XX” form, resolving references to relative path components “.” and “..”, and possible compression of two or more adjacent slashes into a single slash.

位置可以由前缀字符串或正则表达式定义。正则表达式用前面的“〜*”修饰符(不区分大小写匹配)或“”修饰符指定(用于区分大小写的匹配)。要找到匹配给定请求的位置,nginx首先检查使用前缀字符串(前缀位置)定义的位置。其中,选择并记住具有最长匹配前缀的位置。然后检查正则表达式,按照它们在配置文件中的显示顺序。The search of regular expressions terminates on the first match, and the corresponding configuration is used. If no match with a regular expression is found then the configuration of the prefix location remembered earlier is used.

位置块可以嵌套,下面提到一些例外。

对于不区分大小写的操作系统,如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_passfastcgi_passuwsgi_pass之一处理, scgi_passmemcached_pa​​ss,则执行特殊处理。响应URI等于此字符串但不带尾部斜杠的请求,将使用代码301的永久重定向返回到所附加的斜杠所请求的URI。如果不希望这样做,可以像这样定义URI和位置的完全匹配:

location /user/ {
    proxy_pass http://user.example.com;
}

location = /user {
    proxy_pass http://login.example.com;
}

句法: log_not_found |上关 T3>; T0>
默认:
log_not_found on;
语境: http服务器位置

启用或禁用在error_log中记录未找到文件的错误。

句法: log_subrequest on | 关 T3>; T0>
默认:
log_subrequest off;
语境: http服务器位置

启用或禁用子请求记录到access_log

句法: max_ranges number
默认: -
语境: http服务器位置

该指令出现在1.1.2版本中。

限制字节范围请求中允许的最大允许数量。如果没有指定字节范围,则处理超出限制的请求。默认情况下,范围数不受限制。零值完全禁用字节范围支持。

句法: merge_slashes |上关 T3>; T0>
默认:
merge_slashes on;
语境: http服务器

启用或禁用将URI中的两个或多个相邻斜杠压缩为单个斜杠。

请注意,压缩对于前缀字符串和正则表达式位置的正确匹配至关重要。没有它,“// scripts / one.php”请求将不匹配

location /scripts/ {
    ...
}

并可能被处理为一个静态文件。所以它被转换为“/scripts/one.php”。

如果URI包含base64编码的名称,则可以使压缩关闭,因为base64内部使用“/”字符。但是,出于安全考虑,最好避免关闭压缩。

如果在服务器级别指定了该指令,则仅在服务器为默认服务器时才使用该值。指定的值也适用于侦听相同地址和端口的所有虚拟服务器。

句法: msie_padding on | 关 T3>; T0>
默认:
msie_padding on;
语境: http服务器位置

启用或禁用向状态大于400的MSIE客户端的响应添加注释以将响应大小增加到512字节。

句法: msie_refresh on | 关 T3>; T0>
默认:
msie_refresh off;
语境: http服务器位置

启用或禁用发出刷新,而不是MSIE客户端的重定向。

句法: open_file_cache 关闭

open_file_cache max = N [inactive = time];
默认:
open_file_cache off;
语境: http服务器位置

配置可以存储的缓存:

该指令具有以下参数:

MAX T0>
设置缓存中的最大元素数;在缓存溢出时,最近最少使用的(LRU)元素被删除;
非活性 T0>
定义了一段时间,在此期间,如果元素在高速缓存中未被访问,则将其从该缓存中移除;默认为60秒;
关 T0>
禁用缓存。

例:

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 关 T3>; T0>
默认:
open_file_cache_errors off;
语境: http服务器位置

通过open_file_cache启用或禁用文件查找错误的缓存。

句法: open_file_cache_min_uses number
默认:
open_file_cache_min_uses 1;
语境: http服务器位置

open_file_cache指令的非活动参数配置的时间段内设置文件访问的最小number,这是文件描述符保持打开所需的缓存。

句法: open_file_cache_valid time
默认:
open_file_cache_valid 60s;
语境: http服务器位置

设置一个时间,之后应该验证open_file_cache元素。

句法: output_buffers number size
默认:
output_buffers 2 32k;
语境: http服务器位置

设置用于从磁盘读取响应的缓冲区的numbersize

在版本1.9.5之前,默认值为1 32k。

句法: port_in_redirect |上关 T3>; T0>
默认:
port_in_redirect on;
语境: http服务器位置

启用或禁用在nginx发布的绝对重定向中指定端口。

在重定向中使用主服务器名称由server_name_in_redirect指令控制。

句法: postpone_output size
默认:
postpone_output 1460;
语境: http服务器位置

如果可能,客户端数据的传输将被推迟,直到nginx至少具有size字节的数据发送。零值禁止延迟数据传输。

句法: read_ahead size
默认:
read_ahead 0;
语境: http服务器位置

设置使用文件时内核的预读量。

在Linux上,使用posix_fadvise(0,0,0,POSIX_FADV_SEQUENTIAL)系统调用,因此size参数被忽略。

在FreeBSD上,使用FreeBSD 9.0-CURRENT后支持的fcntl(O_READAHEAD, size 系统调用。FreeBSD 7必须打补丁

句法: recursive_error_pages on | 关 T3>; T0>
默认:
recursive_error_pages off;
语境: http服务器位置

启用或禁用使用error_page指令执行多个重定向。这种重定向的数量为限制

句法: request_pool_size size
默认:
request_pool_size 4k;
语境: http服务器

允许精确调整每个请求的内存分配。该指令对性能影响最小,一般不应使用。

句法: reset_timedout_connection on | 关 T3>; T0>
默认:
reset_timedout_connection off;
语境: http服务器位置

启用或禁用重置超时连接。复位执行如下。关闭套接字之前,设置SO_LINGER选项,超时值为0。当套接字关闭时,TCP RST发送到客户端,并释放该套接字占用的所有内存。这有助于避免使用已填充缓冲区的已封闭套接字长时间处于FIN_WAIT1状态。

应该注意的是,超时保持连接正常关闭。

句法: 解析器 address ... [有效 = time] [ipv6 =上 T8> | 关 T9>]; T0>
默认: -
语境: 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值缓存答案。一个可选的有效参数可以覆盖它:

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;

句法: path
默认:
root html;
语境: http服务器位置如果位置

设置请求的根目录。例如,使用以下配置

location /i/ {
    root /data/w3;
}

将发送/data/w3/i/top.gif文件以响应“/i/top.gif”请求。

path值可以包含变量,除了$ document_root$ realpath_root

通过仅向指令的值添加URI来构建文件的路径。如果必须修改URI,则应使用别名指令。

句法: 满足 全部 | 任何 T3>; T0>
默认:
satisfy all;
语境: http服务器位置

Allows access if all (all) or at least one (any) of the ngx_http_access_module, ngx_http_auth_basic_module, ngx_http_auth_request_module, or ngx_http_auth_jwt_module modules allow access.

例:

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将尝试使用kqueue方法的NOTE_LOWAT标志或SO_SNDLOWAT套接字选项。在这两种情况下都使用指定的size

该指令在Linux,Solaris和Windows上被忽略。

句法: send_timeout time
默认:
send_timeout 60s;
语境: http服务器位置

设置用于向客户端发送响应的超时。超时仅在两个连续的写入操作之间设置,而不是传输整个响应。如果客户端在这段时间内没有收到任何内容,则连接被关闭。

句法: sendfile |上关 T3>; T0>
默认:
sendfile off;
语境: http服务器位置如果位置

启用或禁用使用sendfile()

从nginx 0.8.12和FreeBSD 5.2.1开始,可以使用aiosendfile()预加载数据:

location /video/ {
    sendfile       on;
    tcp_nopush     on;
    aio            on;
}

在此配置中,使用SF_NODISKIO标志调用sendfile(),这样会导致它不会在磁盘I / O上阻塞,而是回报数据不是在记忆中。然后,nginx通过读取一个字节来启动异步数据加载。在第一次读取时,FreeBSD内核将文件的前128K字节加载到内存中,尽管下一次读取将仅以16K块的形式加载数据。这可以使用read_ahead指令更改。

在1.7.11之前,可以使用aio sendfile;启用预加载。

句法: sendfile_max_chunk size
默认:
sendfile_max_chunk 0;
语境: http服务器位置

当设置为非零值时,限制在单个sendfile()调用中可传输的数据量。没有限制,一个快速连接可能完全抓住了工作进程。

句法: 服务器 {...}
默认: -
语境: HTTP T0>

设置虚拟服务器的配置。基于IP(基于IP地址)和基于名称(基于“主机”请求头字段)虚拟服务器之间没有明确的区分。相反,listen指令描述了应该接受服务器连接的所有地址和端口,server_name指令列出所有服务器名称。如何处理请求”文档中提供了示例配置。

句法: server_name name ...;
默认:
server_name "";
语境: 服务器 T0>

设置虚拟服务器的名称,例如:

server {
    server_name example.com www.example.com;
}

名字成为主服务器名称。

服务器名称可以包含一个替换名称的第一个或最后一个部分的星号(“*”)

server {
    server_name example.com *.example.com www.example.*;
}

这样的名称称为通配符名称。

The first two of the names mentioned above can be combined in one:

server {
    server_name .example.com;
}

It is also possible to use regular expressions in server names, preceding the name with a tilde (“~”):

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之前,默认情况下使用机器的主机名。

在按名称搜索虚拟服务器时,如果名称与多个指定变体(例如通配符名称和正则表达式匹配)匹配,则将按照以下优先顺序选择第一个匹配变体:

  1. 确切的名字
  2. 以星号开头的最长通配符名称,例如“ *。example.com T0>”
  3. 以星号结尾的最长通配符名称,例如“邮件。* T0>”
  4. 第一个匹配的正则表达式(按照出现在配置文件的顺序)

服务器名称的详细描述在单独的服务器名称文档中提供。

句法: server_name_in_redirect on | 关 T3>; T0>
默认:
server_name_in_redirect off;
语境: http服务器位置

在nginx发布的绝对重定向中启用或禁用使用由server_name指令指定的主服务器名称。当禁用主服务器名称的使用时,将使用“主机”请求头域中的名称。如果该字段不存在,则使用服务器的IP地址。

在重定向中使用端口由port_in_redirect指令控制。

句法: server_names_hash_bucket_size size
默认:
server_names_hash_bucket_size 32|64|128;
语境: HTTP T0>

设置服务器名称哈希表的桶大小。默认值取决于处理器的高速缓存行的大小。设置散列表的细节在单独的文档中提供。

句法: server_names_hash_max_size size
默认:
server_names_hash_max_size 512;
语境: HTTP T0>

设置服务器名称哈希表的最大size设置散列表的细节在单独的文档中提供。

句法: server_tokens on | 关闭 | build | string
默认:
server_tokens on;
语境: http服务器位置

启用或禁用在错误页面和“服务器”响应标头字段中发布nginx版本。

build参数(1.11.10)可以与nginx版本一起发出构建名称

另外,作为商业订阅的一部分,从版本1.9.13开始,错误页面上的签名和“服务器”响应头域值可以使用string显式设置与变量。空字符串禁止发出“服务器”字段。

句法: tcp_nodelay on | 关 T3>; T0>
默认:
tcp_nodelay on;
语境: http服务器位置

启用或禁用使用TCP_NODELAY选项。只有当连接转换为保持活动状态时,该选项才被使能。

句法: tcp_nopush on | 关 T3>; T0>
默认:
tcp_nopush off;
语境: http服务器位置

启用或禁用在Linux上使用FreeBSD上的TCP_NOPUSH套接字选项或TCP_CORK套接字选项。仅当使用sendfile时,这些选项才被使能。启用该选项允许

句法: try_files file ... uri

try_files file ... = code
默认: -
语境: serverlocation

以指定的顺序检查文件的存在,并使用第一个找到的文件进行请求处理;该处理在当前上下文中执行。根据别名指令,从file参数构建文件的路径。可以通过在名称的末尾指定斜杠来检查目录的存在,例如。 “ $ URI / T0>”。如果没有找到任何文件,则会进行最后一个参数中指定的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 {
    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文件中一起分发。

要使特定位置为所有请求发出“应用程序/八位字节流”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 | 关 T3>; T0>
默认:
underscores_in_headers off;
语境: http服务器

启用或禁用在客户端请求头域中使用下划线。当禁用下划线的使用时,名称中包含下划线的请求头字段将被标记为无效,并受ignore_invalid_headers指令的约束。

如果在服务器级别指定了该指令,则仅在服务器为默认服务器时才使用该值。指定的值也适用于侦听相同地址和端口的所有虚拟服务器。

句法: variables_hash_bucket_size size
默认:
variables_hash_bucket_size 64;
语境: HTTP T0>

设置变量哈希表的桶大小。设置散列表的细节在单独的文档中提供。

句法: variables_hash_max_size size
默认:
variables_hash_max_size 1024;
语境: HTTP T0>

设置变量哈希表的最大size设置散列表的细节在单独的文档中提供。

在版本1.5.13之前,默认值为512。

Embedded Variables

ngx_http_core_module模块支持名称与Apache Server变量匹配的嵌入式变量。首先,这些是表示客户端请求头字段的变量,例如$ http_user_agent$ http_cookie等等。还有其他变量:

$ ARG _ T0> name
请求行中的name
的$ args T0>
请求行中的参数
$ binary_remote_addr T0>
客户端地址以二进制形式出现,值的长度始终为IPv4地址的4个字节或IPv6地址的16个字节
$ body_bytes_sent T0>
发送给客户端的字节数,不计算响应标头;该变量与mod_log_config Apache模块的“%B”参数兼容
$ bytes_sent T0>
发送到客户端的字节数(1.3.8,1.2.5)
$连接 T0>
连接序列号(1.3.8,1.2.5)
$ connection_requests T0>
通过连接提出的当前请求数(1.3.8,1.2.5)
$ CONTENT_LENGTH T0>
“Content-Length”请求头域
$ CONTENT_TYPE T0>
“Content-Type”请求头域
name Cookie
$ DOCUMENT_ROOT T0>
别名指令当前请求的值
$ DOCUMENT_URI T0>
$ uri相同
$宿主 T0>
按此顺序排列:主机名从请求行,或主机名从“主机”请求头字段,或服务器名称匹配请求
$主机名 T0>
主机名
$ HTTP _ T0> name
任意请求头字段;变量名称的最后一部分是将字段名称转换为小写字母,并用下划线替换
$ HTTPS T0>
on”,如果连接以SSL模式运行,否则为空字符串
$ is_args T0>
”如果请求行有参数,否则为空字符串
$ limit_rate T0>
设置此变量可实现响应速率限制;见limit_rate
$毫秒 T0>
当前时间以秒为单位的秒数(1.3.9,1.2.6)
$ nginx_version T0>
nginx版本
$ PID T0>
工作进程的PID
$管 T0>
p”如果请求是流水线的,“”否则(1.3.12,1.2.7)
$ proxy_protocol_addr T0>
来自PROXY协议头的客户端地址,否则为空字符串(1.5.12)

必须通过在listen指令中设置proxy_protocol参数来先前启用PROXY协议。

$ proxy_protocol_port T0>
客户端口从PROXY协议头,或空字符串(1.11.0)

必须通过在listen指令中设置proxy_protocol参数来先前启用PROXY协议。

$ QUERY_STRING T0>
$ args相同
$ realpath_root T0>
对应于别名指令的当前请求的值的绝对路径名,所有符号链接都解析为实际路径
$ REMOTE_ADDR T0>
客户地址
$ REMOTE_PORT T0>
客户端口
$ REMOTE_USER T0>
用户名附带基本认证
$请求 T0>
完整的原始请求行
$ request_body T0>
请求机构

proxy_passfastcgi_passuwsgi_passscgi_pass指令处理的位置,变量的值可用请求主体被读取到内存缓冲区

$ REQUEST_BODY_FILE T0>
具有请求正文的临时文件的名称

在处理结束时,文件需要删除。要始终将请求体写入文件,需要启用client_body_in_file_only当临时文件的名称以代理的请求或向FastCGI / uwsgi / SCGI服务器的请求传递时,传递请求体应由proxy_pass_request_body offfastcgi_pass_request_body关闭uwsgi_pass_request_body offscgi_pass_request_body off指令。

$ request_completion T0>
OK”如果请求已经完成,否则为空字符串
$ REQUEST_FILENAME T0>
基于别名指令的当前请求的文件路径以及请求URI
$ REQUEST_ID T0>
从16个随机字节生成的唯一请求标识符,以十六进制(1.11.0)
$ request_length T0>
请求长度(包括请求行,头和请求体)(1.3.12,1.2.7)
$ REQUEST_METHOD T0>
请求方法,通常为“GET”或“POST
$ REQUEST_TIME T0>
请求处理时间(以秒为单位),单位为毫秒(1.3.9,1.2.6);从客户端读取第一个字节后经过的时间
$ REQUEST_URI T0>
完整的原始请求URI(带参数)
$方案 T0>
请求方案“http”或“https
$ sent_http _ T0> name
任意响应头字段;变量名称的最后一部分是将字段名称转换为小写字母,并用下划线替换
$ sent_trailer _ T0> name
响应结束时发送的任意字段(1.13.2);变量名称的最后一部分是将字段名称转换为小写字母,并用下划线替换
$ SERVER_ADDR T0>
接受请求的服务器的地址

计算此变量的值通常需要一个系统调用。为了避免系统调用,listen指令必须指定地址并使用bind参数。

$服务器名 T0>
接受请求的服务器的名称
$ SERVER_PORT T0>
接受请求的服务器端口
$ SERVER_PROTOCOL T0>
请求协议,通常为“HTTP / 1.0”,“HTTP / 1.1”或“HTTP / 2.0
$状态 T0>
回应状态(1.3.2,1.2.2)
$ tcpinfo_rtt$ tcpinfo_rttvar$ tcpinfo_snd_cwnd$ tcpinfo_rcv_space
有关客户端TCP连接的信息;在支持TCP_INFO套接字选项的系统上可用
$ time_iso8601 T0>
当地时间采用ISO 8601标准格式(1.3.12,1.2.7)
$ time_local T0>
通用日志格式的本地时间(1.3.12,1.2.7)
$ URI T0>
正常化中的当前URI

$ uri的值可以在请求处理期间改变,例如,当进行内部重定向或使用索引文件时。