模块 ngx_http_core_module
Directives
| 语法: |
absolute_redirect |
|---|---|
| 默认值: |
absolute_redirect on; |
| 上下文: |
http,server,location |
该Directives出现在版本 1.11.8 中。
如果禁用,则 nginx 发出的重定向将是相对的。
另请参见 server_name_in_redirect 和 port_in_redirect Directives。
| 语法: |
aio
|
|---|---|
| 默认值: |
aio off; |
| 上下文: |
http,server,location |
该Directives出现在 0.8.11 版中。
启用或禁用异步文件 I/O (AIO) 的使用 在 FreeBSD 和 Linux 上:
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 请求也是如此 not 从文件的开头开始:在 文件的开头和结尾将被阻塞。
在 Linux 上同时启用 AIO 和 sendfile 时, AIO 用于大于或等于 directio Directives中指定的大小 而 sendfile 用于较小大小的文件 或者禁用 directio 时。
location /video/ {
sendfile on;
aio on;
directio 8m;
}
最后,可以使用多线程 (1.7.11) 读取和发送文件, 而不阻止 worker 进程:
location /video/ {
sendfile on;
aio threads;
}
读取和发送文件作将卸载到指定池的线程。
如果省略存储池名称,则
名称为 “ 的池default“。
还可以使用变量设置存储池名称:
aio threads=pool$disk;
默认情况下,多线程处于禁用状态,它应该是
enabled 的--with-threadsconfiguration 参数。
目前,多线程仅兼容 epoll、kqueue、
和 eventport 方法。
仅在 Linux 上支持多线程发送文件。
另请参见 sendfile Directives。
| 语法: |
aio_write |
|---|---|
| 默认值: |
aio_write off; |
| 上下文: |
http,server,location |
该Directives出现在版本 1.9.13 中。
如果开启 aio,则选择是否用于写入文件。
目前,这仅在使用aio threads并且仅限于编写临时文件
以及从代理服务器接收的数据。
| 语法: |
alias |
|---|---|
| 默认值: | — |
| 上下文: |
location |
定义指定位置的替换。 例如,使用以下配置
location /i/ {
alias /data/w3/images/;
}
应要求
“/i/top.gif“,则文件/data/w3/images/top.gif将发送。
这pathvalue 可以包含变量,
除了$document_root和$realpath_root.
如果alias在定义的位置内使用
替换为正则表达式,则此类正则表达式应
contain captures 和alias应指
这些捕获 (0.7.40),例如:
location ~ ^/users/(.+\.(?:gif|jpe?g|png))$ {
alias /data/w3/images/$1;
}
当 location 与Directives值的最后一部分匹配时:
location /images/ {
alias /data/w3/images/;
}
最好改用 root Directives:
location /images/ {
root /data/w3;
}
| 语法: |
auth_delay |
|---|---|
| 默认值: |
auth_delay 0s; |
| 上下文: |
http,server,location |
该Directives出现在版本 1.17.10 中。
使用 401 响应代码延迟处理未经授权的请求 为了防止在访问受密码限制时进行计时攻击,通过 subrequest 的结果, 或通过 JWT 获取。
| 语法: |
chunked_transfer_encoding |
|---|---|
| 默认值: |
chunked_transfer_encoding on; |
| 上下文: |
http,server,location |
允许在 HTTP/1.1 中禁用分块传输编码。 当使用不支持的软件时,它可能会派上用场 chunked encoding 的 Imported 编码。
| 语法: |
client_body_buffer_size |
|---|---|
| 默认值: |
client_body_buffer_size 8k|16k; |
| 上下文: |
http,server,location |
设置用于读取客户端请求正文的缓冲区大小。 如果请求正文大于缓冲区, 将整个正文或仅其部分写入临时文件。 默认情况下,缓冲区大小等于两个内存页。 这是 x86、其他 32 位平台和 x86-64 上的 8K。 在其他 16 位平台上通常为 64K。
| 语法: |
client_body_in_file_only
|
|---|---|
| 默认值: |
client_body_in_file_only off; |
| 上下文: |
http,server,location |
确定 nginx 是否应保存整个客户端请求正文
导入到文件中。
此Directives可以在调试期间使用,也可以在使用$request_body_file变量,或者模块的 $r->request_body_file 方法ngx_http_perl_module。
当设置为值on,临时文件不是
在请求处理后删除。
价值clean将导致临时文件
left after request processing 被删除。
| 语法: |
client_body_in_single_buffer |
|---|---|
| 默认值: |
client_body_in_single_buffer off; |
| 上下文: |
http,server,location |
确定 nginx 是否应保存整个客户端请求正文
在单个缓冲区中。
在使用$request_body变量,以保存涉及的复制作数。
| 语法: |
client_body_temp_path
|
|---|---|
| 默认值: |
client_body_temp_path client_body_temp; |
| 上下文: |
http,server,location |
定义用于存储保存客户端请求正文的临时文件的目录。 在指定的 目录。 例如,在以下配置
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,server,location |
定义读取客户端请求正文的超时。 超时仅在两个连续读取作 ( 而不是为了传输整个请求正文。 如果客户端在此时间内未传输任何内容,则 请求终止,并显示 408 (请求超时) 错误。
| 语法: |
client_header_buffer_size |
|---|---|
| 默认值: |
client_header_buffer_size 1k; |
| 上下文: |
http,server |
设置用于读取客户端请求标头的缓冲区大小。 对于大多数请求,1K 字节的缓冲区就足够了。 但是,如果请求包含长 Cookie 或来自 WAP 客户端, 它可能不适合 1K。 如果请求行或请求标头字段不适合 此缓冲区然后是更大的缓冲区,由 large_client_header_buffers Directives 被分配。
如果在服务器级别指定了该Directives,则 可以使用 default server 中的值。 有关详细信息,请参阅 “虚拟 server selection“部分。
| 语法: |
client_header_timeout |
|---|---|
| 默认值: |
client_header_timeout 60s; |
| 上下文: |
http,server |
定义读取客户端请求标头的超时。 如果客户端在此时间内没有传输整个标头,则 请求终止,并显示 408 (请求超时) 错误。
| 语法: |
client_max_body_size |
|---|---|
| 默认值: |
client_max_body_size 1m; |
| 上下文: |
http,server,location |
设置客户端请求正文允许的最大大小。
如果请求中的大小超过配置的值,则
413(请求实体太大)
错误返回给客户端。
请注意
浏览器无法正确显示
这个错误。
设置size设置为 0 时禁用客户端检查
请求正文大小。
| 语法: |
connection_pool_size |
|---|---|
| 默认值: |
connection_pool_size 256|512; |
| 上下文: |
http,server |
允许准确调整每个连接的内存分配。 此Directives对性能的影响最小 通常不应使用。 默认情况下,大小等于 在 32 位平台上为 256 字节,在 64 位平台上为 512 字节。
在版本 1.9.8 之前,所有平台上的默认值均为 256。
| 语法: |
default_type |
|---|---|
| 默认值: |
default_type text/plain; |
| 上下文: |
http,server,location |
定义响应的默认 MIME 类型。 可以设置文件扩展名到 MIME 类型的映射 替换为 types Directives。
| 语法: |
directio |
|---|---|
| 默认值: |
directio off; |
| 上下文: |
http,server,location |
该Directives出现在 0.7.7 版中。
允许使用
这O_DIRECTflag(FreeBSD、Linux)、
这F_NOCACHE标志 (macOS)、
或directio()函数 (Solaris)、
读取大于或等于
指定的size.
该Directives自动禁用 (0.7.15) 对给定请求使用 sendfile。
它对于提供大文件很有用:
directio 4m;
或在 Linux 上使用 aio 时。
| 语法: |
directio_alignment |
|---|---|
| 默认值: |
directio_alignment 512; |
| 上下文: |
http,server,location |
该Directives出现在 0.8.11 版中。
设置 directio 的对齐方式。 在大多数情况下,512 字节的对齐方式就足够了。 但是,在 Linux 下使用 XFS 时,需要增加到 4K。
| 语法: |
disable_symlinks disable_symlinks
|
|---|---|
| 默认值: |
disable_symlinks off; |
| 上下文: |
http,server,location |
该Directives出现在版本 1.1.15 中。
确定在打开文件时应如何处理符号链接:
off- 允许路径名中的符号链接,但不选中。 这是默认行为。
on- 如果路径名的任何组件是符号链接,则 对文件的访问被拒绝。
if_not_owner- 如果路径名的任何组件 是一个符号链接,而链接 指向具有不同的所有者。
from=part- 检查符号链接时
(参数
on和if_not_owner), 通常会检查 pathname 的所有组件。 检查路径名开头部分的符号链接 可以通过额外指定from=part参数。 在这种情况下,仅从 位于指定初始部分后面的 pathname 组件。 如果该值不是选中的路径名的初始部分,则整个 pathname 的检查方式,就好像根本没有指定这个参数一样。 如果该值与整个文件名匹配,则 不检查符号链接。 参数值可以包含变量。
例:
disable_symlinks on from=$document_root;
该Directives仅在具有openat()和fstatat()接口。
此类系统包括 FreeBSD、Linux 和 Solaris 的现代版本。
参数on和if_not_owner添加 Processing 开销。
在不支持仅打开目录进行搜索的系统上, 要使用这些参数,需要 worker 进程 对正在检查的所有目录具有读取权限。
ngx_http_autoindex_module、ngx_http_random_index_module、 和 ngx_http_dav_module 模块当前忽略此Directives。
| 语法: |
error_page
|
|---|---|
| 默认值: | — |
| 上下文: |
http,server,location,if in location |
定义将为指定错误显示的 URI。
一个urivalue 可以包含变量。
例:
error_page 404 /404.html; error_page 500 502 503 504 /50x.html;
这会导致internal重定向到指定的uri客户端请求方法更改为”GET”
(对于除
“GET“ 和 ”HEAD”).
此外,还可以将响应代码更改为另一个
使用 ”=response“ 语法,例如:
error_page 404 =200 /empty.gif;
如果错误响应由代理服务器处理 或者一个FastCGI/uwsgi/SCGI/gRPC服务器, 并且服务器可能会返回不同的响应代码(例如,200、302、401 或 404),则可以使用它返回的代码进行响应:
error_page 404 = /404.php;
如果在internal重定向期间不需要更改 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)。
代码 307 直到版本 1.1.16 和 1.0.13 才被视为重定向。
代码 308 直到 1.13.0 版才被视为重定向。
这些Directives继承自之前的配置级别
当且仅当没有error_pageDirectives
在当前级别上定义。
| 语法: |
etag |
|---|---|
| 默认值: |
etag on; |
| 上下文: |
http,server,location |
该Directives出现在版本 1.3.3 中。
启用或禁用自动生成 “ETag” static 资源的 response header 字段。
| 语法: |
http { ... } |
|---|---|
| 默认值: | — |
| 上下文: |
main |
提供配置文件上下文,其中 HTTP 服务器Directives 被指定。
| 语法: |
if_modified_since
|
|---|---|
| 默认值: |
if_modified_since exact; |
| 上下文: |
http,server,location |
该Directives出现在 0.7.24 版本中。
指定如何比较响应的修改时间 随着时间在 “如果-修改-since” 请求标头字段:
off- 响应始终被视为已修改 (0.7.34);
exact- 完全匹配;
before- 响应的修改时间为 小于或等于 “If-Modified-Since” 中的时间 request 标头字段。
| 语法: |
ignore_invalid_headers |
|---|---|
| 默认值: |
ignore_invalid_headers on; |
| 上下文: |
http,server |
控制是否应忽略名称无效的标题字段。 有效名称由英文字母、数字、连字符和可能的 下划线(由 underscores_in_headers Directives控制)。
如果在服务器级别指定了该Directives,则 可以使用 default server 中的值。 有关详细信息,请参阅 “虚拟 server selection“部分。
| 语法: |
internal; |
|---|---|
| 默认值: | — |
| 上下文: |
location |
指定给定位置只能用于internal请求。 对于外部请求,客户端错误 404 (未找到) 返回。 internal请求如下:
- 由 error_page、index、internal_redirect、random_index 和 try_files Directives重定向的请求;
- 由 “X-Accel-Redirect” 重定向的请求 来自上游服务器的响应标头字段;
- 由
“
include virtual” 命令、ngx_http_ssi_module ngx_http_addition_module 模块Directives以及 auth_request 和 mirror Directives; - 请求由 rewrite Directives更改。
例:
error_page 404 /404.html;
location = /404.html {
internal;
}
每个请求最多只能阻止 10 个internal重定向 请求处理周期。 如果达到此限制,则会出现错误 返回 500 (Internal Server Error)。 在这种情况下,“rewrite or internal redirection cycle” 消息 可以在错误日志中看到。
| 语法: |
keepalive_disable |
|---|---|
| 默认值: |
keepalive_disable msie6; |
| 上下文: |
http,server,location |
禁用与行为异常的浏览器的 keep-alive 连接。
这browserparameters 指定
浏览器将受到影响。
价值msie6禁用 Keep-Alive 连接
使用旧版本的 MSIE,收到 POST 请求后。
价值safari禁用 Keep-Alive 连接
在 macOS 和类似 macOS 上使用 Safari 和类似 Safari 的浏览器
操作系统。
价值none启用 Keep-Alive 连接
与所有浏览器一起使用。
在 1.1.18 版本之前,值safari匹配
所有作系统上的所有 Safari 和类似 Safari 的浏览器,以及
默认情况下,与它们的 keep-alive 连接处于禁用状态。
| 语法: |
keepalive_requests |
|---|---|
| 默认值: |
keepalive_requests 1000; |
| 上下文: |
http,server,location |
该Directives出现在 0.8.0 版中。
设置可以达到的最大请求数 通过一个 keep-alive 连接提供服务。 在发出最大数量的请求后,连接将关闭。
必须定期关闭连接才能释放 每个连接的内存分配。 因此,使用的最大请求数过高 可能会导致内存使用过多,因此不建议这样做。
在版本 1.19.10 之前,默认值为 100。
| 语法: |
keepalive_time |
|---|---|
| 默认值: |
keepalive_time 1h; |
| 上下文: |
http,server,location |
该Directives出现在版本 1.19.10 中。
限制 可以通过一个 keep-alive 连接处理请求。 达到此时间后,连接将关闭 在后续请求处理之后。
| 语法: |
keepalive_timeout
|
|---|---|
| 默认值: |
keepalive_timeout 75s; |
| 上下文: |
http,server,location |
第一个参数设置一个超时,在此期间,保持活动状态
客户端连接将在服务器端保持打开状态。
零值将禁用保持活动状态的客户端连接。
可选的第二个参数在
“保持连接:超时=time”
response header 字段。
两个参数可能不同。
这
“保持连接:超时=time”
header 字段被 Mozilla 和 Konqueror 识别。
MSIE 在大约 60 秒内自行关闭 keep-alive 连接。
| 语法: |
large_client_header_buffers |
|---|---|
| 默认值: |
large_client_header_buffers 4 8k; |
| 上下文: |
http,server |
设置最大值number和size之
用于读取大型客户端请求标头的缓冲区。
请求行不能超过一个缓冲区的大小,或者
414 (请求 URI 太大)
错误返回给客户端。
请求标头字段也不能超过一个缓冲区的大小,或者
400 (错误请求)
错误返回给客户端。
缓冲区仅按需分配。
默认情况下,缓冲区大小等于 8K 字节。
如果在请求处理结束后,连接被转换
进入 keep-alive 状态时,这些缓冲区将被释放。
如果在服务器级别指定了该Directives,则 可以使用 default server 中的值。 有关详细信息,请参阅 “虚拟 server selection“部分。
| 语法: |
limit_except |
|---|---|
| 默认值: | — |
| 上下文: |
location |
限制一个位置内允许的 HTTP 方法。
这methodparameter 可以是以下值之一: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、
和 ngx_http_auth_jwt_module (1.13.10)
modules Directives:
limit_except GET {
allow 192.168.1.0/32;
deny all;
}
请注意,这将限制对除 GET 和 HEAD 之外的所有方法的访问。
| 语法: |
limit_rate |
|---|---|
| 默认值: |
limit_rate 0; |
| 上下文: |
http,server,location,if in location |
限制向客户端传输响应的速率。
这rate以每秒字节数为单位指定。
零值将禁用速率限制。
限制是按请求设置的,因此,如果客户端同时打开
两个连接,则总体速率将是 2 倍
指定为指定的限制。
参数值可以包含变量 (1.17.0)。 在应限制速率的情况下,它可能很有用 取决于特定条件:
map $slow $rate {
1 4k;
2 8k;
}
limit_rate $rate;
速率限制也可以在$limit_rate变量
但是,从 1.17.0 版本开始,不建议使用此方法:
server {
if ($slow) {
set $limit_rate 4k;
}
...
}
速率限制也可以在 代理服务器响应的 “X-Accel-Limit-Rate” 标头字段。 可以使用 proxy_ignore_headers、fastcgi_ignore_headers、uwsgi_ignore_headers 禁用此功能。 和 scgi_ignore_headers Directives。
| 语法: |
limit_rate_after |
|---|---|
| 默认值: |
limit_rate_after 0; |
| 上下文: |
http,server,location,if in location |
该Directives出现在 0.8.0 版中。
设置初始量,之后进一步传输 的响应将受到速率限制。 参数值可以包含变量 (1.17.0)。
例:
location /flv/ {
flv;
limit_rate_after 500k;
limit_rate 50k;
}
| 语法: |
lingering_close
|
|---|---|
| 默认值: |
lingering_close on; |
| 上下文: |
http,server,location |
该Directives出现在版本 1.1.0 和 1.0.6 中。
控制 nginx 如何关闭客户端连接。
默认值 ”on“指示 nginx 等待并处理来自客户端的其他数据
在完全关闭连接之前,但仅限于
如果启发式建议客户端可能正在发送更多数据。
值 ”always“将导致 nginx 无条件地
等待并处理其他客户端数据。
值 ”off“告诉 nginx 永远不要等待
more data 并立即关闭连接。
此行为会破坏协议,不应在正常情况下使用
情况 下。
要控制关闭 HTTP/2 连接, 该Directives必须在服务器级别 (1.19.1) 上指定。
| 语法: |
lingering_time |
|---|---|
| 默认值: |
lingering_time 30s; |
| 上下文: |
http,server,location |
当 lingering_close 生效时, 该Directives指定 nginx 将处理 (读取和忽略) 来自客户端的其他数据。 之后,连接将被关闭,即使会有 更多数据。
| 语法: |
lingering_timeout |
|---|---|
| 默认值: |
lingering_timeout 5s; |
| 上下文: |
http,server,location |
当 lingering_close 生效时,该Directives指定 更多客户端数据到达的最长等待时间。 如果在此期间未收到数据,则连接将关闭。 否则,数据将被读取并忽略,nginx 开始等待 再次获取更多数据。 重复 “wait-read-ignore” 循环,但不超过 lingering_time Directives指定的时间。
| 语法: |
listen
listen
listen
|
|---|---|
| 默认值: |
listen *:80 | *:8000; |
| 上下文: |
server |
设置address和port对于 IP,
或path对于其 UNIX 域套接字
服务器将接受请求。
双address和port,
或仅address或仅port可以指定。
一address也可以是主机名,例如:
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。
如果该Directives不存在,则*:80已使用
如果 nginx 以超级用户权限运行,或者*:8000否则。
这default_server参数(如果存在)、
将导致服务器成为指定address:port双。
如果所有Directives都没有default_server参数,则第一个具有address:portpair 将为
此对的默认服务器。
在 0.8.21 之前的版本中,此参数的名称很简单default.
这sslparameter (0.7.14) 允许指定所有
此端口接受的连接应在 SSL 模式下工作。
这允许对服务器进行更紧凑的配置,该
处理 HTTP 和 HTTPS 请求。
这http2参数 (1.9.5) 将端口配置为接受 HTTP/2 连接。
通常,要使它正常工作,sslparameter 应为
,但 nginx 也可以配置为接受 HTTP/2
没有 SSL 的连接。
该参数已弃用, http2 Directives 应该改用。
这quicparameter (1.25.0) 将端口配置为接受 QUIC 连接。
这proxy_protocol参数 (1.5.12)
允许指定此端口上接受的所有连接都应使用 PROXY
协议。
从版本 1.13.11 开始支持 PROXY 协议版本 2。
这listen命令
可以具有几个特定于 socket 相关系统调用的附加参数。
这些参数可以在任何listenDirectives,但对于给定的address:port双。
在 0.8.21 之前的版本中,它们只能是 在listenDirectives与default参数。
-
setfib=number - 此参数 (0.8.44) 设置关联的路由表 FIB
(
SO_SETFIB选项)用于侦听套接字。 这目前只适用于 FreeBSD。 -
fastopen=number - 使
TCP 快速打开
对于侦听套接字 (1.5.8),并限制尚未完成的连接队列的最大长度
三次握手。
除非服务器可以处理,否则不要启用此功能 多次接收包含数据的相同 SYN 数据包。
-
backlog=number - 将
backlog参数中的listen()称之为 limit 待处理连接队列的最大长度。 默认情况下,backlog在 FreeBSD、DragonFly BSD 和 macOS 上设置为 -1,则 以及其他平台上的 511。 -
rcvbuf=size - 设置接收缓冲区大小
(
SO_RCVBUF选项)用于侦听套接字。 -
sndbuf=size - 设置发送缓冲区大小
(
SO_SNDBUF选项)用于侦听套接字。 -
accept_filter=filter - 设置 Accept 过滤器的名称
(
SO_ACCEPTFILTER选项) 在将传入连接传递给accept(). 这仅适用于 FreeBSD 和 NetBSD 5.0+。 可能的值为 dataready 和 httpready。 -
deferred - 指示使用 deferred
accept()(TCP_DEFER_ACCEPTsocket 选项)。 -
bind - 指示将
bind()对给定的address:port双。 这很有用,因为如果有多个listen具有相同端口但不同地址的Directives,以及listendirectives 监听所有地址 对于给定端口 (*:port)、nginx 将bind()仅对*:port. 应该注意的是,getsockname()system 调用将为 用于确定接受连接的地址。 如果setfib,fastopen,backlog,rcvbuf,sndbuf,accept_filter,deferred,ipv6only,reuseport, 或so_keepalive参数 则用于给定的address:port双 一个单独的bind()将始终进行调用。 -
ipv6only=on|off - 此参数 (0.7.42) 确定
(通过
IPV6_V6ONLYsocket 选项) IPv6 套接字是否侦听通配符地址[::]将仅接受 IPv6 连接或同时接受 IPv6 和 IPv4 连接。 默认情况下,此参数处于打开状态。 它只能在启动时设置一次。在 1.3.4 版本之前, 如果省略此参数,则作系统的设置为 对 socket 有效。
-
reuseport - 此参数 (1.9.1) 指示创建单独的侦听套接字
对于每个工作进程
(使用
SO_REUSEPORTLinux 3.9+ 和 DragonFly BSD 上的 socket 选项, 或SO_REUSEPORT_LB在 FreeBSD 12+ 上),允许内核 在 worker 进程之间分配传入连接。 这目前仅适用于 Linux 3.9+、DragonFly BSD、 和 FreeBSD 12+ (1.15.1)。不恰当地使用此选项可能会产生其安全隐患。
-
so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt] - 此参数 (1.1.11) 配置 “TCP keepalive” 行为
用于侦听套接字。
如果省略此参数,则作系统的设置将为
对 socket 有效。
如果将其设置为值”
on“、SO_KEEPALIVE选项。 如果将其设置为值”off“、SO_KEEPALIVE选项已关闭。 某些作系统支持在 每个插槽的基础,使用TCP_KEEPIDLE,TCP_KEEPINTVL和TCP_KEEPCNTsocket 选项。 在此类系统上(目前为 Linux 2.4+、NetBSD 5+ 和 FreeBSD 9.0-STABLE),它们可以被配置 使用keepidle,keepintvl和keepcnt参数。 可以省略一个或两个参数,在这种情况下,系统默认设置 的相应 socket 选项将生效。 例如
将设置空闲超时 (so_keepalive=30m::10
TCP_KEEPIDLE) 设置为 30 分钟, 将探测间隔 (TCP_KEEPINTVL) 在其系统默认值下, 并设置 Probes 计数 (TCP_KEEPCNT) 设置为 10 个探针。
例:
listen 127.0.0.1 default_server accept_filter=dataready backlog=1024;
| 语法: |
location [
|
|
|
location |
|---|---|
| 默认值: | — |
| 上下文: |
server,location |
根据请求 URI 设置配置。
匹配是针对规范化的 URI 执行的,
解码以”%XX“形式、
解析对相对路径组件 “ 的引用.”
和”..“,并且可能压缩两个或多个
相邻的斜杠转换为单个斜杠。
位置可以由前缀字符串或正则表达式定义。
正则表达式使用前面的
“” 修饰符(用于不区分大小写的匹配),或者
“” 修饰符(用于区分大小写的匹配)。
要查找与给定请求匹配的位置,nginx 首先检查
使用前缀字符串 (prefix locations) 定义的位置。
其中,匹配时间最长的 Location
前缀被选中并记住。
然后,按照正则表达式的出现顺序检查正则表达式
在配置文件中。
正则表达式的搜索在第一个匹配项
并使用相应的配置。
如果未找到与正则表达式的匹配项,则
使用前面记住的前缀位置的配置。~*~
location块可以嵌套,但有一些例外
下面提到。
对于不区分大小写的作系统,例如 macOS 和 Cygwin, 与前缀字符串匹配会忽略大小写 (0.7.7)。 但是,比较仅限于单字节区域设置。
正则表达式可以包含稍后可以的捕获 (0.7.40) 在其他Directives中使用。
如果最长的匹配前缀位置具有 “” 修饰符
,则不会检查正则表达式。^~
此外,使用 “” 修饰符可以定义
URI 和 location 的完全匹配。
如果找到完全匹配项,则搜索将终止。
例如,如果 “” 请求频繁发生,
定义”=/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 或 grpc_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 on; |
| 上下文: |
http,server,location |
启用或禁用将有关未找到文件的错误记录到error_log中。
| 语法: |
log_subrequest |
|---|---|
| 默认值: |
log_subrequest off; |
| 上下文: |
http,server,location |
启用或禁用将子请求记录到 access_log 中。
| 语法: |
max_ranges |
|---|---|
| 默认值: | — |
| 上下文: |
http,server,location |
该Directives出现在版本 1.1.2 中。
限制字节范围请求中允许的最大范围数。 超过限制的请求将按照没有 指定的字节范围。 默认情况下,范围的数量没有限制。 零值完全禁用字节范围支持。
| 语法: |
merge_slashes |
|---|---|
| 默认值: |
merge_slashes on; |
| 上下文: |
http,server |
启用或禁用两个或多个相邻斜杠的压缩 在 URI 中转换为单个斜杠。
请注意,压缩对于正确匹配前缀字符串至关重要
和正则表达式位置。
没有它,”//scripts/one.php“ 请求不匹配
location /scripts/ {
...
}
,并且可能作为静态文件进行处理。
所以它被转换为 ”/scripts/one.php”.
转动压缩off如果 URI
包含 base64 编码的名称,因为 base64 使用 “”
字符。
但是,出于安全考虑,最好避免转弯
压缩关闭。/
如果在服务器级别指定了该Directives,则 可以使用 default server 中的值。 有关详细信息,请参阅 “虚拟 server selection“部分。
| 语法: |
msie_padding |
|---|---|
| 默认值: |
msie_padding on; |
| 上下文: |
http,server,location |
启用或禁用向状态 大于 400 将响应大小增加到 512 字节。
| 语法: |
msie_refresh |
|---|---|
| 默认值: |
msie_refresh off; |
| 上下文: |
http,server,location |
启用或禁用 MSIE 客户端的刷新而不是重定向。
| 语法: |
open_file_cache open_file_cache
|
|---|---|
| 默认值: |
open_file_cache off; |
| 上下文: |
http,server,location |
配置可存储的缓存:
- 打开文件描述符、它们的大小和修改时间;
- 关于目录存在的信息;
- 文件查找错误,例如“找不到文件”、“无读取权限”、
等等。
错误缓存应由 open_file_cache_errors Directives单独启用。
该Directives具有以下参数:
-
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 off; |
| 上下文: |
http,server,location |
启用或禁用按open_file_cache缓存文件查找错误。
| 语法: |
open_file_cache_min_uses |
|---|---|
| 默认值: |
open_file_cache_min_uses 1; |
| 上下文: |
http,server,location |
设置最小值number期间的文件访问
由inactive参数
中open_file_cache,文件需要
描述符在缓存中保持打开状态。
| 语法: |
open_file_cache_valid |
|---|---|
| 默认值: |
open_file_cache_valid 60s; |
| 上下文: |
http,server,location |
设置一个时间,在此时间之后应验证 open_file_cache 元素。
| 语法: |
output_buffers |
|---|---|
| 默认值: |
output_buffers 2 32k; |
| 上下文: |
http,server,location |
设置number和size的
用于从磁盘读取响应的缓冲区。
在版本 1.9.5 之前,默认值为 1 32k。
| 语法: |
port_in_redirect |
|---|---|
| 默认值: |
port_in_redirect on; |
| 上下文: |
http,server,location |
启用或禁用在 nginx 发出的绝对重定向中指定端口。
重定向中主服务器名称的使用由 server_name_in_redirect Directives。
| 语法: |
postpone_output |
|---|---|
| 默认值: |
postpone_output 1460; |
| 上下文: |
http,server,location |
如果可能,客户端数据的传输将推迟到
nginx 至少有size要发送的数据字节。
零值将禁用延迟数据传输。
| 语法: |
read_ahead |
|---|---|
| 默认值: |
read_ahead 0; |
| 上下文: |
http,server,location |
设置在处理 file 时内核的预读量。
在 Linux 上,posix_fadvise(0, 0, 0, POSIX_FADV_SEQUENTIAL)system 调用,因此size参数。
在 FreeBSD 上,fcntl(O_READAHEAD,
size)系统调用,从 FreeBSD 9.0-CURRENT 开始支持。
FreeBSD 7 必须打补丁。
| 语法: |
recursive_error_pages |
|---|---|
| 默认值: |
recursive_error_pages off; |
| 上下文: |
http,server,location |
启用或禁用使用 error_page Directives执行多个重定向。 此类重定向的数量是有限的。
| 语法: |
request_pool_size |
|---|---|
| 默认值: |
request_pool_size 4k; |
| 上下文: |
http,server |
允许准确调整每个请求的内存分配。 此Directives对性能的影响最小 通常不应使用。
| 语法: |
reset_timedout_connection |
|---|---|
| 默认值: |
reset_timedout_connection off; |
| 上下文: |
http,server,location |
启用或禁用重置超时连接
以及使用非标准代码 444 (1.15.2) 关闭的连接。
重置的执行方式如下。
在关闭套接字之前,SO_LINGERoption 的 timeout 值为 0。
当套接字关闭时,TCP RST 被发送到客户端,所有内存
Occupied by this socket 被释放。
这有助于避免保持已关闭的套接字和填充的缓冲区
长时间处于FIN_WAIT1状态。
应该注意的是,超时的 keep-alive 连接是 正常关闭。
| 语法: |
resolver
|
|---|---|
| 默认值: | — |
| 上下文: |
http,server,location |
配置用于解析上游服务器名称的名称服务器 转换为地址,例如:
resolver 127.0.0.1 [::1]:5353;
地址可以指定为域名或 IP 地址, 具有可选端口(1.3.1、1.2.2)。 如果未指定 port,则使用端口 53。 名称服务器以循环方式查询。
在版本 1.1.7 之前,只能配置单个名称服务器。 支持使用 IPv6 地址指定名称服务器 从版本 1.3.1 和 1.2.2 开始。
默认情况下,nginx 将在解析时查找 IPv4 和 IPv6 地址。
如果不需要查找 IPv4 或 IPv6 地址,
这ipv4=off(1.23.1) 或
这ipv6=offparameter 的
支持将名称解析为 IPv6 地址 从 1.5.8 版本开始。
默认情况下,nginx 使用响应的 TTL 值缓存答案。
可选的validparameter 允许覆盖它:
resolver 127.0.0.1 [::1]:5353 valid=30s;
在 1.1.9 版本之前,无法调整缓存时间。 nginx 始终缓存 5 分钟的答案。
为了防止 DNS 欺骗,建议 在适当保护的可信本地网络中配置 DNS 服务器。
可选的status_zone参数 (1.17.1)
启用请求和响应的 DNS 服务器统计信息的收集
在指定的zone.
该参数作为我们商业订阅的一部分提供。
| 语法: |
resolver_timeout |
|---|---|
| 默认值: |
resolver_timeout 30s; |
| 上下文: |
http,server,location |
设置名称解析的超时,例如:
resolver_timeout 5s;
| 语法: |
root |
|---|---|
| 默认值: |
root html; |
| 上下文: |
http,server,location,if in location |
设置请求的根目录。 例如,使用以下配置
location /i/ {
root /data/w3;
}
这/data/w3/i/top.gif文件将作为响应发送到
“/i/top.gif“请求。
这pathvalue 可以包含变量,
除了$document_root和$realpath_root.
只需将 URI 添加到值
的root命令。
如果必须修改 URI,则应使用 alias Directives。
| 语法: |
satisfy |
|---|---|
| 默认值: |
satisfy all; |
| 上下文: |
http,server,location |
如果所有 (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 |
|---|---|
| 默认值: |
send_lowat 0; |
| 上下文: |
http,server,location |
如果Directives设置为非零值,nginx 将尝试最小化
对客户端套接字执行的发送作数,使用NOTE_LOWATkqueue 方法的标志
或SO_SNDLOWATsocket 选项。
在这两种情况下,指定的size被使用。
在 Linux、Solaris 和 Windows 上忽略此Directives。
| 语法: |
send_timeout |
|---|---|
| 默认值: |
send_timeout 60s; |
| 上下文: |
http,server,location |
设置将响应传输到客户端的超时。 超时仅在两个连续的写入作 ( 而不是为了传输整个响应。 如果客户端在此时间内没有收到任何消息, 连接已关闭。
| 语法: |
sendfile |
|---|---|
| 默认值: |
sendfile off; |
| 上下文: |
http,server,location,if in location |
启用或禁用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 Directives进行更改。
在 1.7.11 版本之前,可以使用aio sendfile;.
| 语法: |
sendfile_max_chunk |
|---|---|
| 默认值: |
sendfile_max_chunk 2m; |
| 上下文: |
http,server,location |
限制可以
在单个sendfile()叫。
如果没有限制,一个快速连接可能会完全占用工作进程。
在版本 1.21.4 之前,默认情况下没有限制。
| 语法: |
server { ... } |
|---|---|
| 默认值: | — |
| 上下文: |
http |
设置虚拟服务器的配置。 基于 IP(基于 IP 地址)之间没有明确的区分 和基于名称(基于 “Host” 请求标头字段) 虚拟服务器。 相反,listen Directives描述所有 地址和端口,并且 server_name Directives列出了所有服务器名称。 示例配置在 “nginx 如何处理请求” 文档。
| 语法: |
server_name |
|---|---|
| 默认值: |
server_name ""; |
| 上下文: |
server |
设置虚拟服务器的名称,例如:
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) 用于其他Directives:
server {
server_name ~^(www\.)?(.+)$;
location / {
root /sites/$2;
}
}
server {
server_name _;
location / {
root /sites/default;
}
}
正则表达式中的命名捕获创建变量 (0.8.25) 稍后可以在其他Directives中使用:
server {
server_name ~^(www\.)?(?<domain>.+)$;
location / {
root /sites/$domain;
}
}
server {
server_name _;
location / {
root /sites/default;
}
}
如果Directives的参数设置为 ”$hostname“ (0.9.4) 中,该
计算机的主机名已插入。
也可以指定一个空的服务器名称 (0.7.11):
server {
server_name www.example.com "";
}
它允许此服务器在没有 “Host” 的情况下处理请求 header 字段 — 而不是默认服务器 — 对于给定的 address:port 对。 这是默认设置。
在 0.8.48 之前,默认使用计算机的主机名。
在按名称搜索虚拟服务器时, 如果名称与多个指定的 variant 匹配,则 (例如,通配符名称和正则表达式都匹配),则第一个匹配 variant 将按以下优先级顺序选择:
- 确切名称
- 以星号开头的最长通配符名称,
例如”
*.example.com” - 以星号结尾的最长通配符名称,
例如”
mail.*” - 第一个匹配的正则表达式 (按在配置文件中出现的顺序)
服务器名称的详细说明在单独的 Server names 文档中提供。
| 语法: |
server_name_in_redirect |
|---|---|
| 默认值: |
server_name_in_redirect off; |
| 上下文: |
http,server,location |
启用或禁用由 server_name Directives 在 nginx 发出的绝对重定向中。 禁用主服务器名称时,来自 使用“Host”请求标头字段。 如果此字段不存在,则使用服务器的 IP 地址。
重定向中端口的使用由 port_in_redirect Directives。
| 语法: |
server_names_hash_bucket_size |
|---|---|
| 默认值: |
server_names_hash_bucket_size 32|64|128; |
| 上下文: |
http |
设置服务器名称哈希表的存储桶大小。 默认值取决于处理器的 cache 行的大小。 设置哈希表的详细信息在单独的文档中提供。
| 语法: |
server_names_hash_max_size |
|---|---|
| 默认值: |
server_names_hash_max_size 512; |
| 上下文: |
http |
设置最大值size的服务器名称哈希表。
设置哈希表的详细信息在单独的文档中提供。
| 语法: |
server_tokens
|
|---|---|
| 默认值: |
server_tokens on; |
| 上下文: |
http,server,location |
启用或禁用在错误页面和 “Server” 响应标头字段。
这build参数 (1.11.10) 启用发射
internal版本名称以及 nginx 版本。
此外,作为我们商业订阅的一部分,
从 1.9.13 版本开始
错误页面上的签名和
“Server” 响应标头字段值
可以使用stringwith 变量。
空字符串将禁用 “Server” 字段的发出。
| 语法: |
subrequest_output_buffer_size |
|---|---|
| 默认值: |
subrequest_output_buffer_size 4k|8k; |
| 上下文: |
http,server,location |
该Directives出现在版本 1.13.10 中。
设置size缓冲区的
存储 SubRequest 的响应正文。
默认情况下,缓冲区大小等于一个内存页。
这是 4K 或 8K,具体取决于平台。
但是,它可以做得更小。
该Directives仅适用于 subrequests 将响应正文保存到内存中。 例如,此类子请求由 SSI 创建。
| 语法: |
tcp_nodelay |
|---|---|
| 默认值: |
tcp_nodelay on; |
| 上下文: |
http,server,location |
启用或禁用TCP_NODELAY选择。
当连接转换为
keep-alive 状态。
此外,它还在 SSL 连接上启用,
对于无缓冲代理,
以及 WebSocket 代理。
| 语法: |
tcp_nopush |
|---|---|
| 默认值: |
tcp_nopush off; |
| 上下文: |
http,server,location |
启用或禁用
这TCP_NOPUSHFreeBSD 上的 socket 选项
或TCP_CORKsocket 选项。
仅当使用 sendfile 时,才会启用这些选项。
启用该选项将允许
- 在一个数据包中发送响应标头和文件开头, 在 Linux 和 FreeBSD 4.* 上;
- 以完整数据包发送文件。
| 语法: |
try_files try_files |
|---|---|
| 默认值: | — |
| 上下文: |
server,location |
检查是否存在按指定顺序排列的文件,并使用
用于请求处理的第一个找到的文件;加工
在当前上下文中执行。
文件的路径是从file参数
根据 root 和 alias Directives。
可以通过指定
名称末尾的斜杠,例如 ”$uri/”.
如果未找到任何文件,则会对uri指定 last 参数。
例如:
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_filesDirectives等价于
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检查 PHP 文件是否存在
在将请求传递给 FastCGI 服务器之前。
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,server,location |
将文件扩展名映射到响应的 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 |
|---|---|
| 默认值: |
types_hash_bucket_size 64; |
| 上下文: |
http,server,location |
设置 类型 哈希表的存储桶大小。 设置哈希表的详细信息在单独的文档中提供。
在 1.5.13 版本之前, 默认值取决于处理器的 cache 行的大小。
| 语法: |
types_hash_max_size |
|---|---|
| 默认值: |
types_hash_max_size 1024; |
| 上下文: |
http,server,location |
设置最大值size的类型哈希表。
设置哈希表的详细信息在单独的文档中提供。
| 语法: |
underscores_in_headers |
|---|---|
| 默认值: |
underscores_in_headers off; |
| 上下文: |
http,server |
启用或禁用在客户端请求标头字段中使用下划线。 当禁用下划线时,请求名称 contain 下划线是 标记为无效并受 ignore_invalid_headers Directives的约束。
如果在服务器级别指定了该Directives,则 可以使用 default server 中的值。 有关详细信息,请参阅 “虚拟 server selection“部分。
| 语法: |
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 Server 变量匹配。
首先,这些是表示客户端请求标头的变量
字段,例如$http_user_agent,$http_cookie,
等等。
此外,还有其他变量:
$arg_name- 论点
name在请求行中 $args- 请求行中的参数
$binary_remote_addr- client address 的二进制形式,值的长度始终为 4 字节 对于 IPv4 地址或 16 字节(对于 IPv6 地址)
$body_bytes_sent- 发送到客户端的字节数,不计算响应标头;
此变量与 ”
%B“ 参数的mod_log_configApache 模块 $bytes_sent- 发送到客户端的字节数(1.3.8、1.2.5)
$connection- 连接序列号 (1.3.8, 1.2.5)
$connection_requests- 当前通过连接发出的请求数(1.3.8、1.2.5)
$connection_time- 连接时间(以秒为单位),分辨率为毫秒 (1.19.10)
$content_length- “Content-Length” 请求标头字段
$content_type- “Content-Type” 请求标头字段
- 这
name饼干 $document_root- root 或 alias Directives的值 对于当前请求
$document_uri- 与
$uri $host- 按以下优先顺序: host name 的 NAME 请求行,或者 “Host” 请求标头字段中的 host name,或 与请求匹配的服务器名称
$hostname- 主机名
$http_name- 任意请求标头字段; 变量名称的最后一部分是转换的字段名称 改为小写,破折号替换为下划线
$https- “
on” 如果连接以 SSL 模式运行, 否则为空字符串 $is_args- “
?“ 如果请求行有参数, 否则为空字符串 $limit_rate- 设置此变量将启用响应速率限制; 查看 limit_rate
$msec- 当前时间(以秒为单位),分辨率为毫秒(1.3.9、1.2.6)
$nginx_version- nginx 版本
$pid- 工作进程的 PID
$pipe- “
p“ 如果请求是管道化的,”.” 否则(1.3.12、1.2.7) $proxy_protocol_addr- 来自 PROXY 协议标头的客户端地址 (1.5.12)
必须事先通过将
proxy_protocol参数 在 listen Directives中。 $proxy_protocol_port- 来自 PROXY 协议标头的 client 端口 (1.11.0)
必须事先通过将
proxy_protocol参数 在 listen Directives中。 $proxy_protocol_server_addr- 来自 PROXY 协议标头的服务器地址 (1.17.6)
必须事先通过将
proxy_protocol参数 在 listen Directives中。 $proxy_protocol_server_port- 来自 PROXY 协议标头的服务器端口 (1.17.6)
必须事先通过将
proxy_protocol参数 在 listen Directives中。 $proxy_protocol_tlv_name- 来自 PROXY 协议标头 (1.23.2) 的 TLV。
这
name可以是 TLV 类型名称或其数值。 在后一种情况下,该值为十六进制 ,并且应以0x:
SSL TLV 也可以通过 TLV 类型名称进行访问 或其数值 两者都以$proxy_protocol_tlv_alpn $proxy_protocol_tlv_0x01
ssl_:$proxy_protocol_tlv_ssl_version $proxy_protocol_tlv_ssl_0x21
支持以下 TLV 类型名称:
-
alpn(0x01) - 通过连接使用的上层协议 -
authority(0x02) - 客户端传递的 host name 值 -
unique_id(0x05) - 唯一连接 ID -
netns(0x30) - 命名空间的名称 -
ssl(0x20) - 二进制 SSL TLV 结构
支持以下 SSL TLV 类型名称:
-
ssl_version(0x21) - 客户端连接中使用的 SSL 版本 -
ssl_cn(0x22) - SSL 证书公用名 -
ssl_cipher(0x23) - 所用密码的名称 -
ssl_sig_alg(0x24) - 用于签署证书的算法 -
ssl_key_alg(0x25) - 公钥算法
此外,还支持以下特殊 SSL TLV 类型名称:
-
ssl_verify- 客户端 SSL 证书验证结果,0如果客户端提供了证书 并成功验证, 否则为非零。
必须事先通过将
proxy_protocol参数 在 listen Directives中。 -
$query_string- 与
$args $realpath_root- 对应于 root 或 alias Directives值的绝对路径名 对于当前请求, 所有符号链接都解析为实路径
$remote_addr- 客户端地址
$remote_port- 客户端端口
$remote_user- 随 Basic 身份验证提供的用户名
$request- 完整的原始请求行
$request_body- 请求正文
变量的值在 locations 中可用 由 proxy_pass、fastcgi_pass、 uwsgi_pass 处理、 以及 scgi_pass Directives(当请求正文被读取到 内存缓冲区。
$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 Directives禁用。
$request_completion- “
OK“如果请求已完成, 否则为空字符串 $request_filename- 文件路径,基于 root 或 alias Directives以及请求 URI
$request_id- 唯一请求标识符 由 16 个随机字节生成,十六进制 (1.11.0)
$request_length- 请求长度(包括请求行、标头和请求正文) (1.3.12, 1.2.7)
$request_method- request 方法,通常
“
GET“ 或 ”POST” $request_time- 请求处理时间(以秒为单位),分辨率为毫秒 (1.3.9, 1.2.6); 从客户端读取第一个字节以来经过的时间
$request_uri- 完整的原始请求 URI(带参数)
$scheme- 请求方案,”
http“ 或 ”https” $sent_http_name- 任意响应标头字段; 变量名称的最后一部分是转换的字段名称 改为小写,破折号替换为下划线
$sent_trailer_name- 在响应末尾发送的任意字段 (1.13.2); 变量名称的最后一部分是转换的字段名称 改为小写,破折号替换为下划线
$server_addr- 接受请求的服务器的地址
计算此变量的值通常需要一次系统调用。 为避免系统调用,listen Directives 必须指定地址并使用
bind参数。 $server_name- 接受请求的服务器的名称
$server_port- 接受请求的服务器的端口
$server_protocol- request 协议,通常
“
HTTP/1.0”, “HTTP/1.1”, “HTTP/2.0”, 或 “HTTP/3.0” $status- 响应状态(1.3.2、1.2.2)
-
$tcpinfo_rtt,$tcpinfo_rttvar,$tcpinfo_snd_cwnd,$tcpinfo_rcv_space - 有关客户端 TCP 连接的信息;在系统上可用
支持
TCP_INFO套接字选项 $time_iso8601- 采用 ISO 8601 标准格式的当地时间(1.3.12、1.2.7)
$time_local- 通用日志格式的本地时间(1.3.12、1.2.7)
$uri- 请求中的当前 URI,已规范化
的值
$uri在请求处理期间可能会发生变化, 例如,在进行internal重定向或使用索引文件时。