HTTP模块#

核心HTTP模块实现了HTTP服务器的基本功能:包括定义服务器块、配置请求路由的位置、提供静态文件和控制访问、配置重定向、支持keep-alive连接以及管理请求和响应头。

本节中的其他模块扩展了此功能,使您能够灵活配置和优化HTTP服务器以满足各种场景和要求。

指令#

absolute_redirect#

语法

absolute_redirect on | off;

默认

absolute_redirect on;

上下文

http, server, location

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

另请参阅 server_name_in_redirectport_in_redirect 指令。

aio#

语法

aio on | off | threads [=pool];

默认

aio off;

上下文

http, server, location

启用或禁用在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;
}

最后,文件可以使用多线程读取和 发送,而不会阻塞工作进程:

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

读取和发送文件操作被卸载到指定的 pool 的线程中。如果省略池名称,则使用名为"default"的池。池名称也可以通过变量设置:

aio threads=pool$disk;

默认情况下,多线程被禁用,必须通过 --with-threads 配置参数启用。目前,多线程仅与 epollkqueueeventport 方法兼容。多线程发送文件仅在Linux上支持。

另请参阅 sendfile 指令。

aio_write#

语法

aio_write on | off;

默认

aio_write off;

上下文

http, server, location

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

alias#

语法

alias path;

默认

上下文

location

定义指定位置的替代路径。例如,以下配置:

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

在请求 /i/top.gif 时,将发送文件 /data/w3/images/top.gif

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

如果在使用正则表达式定义的location内使用 alias,则该正则表达式应包含捕获,并且 alias 应引用这些捕获,例如:

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

当location匹配指令值的最后一部分时:

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

最好使用 root 指令:

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

auth_delay#

语法

auth_delay time;

默认

auth_delay 0s;

上下文

http, server, location

延迟处理未经授权的请求,并返回401响应代码,以防止在通过 密码子请求结果 限制访问时发生时间攻击。

auto_redirect#

语法

auto_redirect [on | off | default];

默认

auto_redirect default;

上下文

http, server, location

控制当前缀location以斜杠结尾时的 重定向 行为:

location /prefix/ {
    auto_redirect on;
}

在这里,请求 /prefix 将导致重定向到 /prefix/

on 明确启用重定向,而 off 禁用它。 当设置为 default 时,仅在location处理带有 apiproxy_passfastcgi_passuwsgi_passscgi_passmemcached_passgrpc_pass 的请求时,才启用重定向。

chunked_transfer_encoding#

语法

chunked_transfer_encoding on | off;

默认

chunked_transfer_encoding on;

上下文

http, server, location

允许在HTTP/1.1中禁用分块传输编码。当使用不支持分块编码的软件时,这可能会很有用,尽管标准要求如此。

client#

语法

client { ... }

默认

上下文

http

创建一个特殊的 client 上下文,用于处理Angie自身执行的内部HTTP请求,无需外部客户端参与。

client 上下文将各种Angie模块的服务流量与用户流量隔离,允许对其进行额外控制。 在此上下文中,只能定义命名的 location`(带有 :samp:`@ 前缀); 它们不能被外部HTTP请求访问,只能通过内部服务器机制以编程方式调用。

client 上下文用于:

  • ACME 模块中通过预定义的 location @acme 向证书颁发机构发送请求, 可以使用 Proxy 模块的指令进行额外配置;

  • Docker 模块中通过预定义的 location @docker_events@docker_containers 向Docker API发送请求, 可以使用 Proxy 模块的指令进行额外配置;

  • 通过 upstream_probe (PRO) 对代理服务器进行健康检查;

  • 在 stream Upstream 模块中使用带有 remote_actionsticky learn 模式。

配置中只能存在一个 client 上下文。

备注

这里允许使用与常规 location 中相同的指令, 但只有内容处理程序 (如 js_contentautoindex) 和变量处理程序(如 map), 以及自身生成请求的指令, 如 upstream_probe,才能真正工作。

在其他 请求处理阶段 操作的指令 (如 limit_reqauth_requesttry_files、图像过滤器、XSLT 等) 在这里不起作用。

client_body_buffer_size#

语法

client_body_buffer_size size;

默认

client_body_buffer_size 8k|16k;

上下文

http, server, location

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

client_body_in_file_only#

语法

client_body_in_file_only on | clean | off;

默认

client_body_in_file_only off;

上下文

http, server, location

确定是否将整个客户端请求体保存到文件中。此指令可在调试期间使用,或在使用 $request_body_file 变量或 Perl 模块的 $r->request_body_file 方法时使用。

on

请求处理后不删除临时文件

clean

允许删除请求处理后留下的临时文件

client_body_in_single_buffer#

语法

client_body_in_single_buffer on | off;

默认

client_body_in_single_buffer off;

上下文

http, server, location

确定是否将整个客户端请求体保存在单个缓冲区中。此指令在使用 $request_body 变量时推荐使用,以减少涉及的复制操作数量。

client_body_temp_path#

语法

client_body_temp_path path [level1 [level2 [level3]]];

默认

client_body_temp_path client_body_temp; (路径取决于 构建选项 --http-client-body-temp-path)

上下文

http, server, location

定义用于存储客户端请求体的临时文件的目录。在指定目录下最多可以使用三级子目录层次。例如,在以下配置中

client_body_temp_path /spool/angie/client_temp 1 2;

临时文件的路径可能如下所示:

/spool/angie/client_temp/7/45/00000123457

client_body_timeout#

语法

client_body_timeout time;

默认

client_body_timeout 60s;

上下文

http, server, location

定义读取客户端请求体的超时时间。超时仅针对两次连续读取操作之间的时间段设置,而不是针对整个请求体的传输。如果客户端在此时间内未传输任何内容,请求将以 408(请求超时)错误终止。

client_header_buffer_size#

语法

client_header_buffer_size size;

默认

client_header_buffer_size 1k;

上下文

http, server

设置用于读取客户端请求头的缓冲区大小。对于大多数请求,1K 字节的缓冲区就足够了。然而,如果请求包含长 cookie,或者来自 WAP 客户端,则可能无法适应 1K。如果请求行或请求头字段无法放入此缓冲区,则会分配通过 large_client_header_buffers 指令配置的更大缓冲区。

如果该指令在 server 级别上指定,则可以使用默认服务器的值。详细信息请参见 虚拟服务器选择 部分。

client_header_timeout#

语法

client_header_timeout time;

默认

client_header_timeout 60s;

上下文

http, server

定义读取客户端请求头的超时。如果客户端在此时间内未传输整个头,则请求将以 408(请求超时)错误终止。

client_max_body_size#

语法

client_max_body_size size;

默认

client_max_body_size 1m;

上下文

http, server, location

设置客户端请求体的最大允许大小。如果请求中的大小超过配置值,则会返回 413(请求实体太大)错误给客户端。请注意,浏览器无法正确显示此错误。

0

禁用对客户端请求体大小的检查

connection_pool_size#

语法

connection_pool_size size;

默认

connection_pool_size 256 | 512;

上下文

http, server, location

允许准确调整每个连接的内存分配。该指令对性能的影响最小,通常不应使用。默认情况下:

256 (字节)

32 位平台

512 (字节)

64 位平台

default_type#

语法

default_type mime-type;

默认

default_type text/plain;

上下文

http, server, location

定义响应的默认 MIME 类型。文件名扩展名到 MIME 类型的映射可以通过 types 指令设置。

directio#

语法

directio size | off;

默认

directio off;

上下文

http, server, location

启用在读取大于或等于指定大小的文件时使用 O_DIRECT 标志(FreeBSD, Linux)、F_NOCACHE 标志(macOS)或 directio() 函数(Solaris)。该指令会自动禁用对特定请求的 sendfile 使用。建议在提供大文件时使用:

directio 4m;

或在 Linux 上使用 aio 时。

directio_alignment#

语法

directio_alignment size;

默认

directio_alignment 512;

上下文

http, server, location

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

error_page#

语法

error_page code ... [=[response]] uri;

默认

上下文

http, server, location, if in location

定义将为指定错误显示的 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/gRPC 服务器处理,且服务器可能返回不同的响应代码(例如,200、302、401 或 404),则可以传递它返回的代码:

error_page 404 = /404.php;

如果在内部重定向期间不需要更改 URI 和方法,则可以将错误处理传递到命名的 location

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)。

etag#

语法

etag on | off;

默认

etag on;

上下文

http, server, location

启用或禁用静态资源的 ETag 响应头字段的自动生成。

http#

语法

http { ... }

默认

上下文

main

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

if_modified_since#

语法

if_modified_since off | exact | before;

默认

if_modified_since exact;

上下文

http, server, location

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

off

响应始终被视为已修改

exact

精确匹配

before

响应的修改时间小于或等于 If-Modified-Since 请求头字段中的时间

ignore_invalid_headers#

语法

ignore_invalid_headers on | off;

默认

ignore_invalid_headers on;

上下文

http, server

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

如果该指令在 server 级别指定,则可以使用默认服务器的值。

internal#

语法

internal;

默认

上下文

location

指定给定的 location 只能用于内部请求。对于外部请求,将返回客户端错误 404(未找到)。内部请求包括:

示例:

error_page 404 /404.html;

location = /404.html {
  internal;
}

备注

每个请求的内部重定向限制为 10 次,以防止在不正确的配置中发生请求处理循环。如果达到此限制,将返回错误 500(内部服务器错误)。在这种情况下,可以在错误日志中看到 rewrite or internal redirection cycle 消息。

keepalive_disable#

语法

keepalive_disable none | browser ...;

默认

keepalive_disable msie6;

上下文

http, server, location

禁用与行为异常的浏览器的长连接。browser 参数指定哪些浏览器将受到影响。

none

启用与所有浏览器的长连接

msie6

禁用与旧版本 MSIE 的长连接,一旦收到 POST 请求

safari

禁用与 macOS 和类似操作系统上的 Safari 和类似浏览器的长连接

keepalive_requests#

语法

keepalive_requests number;

默认

keepalive_requests 1000;

上下文

http, server, location

设置通过一个长连接可以服务的最大请求数。在达到最大请求数后,连接将关闭。

定期关闭连接是必要的,以释放每个连接的内存分配。因此,使用过高的最大请求数可能导致过度的内存使用,不建议这样做。

keepalive_time#

语法

keepalive_time time;

默认

keepalive_time 1h;

上下文

http, server, location

限制通过一个长连接处理请求的最长时间。在达到此时间后,连接将在后续请求处理后关闭。

keepalive_timeout#

语法

keepalive_timeout timeout [header_timeout];

默认

keepalive_timeout 75s;

上下文

http, server, location

timeout

设置保持活动的客户端连接在服务器端保持打开状态的超时时间

0

禁用保持活动的客户端连接

第二个 可选 参数设置响应中 Keep‑Alive: timeout=time 头字段的值。这两个参数可能不同。

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

large_client_header_buffers#

语法

large_client_header_buffers number size;

默认值

large_client_header_buffers 4 8k;

上下文

http, server

设置用于读取大型客户端请求头的缓冲区的最大数量和大小。请求行不能超过一个缓冲区的大小,否则将向客户端返回 414(Request-URI Too Large)错误。请求头字段也不能超过一个缓冲区的大小,否则将向客户端返回 400(Bad Request)错误。缓冲区仅按需分配。默认情况下,缓冲区大小等于 8K 字节。如果在请求处理结束后连接转换为保持活动状态,这些缓冲区将被释放。

如果指令在 server 级别指定,可以使用默认服务器的值。

limit_except#

语法

limit_except method1 [method2...] { ... };

默认值

上下文

location

限制位置内允许的 HTTP 方法。method 参数可以是以下之一:GETHEADPOSTPUTDELETEMKCOLCOPYMOVEOPTIONSPROPFINDPROPPATCHLOCKUNLOCKPATCH。允许 GET 方法也会使 HEAD 方法被允许。对其他方法的访问可以使用 AccessAuth Basic 模块指令进行限制:

limit_except GET {
  allow 192.168.1.0/32;
  deny  all;
}

备注

此示例中的限制适用于 除了 GETHEAD 之外的所有方法。

limit_rate#

语法

limit_rate rate;

默认值

limit_rate 0;

上下文

http, server, location, if in location

限制向客户端传输响应的速率。速率以每秒字节数指定。零值禁用速率限制。限制是按请求设置的,因此如果客户端同时打开两个连接,总速率将是指定限制的两倍。

参数值可以包含变量。在需要根据特定条件限制速率的情况下,这可能很有用:

map $slow $rate {
  1     4k;
  2     8k;
}

limit_rate $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#

语法

limit_rate_after size;

默认值

limit_rate_after 0;

上下文

http, server, location, if in location

设置初始数量,在此之后向客户端传输响应的进一步传输将受到速率限制。参数值可以包含变量。

示例:

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

lingering_close#

语法

lingering_close on | always | off;

默认值

lingering_close on;

上下文

http, server, location

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

on

指示 Angie 在完全关闭连接之前 等待处理 来自客户端的额外数据,但仅在启发式分析表明客户端可能还在发送更多数据的情况下。

always

将导致 Angie 无条件等待并处理额外的客户端数据。

off

告诉 Angie 永远不要等待更多数据并立即关闭连接。这种行为破坏了协议,正常情况下不应使用。

要控制 HTTP/2 连接的关闭,指令必须在 server 级别上指定。

lingering_time#

语法

lingering_time time;

默认值

lingering_time 30s;

上下文

http, server, location

lingering_close 生效时,此指令指定 Angie 将处理(读取并忽略)来自客户端的额外数据的最长时间。在此之后,即使还有更多数据,连接也将被关闭。

lingering_timeout#

语法

lingering_timeout time;

默认值

lingering_timeout 5s;

上下文

http, server, location

lingering_close 生效时,此指令指定等待更多客户端数据到达的最长等待时间。如果在此时间内未收到数据,则连接将关闭。否则,数据将被读取并忽略,Angie 再次开始等待更多数据。"等待-读取-忽略"循环会重复,但不会超过 lingering_time 指令指定的时间。

在优雅关闭期间,客户端保持活动连接仅在至少处于非活动状态 lingering_timeout 指定的时间后才会关闭。

备注

在 nginx 中,类似的指令称为 keepalive_min_timeout

listen#

语法

listen address[:port] [default_server] [ssl] [http2 | quic] [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]:[samp:keepintvl]:[samp:keepcnt]];

listen port [default_server] [ssl] [http2 | quic] [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]:[samp:keepintvl]:[samp:keepcnt]];

listen unix:path [default_server] [ssl] [http2 | quic] [proxy_protocol] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [so_keepalive=on|off|[keepidle]:[samp:keepintvl]:[samp:keepcnt]];

默认值

listen *:80 | *:8000;

上下文

server

设置服务器将接受请求的监听套接字的 addressport,或 UNIX 域套接字的路径。address 也可以是主机名,例如:

listen 127.0.0.1:8000;
listen 127.0.0.1;
listen 8000;
listen *:8000;
listen localhost:8000;

IPv6 地址在方括号中指定:

listen [::]:8000;
listen [::1];

UNIX 域套接字使用 unix: 前缀指定:

listen unix:/var/run/angie.sock;

可以同时指定 addressport,或者只指定 address 或只指定 port。 当省略某些部分时,适用以下规则:

  • 如果只给出 address,则使用端口 80。

  • 如果只给出 port, Angie 会在所有可用的 IPv4(如果启用,还包括 IPv6)接口上监听。 对于该端口,第一个 server 块 将成为具有不匹配 Host 头的请求的默认服务器。

  • 如果完全省略该指令,Angie 在以超级用户权限运行时使用 *:80, 否则使用 *:8000

default_server

指定此参数的服务器将成为给定 address:port 对的默认服务器 (它们一起形成一个 监听套接字)。

如果没有带有 default_server 参数的指令, 监听套接字的默认服务器将是配置中为此套接字提供服务的第一个服务器。

ssl

表示在此监听套接字上接受的所有连接都应在 SSL 模式下工作。这允许为同时处理 HTTP 和 HTTPS 请求的服务器提供更 紧凑的配置

http2

配置端口以接受 HTTP/2 连接。通常,为了使其工作,还应指定 ssl 参数,但 Angie 也可以配置为接受不带 SSL 的 HTTP/2 连接。

自 1.2.0 版本弃用.

请改用 http2 指令。

quic

配置端口以接受 QUIC 连接。 要使用此选项, Angie 必须启用并配置 HTTP3 模块。 设置 quic 后, 您还可以指定 reuseport 以便可以使用多个工作进程。

proxy_protocol

表示在此监听套接字上接受的所有连接都应使用 PROXY 协议。

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

setfib=number

为监听套接字设置路由表 FIB(SO_SETFIB 选项)。目前仅在 FreeBSD 上有效。

fastopen=number

为监听套接字启用"TCP Fast Open",并限制尚未完成三次握手的连接队列的最大长度。

警告

除非服务器能够处理多次接收带有数据的相同 SYN 数据包,否则不要启用"TCP Fast Open"。

backlog=number

设置 listen() 调用中的 backlog 参数, 该参数限制待处理连接队列的最大长度。默认情况下,在 FreeBSD、DragonFly BSD 和 macOS 上 backlog 设置为 -1, 在其他平台上设置为 511。

rcvbuf=size

为监听套接字设置接收缓冲区大小(SO_RCVBUF 选项)。

sndbuf=size

为监听套接字设置发送缓冲区大小(SO_SNDBUF 选项)。

accept_filter=filter

为监听套接字设置接受过滤器的名称(SO_ACCEPTFILTER 选项), 该过滤器在将传入连接传递给 accept() 之前对其进行过滤。这仅在 FreeBSD 和 NetBSD 5.0+ 上有效。 可能的值为 datareadyhttpready

deferred

指示在 Linux 上使用延迟 accept()`(:samp:`TCP_DEFER_ACCEPT 套接字选项)。

bind

指示为给定的 address:port 对进行单独的 bind() 调用。 这很有用,因为如果有几个具有相同端口但不同地址的 listen 指令,并且其中一个 listen 指令监听给定 port 的所有地址(*:port),Angie 将只 bind()*:port。应该注意的是,在这种情况下将进行 getsockname() 系统 调用以确定接受连接的地址。如果使用了 setfibfastopenbacklogrcvbufsndbufaccept_filterdeferredipv6onlyreuseportso_keepalive 参数, 那么对于给定的 address:port 对将始终进行单独的 bind() 调用。

ipv6only=on | off

确定(通过 IPV6_V6ONLY 套接字选项) 监听通配符地址 [::] 的 IPv6 套接字是否只接受 IPv6 连接或同时接受 IPv6 和 IPv4 连接。此参数 默认开启。只能在启动时设置一次。

reuseport

指示为每个工作进程创建单独的监听套接字 (在 Linux 3.9+ 和 DragonFly BSD 上使用 SO_REUSEPORT 套接字选项, 或在 FreeBSD 12+ 上使用 SO_REUSEPORT_LB), 允许内核在工作进程之间分发传入连接。目前仅在 Linux 3.9+、DragonFly BSD 和 FreeBSD 12+ 上有效。

警告

不当使用 reuseport 参数 可能会带来安全隐患。

multipath

启用通过 多路径 TCP <https://en.wikipedia.org/wiki/Multipath_TCP>`__(MPTCP)接受连接, 自 Linux 内核版本 5.6 起支持。 此参数与 :samp:`quic 不兼容

so_keepalive=on | off | [keepidle]:[samp:keepintvl]:[samp:keepcnt]

为监听套接字配置"TCP keepalive"行为。

''

如果省略此参数,则套接字将使用操作系统的设置

on

为套接字开启 SO_KEEPALIVE 选项

off

为套接字关闭 SO_KEEPALIVE 选项

某些操作系统支持使用 TCP_KEEPIDLETCP_KEEPINTVLTCP_KEEPCNT 套接字选项在每个套接字基础上设置 TCP keepalive 参数。在这些系统上,可以使用 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;

location#

语法

location ([ = | ~ | ~* | ^~ ] uri | @name)+ { ... }

默认

上下文

server, location

根据请求 URI 是否与任何匹配表达式匹配来设置配置。

匹配是在标准化 URI 上执行的,在解码以 "%XX" 形式编码的文本、解析相对路径组件 "." 和 ".." 的引用以及可能的 压缩 两个或多个相邻斜杠为单个斜杠后进行。

location 可以通过前缀字符串或正则表达式定义。

正则表达式通过前置修饰符指定:

~*

不区分大小写的匹配

~

区分大小写的匹配

为了找到与请求匹配的位置,Angie 首先检查使用前缀字符串定义的位置(前缀位置)。在它们中,选择匹配前缀最长的位置并记住。

备注

对于诸如 macOS 之类的不区分大小写的操作系统,前缀字符串匹配是不区分大小写的。然而,匹配仅限于单字节区域设置。

然后按照正则表达式在配置文件中出现的顺序检查正则表达式。搜索在第一次匹配后停止,并使用相应的配置。如果没有找到与正则表达式的匹配,则使用之前记住的前缀位置的配置。

除了下面提到的一些例外情况外,location 块可以嵌套。

正则表达式可以创建捕获组,稍后可以与其他指令一起使用。

如果匹配前缀最长的位置具有 ^~ 修饰符,则不检查正则表达式。

此外,使用 = 修饰符,可以定义 URI 和位置的精确匹配。如果找到精确匹配,搜索终止。例如,如果 / 请求频繁发生,定义 location =/ 将加快这些请求的处理速度,因为搜索在第一次比较后终止。这样的位置不能包含嵌套位置,因为它定义了精确匹配。

示例:

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。

备注

如果前缀 location 以斜杠字符结尾,并且 auto_redirect 已启用,则会发生以下情况: 当请求到达的 URI 没有尾部斜杠但其他方面完全匹配前缀时,将返回永久 301 代码重定向,指向附加了斜杠的请求 URI。

对于精确 URI 匹配的 location,不应用重定向:

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

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

@ 前缀定义了一个 命名的 location。此类 location 不用于常规请求处理,而是仅用于请求重定向。它们不能嵌套,也不能包含嵌套的 location。

组合位置#

多个定义相同配置块的 location 上下文可以通过将所有匹配表达式列在一个单独的 location 中并使用单个配置块进行压缩。这称为 组合 location

假设前面的示例中配置 A、D 和 E 定义相同的配置;您可以将它们组合成一个 location

location =/
         ^~/images/
         ~*\.(gif|jpg|jpeg)$ {
   # 一般配置
}

命名的 location 也可以是组合的一部分:

location =/
         @named_combined {
   #...
}

警告

组合 location 不能在匹配表达式和其修饰符之间有空格。 正确形式:location ~*/match(ing|es|er)$ ...

备注

目前,组合 location 不能 立即 包含 proxy_pass 和类似的带有 URI 设置的指令,也不能包含 apialias。然而,这些指令可以通过嵌套在组合位置中的位置使用。

log_not_found#

语法

log_not_found on | off;

默认

log_not_found on;

上下文

http, server, location

启用或禁用将未找到文件的错误记录到 error_log

log_subrequest#

语法

log_subrequest on | off;

默认

log_subrequest off;

上下文

http, server, location

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

max_headers#

语法

max_headers number;

默认

max_headers 1000;

上下文

http, server

设置允许的客户端请求头字段的最大数量。 如果超过此限制,将返回 400 (Bad Request) 错误。

当该指令在 server 级别设置时,可能会应用默认服务器的值。 有关更多信息,请参阅 虚拟服务器选择 部分。

max_ranges#

语法

max_ranges number;

默认

上下文

http, server, location

限制字节范围请求中允许的最大范围数量。超出限制的请求将被处理为没有指定字节范围。默认情况下,范围数量没有限制。

0

完全禁用字节范围支持

merge_slashes#

语法

merge_slashes on | off;

默认

merge_slashes on;

上下文

http, server

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

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

location /scripts/ { }

并可能被处理为静态文件。因此,它会被转换为 /scripts/one.php

如果URI包含base64编码的名称,则可能需要关闭压缩,因为base64在内部使用"/"字符。然而,出于安全考虑,最好避免关闭压缩。

如果在 server 级别指定该指令,则可以使用默认服务器的值。

msie_padding#

语法

msie_padding on | off;

默认

msie_padding on;

上下文

http, server, location

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

msie_refresh#

语法

msie_refresh on | off;

默认

msie_refresh off;

上下文

http, server, location

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

open_file_cache#

语法

open_file_cache off;

open_file_cache max=N [inactive=time];

默认

open_file_cache off;

上下文

http, server, location

配置一个可以存储以下内容的缓存:

  • 打开的文件描述符、它们的大小和修改时间;

  • 目录存在的信息;

  • 文件查找错误,例如"找不到文件"、"无读取权限"等。

错误缓存应通过 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 on | off;

默认

open_file_cache_errors off;

上下文

http, server, location

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

open_file_cache_min_uses#

语法

open_file_cache_min_uses number;

默认

open_file_cache_min_uses 1;

上下文

http, server, location

设置在 open_file_cache 指令的 inactive 参数配置的期间内,文件描述符保持在缓存中打开所需的最小文件访问次数。

open_file_cache_valid#

语法

open_file_cache_valid time;

默认

open_file_cache_valid 60s;

上下文

http, server, location

设置 open_file_cache 元素应被验证的时间。

output_buffers#

语法

output_buffers number size;

默认

output_buffers 2 32k;

上下文

http, server, location

设置用于从磁盘读取响应的缓冲区的数量和大小。

port_in_redirect#

语法

port_in_redirect on | off;

默认

port_in_redirect on;

上下文

http, server, location

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

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

postpone_output#

语法

postpone_output size;

默认

postpone_output 1460;

上下文

http, server, location

如果可能,将推迟客户端数据的传输,直到Angie至少有 size 字节的数据可发送。

0

禁用推迟数据传输

read_ahead#

语法

read_ahead size;

默认

read_ahead 0;

上下文

http, server, location

设置内核在处理文件时的预读量。

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

在FreeBSD上,使用自FreeBSD 9.0-CURRENT以来支持的 fcntl(O_READAHEAD, size ) 系统调用。

recursive_error_pages#

语法

recursive_error_pages on | off;

默认

recursive_error_pages off;

上下文

http, server, location

启用或禁用使用 error_page 指令进行多次重定向。这种重定向的数量是 有限的

request_pool_size#

语法

request_pool_size size;

默认

request_pool_size 4k;

上下文

http, server

允许精确调整每个请求的内存分配。此指令对性能影响很小,通常不应使用。

reset_timedout_connection#

语法

reset_timedout_connection on | off;

默认

reset_timedout_connection off;

上下文

http, server, location

启用或禁用重置超时连接和使用非标准代码444关闭的连接。重置的执行方式如下:在关闭套接字之前,为其设置 SO_LINGER 选项,超时值为0。当套接字关闭时,TCP RST被发送到客户端,与此套接字相关的所有内存都被释放。这有助于避免长时间保持已关闭的套接字处于FIN_WAIT1状态并填满缓冲区。

备注

keep-alive连接超时时正常关闭。

resolver#

语法

resolver address ... [valid=time] [ipv4=on | off] [ipv6=on | off] [status_zone=zone];

默认

上下文

http, server, location, upstream

配置用于将上游服务器名称解析为地址的名称服务器,例如:

resolver 127.0.0.53 [::1]:5353;

地址可以指定为域名或IP地址,并带有可选端口。如果未指定端口,则使用端口53。名称服务器以轮询方式查询。

默认情况下,Angie使用响应的TTL值缓存答案。

valid

可选 参数允许覆盖响应缓存有效期

resolver 127.0.0.53 [::1]:5353 valid=30s;

默认情况下,Angie在解析时将查找IPv4和IPv6地址。

ipv4=off

禁用查找IPv4地址

ipv6=off

禁用查找IPv6地址

status_zone

可选 参数; 启用在指定区域中收集DNS服务器请求和响应指标 (/status/resolvers/<zone>)

小技巧

为防止DNS欺骗,建议在适当安全的受信任本地网络中使用DNS服务器。

小技巧

当在 Docker 中运行时,使用相应的内部DNS服务器地址,例如 127.0.0.11

resolver_timeout#

语法

resolver_timeout 时间;

默认

resolver_timeout 30s;

上下文

http, server, location, upstream

为名称解析设置超时时间,例如:

resolver_timeout 5s;

root#

语法

root 路径;

默认

root html;

上下文

http, server, location, if in location

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

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

/data/w3/i/top.gif 文件将作为 /i/top.gif 请求的响应发送。

路径`值可以包含变量,除了 :ref:`$document_root <v_document_root>$realpath_root

文件的路径仅通过将URI添加到root指令的值来构造。如果URI需要被修改,则应使用 alias 指令。

satisfy#

语法

satisfy all | any;

默认

satisfy all;

上下文

http, server, location

如果所有(all )或至少一个(any ):ref:Access <http_access>Auth BasicAuth Request 模块允许访问,则允许访问。

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 大小;

默认

send_lowat 0;

上下文

http, server, location

如果指令设置为非零值,Angie将尝试通过使用 kqueue 方法的 NOTE_LOWAT 标志或 SO_SNDLOWAT 套接字选项来最小化客户端套接字上的发送操作数。在这两种情况下,使用指定的大小。

send_timeout#

语法

send_timeout 时间;

默认

send_timeout 60s;

上下文

http, server, location

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

sendfile#

语法

sendfile on | off;

默认

sendfile off;

上下文

http, server, location, if in location

启用或禁用 sendfile() 的使用。

aio 可用于预加载 sendfile() 的数据:

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

在此配置中,sendfile() 被调用时带有 SF_NODISKIO 标志,这使其不会在磁盘I/O上阻塞,而是报告数据不在内存中。然后,Angie通过读取一个字节来启动异步数据加载。在第一次读取时,FreeBSD内核将文件的前128K字节加载到内存中,尽管后续读取将仅以16K的块加载数据。这可以通过 read_ahead 指令进行更改。

sendfile_max_chunk#

语法

sendfile_max_chunk 大小;

默认

sendfile_max_chunk 2m;

上下文

http, server, location

限制可以在单个 sendfile() 调用中传输的数据量。没有限制时,一个快速连接可能会完全占用工作进程。

server#

语法

server { ... }

默认

上下文

http

设置虚拟服务器的配置。没有明确区分基于IP(基于IP地址)和基于名称(基于"Host"请求头字段)的虚拟服务器。相反,listen 指令描述了应该接受服务器连接的所有地址和端口,而 server_name 指令列出了所有服务器名称。

示例配置在 Angie如何处理请求 文档中提供。

server_name#

语法

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\d+\.example\.com$ www.example.com;
}

正则表达式可以包含捕获,稍后可以在其他指令中使用:

server {
  server_name ~^(www\.)?(.+)$;

  location / {
     root /sites/$2;
  }
}

server {
  server_name _;

  location / {
     root /sites/default;
  }
}

正则表达式中的命名捕获组创建变量,稍后可以在其他指令中使用:

server {
  server_name ~^(www\.)?(?<domain>.+)$;

  location / {
     root /sites/$domain;
  }
}

server {
  server_name _;

  location / {
     root /sites/default;
  }
}

备注

如果指令设置为 $hostname,将使用Web服务器的主机名。

您还可以指定空服务器名称(""):

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

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

  • 精确名称;

  • 以通配符开头的最长名称,例如 *.example.com

  • 以通配符结尾的最长名称,例如 mail.*

  • 第一个匹配的正则表达式(按配置中出现的顺序),包括空名称。

警告

要使 server_name 与TLS一起使用,您需要终止TLS连接。该指令匹配HTTP请求中的 Host,因此握手必须完成并且连接被解密。

server_name_in_redirect#

语法

server_name_in_redirect on | off;

默认

server_name_in_redirect off;

上下文

http, server, location

启用或禁用在Angie发出的 绝对重定向 中使用由 server_name 指令指定的主要服务器名称。

on

使用由 server_name 指令指定的主要服务器名称

off

使用"Host"请求头字段中的名称。如果该字段不存在,则使用服务器的IP地址。

重定向中使用端口的方式由 port_in_redirect 指令控制。

server_names_hash_bucket_size#

语法

server_names_hash_bucket_size 大小;

默认

server_names_hash_bucket_size 32 | 64 | 128;

上下文

http

设置服务器名称哈希表的桶大小。默认值取决于处理器缓存行的大小。有关设置哈希表的详细信息,请参见单独的 文档

server_names_hash_max_size#

语法

server_names_hash_max_size 大小;

默认

server_names_hash_max_size 512;

上下文

http

设置服务器名称哈希表的最大大小。有关设置哈希表的详细信息,请参见单独的 文档

server_tokens#

语法

server_tokens on | off | build | 字符串;

默认

server_tokens on;

上下文

http, server, location

启用或禁用在错误页面和 Server 响应头字段中发出 Angie 版本。build 参数启用发出构建名称,该名称由相应的 configure 参数设置,以及版本。

Added in version 1.1.0: PRO

在 Angie PRO 中,如果指令设置为 字符串,该字符串也可以包含变量,错误页面和 Server 响应头字段将使用该字符串的变量插值值,而不是服务器名称、版本和构建名称。空 字符串 禁用发出 Server 字段。

status_zone#

语法

status_zone off | 区域 | zone=区域[:数量];

默认

上下文

server, location, if in location

分配一个共享内存区域以收集 /status/http/location_zones/<zone>/status/http/server_zones/<zone> 的指标。

多个 server 上下文可以共享同一区域以进行数据收集;特殊值 off 禁用在嵌套 location 块中的数据收集。

单值 区域 语法将当前上下文的所有指标合并到一个共享内存区域中:

server {

    listen 80;
    server_name *.example.com;

    status_zone single;
    # ...
}

替代语法允许设置以下参数:

一个包含变量的字符串,其值决定了请求在区域内的分组。所有在替换后产生相同值的请求都会被分到同一组。如果替换产生空值,则不会更新指标。

区域

共享内存区域的名称。

数量 (可选)

收集指标的最大分组数。如果新的 值超过此限制,则会在 区域 下进行分组。

默认值为 1。

在以下示例中,所有共享相同 $host 值的请求被分组到 host_zone 中。每个唯一的 $host 的指标会单独跟踪,直到有 10 个指标组。一旦达到此限制,任何额外的 $host 值将被包含在 host_zone 下:

server {

    listen 80;
    server_name *.example.com;

    status_zone $host zone=host_zone:10;

    location / {

        proxy_pass http://example.com;
    }
}

因此,生成的指标在 API 输出中在各个主机之间分开。

subrequest_output_buffer_size#

语法

subrequest_output_buffer_size 大小;

默认

subrequest_output_buffer_size 4k | 8k;

上下文

http, server, location

设置用于存储子请求响应体的缓冲区大小。默认情况下,缓冲区大小等于一个内存页面。这是 4K8K,具体取决于平台。不过,可以将其设置得更小。

备注

此指令仅适用于响应体存储在内存中的子请求。例如,这种子请求由 SSI 创建。

tcp_nodelay#

语法

tcp_nodelay on | off;

默认

tcp_nodelay on;

上下文

http, server, location

启用或禁用 TCP_NODELAY 选项。当连接进入保持活动状态时,该选项被启用。此外,在 SSL 连接、无缓冲代理和 WebSocket 代理 中也会启用该选项。

tcp_nopush#

语法

tcp_nopush on | off;

默认

tcp_nopush off;

上下文

http, server, location

启用或禁用 FreeBSD 上的 TCP_NOPUSH 套接字选项或 Linux 上的 TCP_CORK 套接字选项。这些选项仅在使用 sendfile 时启用。启用该选项可以

  • 在 Linux 和 FreeBSD 4.* 上将响应头和文件开头一起发送在一个数据包中;

  • 以完整数据包发送文件。

try_files#

语法

try_files 文件 ... uri;

try_files 文件 ... =代码;

默认

上下文

server, location

按指定顺序检查文件的存在性,并使用第一个找到的文件进行请求处理;处理在当前上下文中进行。文件路径根据 rootalias 指令从文件参数构建。可以通过在名称末尾指定斜杠(例如 $uri/)来检查目录的存在性。如果没有找到任何文件,则会进行内部重定向到最后一个参数中指定的 uri。例如:

location /images/ {
  try_files $uri /images/default.gif;
}

location = /images/default.gif {
  expires 30s;
}

最后一个参数也可以指向命名 location,如下所示。最后一个参数也可以是代码:

location / {
  try_files $uri $uri/index.html $uri.html =404;
}

在以下示例中,

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 文件的存在性。

代理 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;

#  ... 其他 fastcgi_param
}

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;

#  ... 其他 fastcgi_param
}
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;
#  ... 其他 fastcgi_param
}

location @wordpress {
  fastcgi_pass ...;

  fastcgi_param SCRIPT_FILENAME /path/to/index.php;
#  ... 其他 fastcgi_param
}

types#

语法

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;
}

一个相对完整的映射表与 Angie 一起分发,存放在 conf/mime.types 文件中。

要使特定位置对所有响应返回 "application/octet-stream" MIME 类型,可以使用以下配置:

location /download/ {
  types        { }
  default_type application/octet-stream;
}

types_hash_bucket_size#

语法

types_hash_bucket_size size;

默认值

types_hash_bucket_size 64;

上下文

http, server, location

设置类型哈希表的桶大小。有关设置哈希表的详细信息在 单独讨论

types_hash_max_size#

语法

types_hash_max_size size;

默认值

types_hash_max_size 1024;

上下文

http, server, location

设置类型哈希表的最大大小。有关设置哈希表的详细信息在 单独讨论

underscores_in_headers#

语法

underscores_in_headers on | off;

默认值

underscores_in_headers off;

上下文

http, server

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

如果该指令在 server 级别指定,则可以使用默认服务器的值。

variables_hash_bucket_size#

语法

variables_hash_bucket_size size;

默认值

variables_hash_bucket_size 64;

上下文

http

设置变量哈希表的桶大小。有关设置哈希表的详细信息在 单独讨论

variables_hash_max_size#

语法

variables_hash_max_size size;

默认值

variables_hash_max_size 1024;

上下文

http

设置变量哈希表的最大大小。有关设置哈希表的详细信息在 单独讨论

内置变量#

http_core 模块支持名称与 Apache 服务器变量匹配的内置变量。首先,这些变量表示客户端请求头字段,例如 $http_user_agent$http_cookie 等。此外,还有其他变量:

$angie_version#

Angie 版本

$arg_<name>#

请求行中的参数 name

$args#

请求行中的参数

$binary_remote_addr#

以二进制形式表示的客户端地址,IPv4 地址的值长度始终为 4 字节,IPv6 地址为 16 字节

$body_bytes_sent#

发送到客户端的字节数,不包括响应头;该变量与 Apache 模块 mod_log_config 的 "%B" 参数兼容

$bytes_sent#

发送到客户端的字节数

$connection#

连接序列号

$connection_requests#

通过连接发出的当前请求数量

$connection_time#

连接时间(以秒为单位,精确到毫秒)

$content_length#

Content-Length 请求头字段

$content_type#

Content-Type 请求头字段

$document_root#

当前请求的 rootalias 指令的值

$document_uri#

$uri 相同

$host#

按优先顺序:请求行中的主机名、"Host" 请求头字段中的主机名,或与请求匹配的服务器名

$hostname#

主机名

$http_<name>#

任意请求头字段;变量名的最后部分对应转换为小写、用下划线替代破折号的字段名

$https#

如果连接在 SSL 模式下运行则为 on,否则为空字符串

$is_args#

如果请求行有参数则为 ?,否则为空字符串

$limit_rate#

设置该变量以启用响应速率限制;请参见 limit_rate

$msec#

当前时间(以秒为单位,精确到毫秒)

$pid#

工作进程的 PID

$pipe#

如果请求是管道化的则为 p,否则为 .

$proxy_protocol_addr#

来自 PROXY 协议头的客户端地址

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

$proxy_protocol_port#

来自 PROXY 协议头的客户端端口

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

$proxy_protocol_server_addr#

来自 PROXY 协议头的服务器地址

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

$proxy_protocol_server_port#

来自 PROXY 协议头的服务器端口

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

$proxy_protocol_tlv_<name>#

来自 PROXY 协议头的 TLV。name 可以是 TLV 类型名称或其数字值。在后者情况下,该值为十六进制,并应以 0x 为前缀:

$proxy_protocol_tlv_alpn
$proxy_protocol_tlv_0x01

SSL TLV 也可以通过 TLV 类型名称或其数字值访问,前面都加上 ssl_

$proxy_protocol_tlv_ssl_version
$proxy_protocol_tlv_ssl_0x21

支持以下 TLV 类型名称:

  • alpn (0x01) - 在连接中使用的上层协议

  • authority (0x02) - 客户端传递的主机名值

  • 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,否则为非零值

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

$query_string#

$args 相同

$realpath_root#

与当前请求的 rootalias 指令的值对应的绝对路径名,所有符号链接已解析为真实路径

$remote_addr#

客户端地址

$remote_port#

客户端端口

$remote_user#

通过基本身份验证提供的用户名

$request#

完整的原始请求行

$request_body#

请求体

该变量的值在通过 proxy_passfastcgi_passuwsgi_passscgi_pass 指令处理的位置中 可用,当请求体被读取到 内存缓冲区 时。

$request_body_file#

包含请求体的临时文件名称。

处理结束时,需要删除该文件。要始终将请求体写入文件,需要启用 client_body_in_file_only。当在代理请求或对 FastCGI/uwsgi/SCGI 服务器的请求中传递临时文件名称时,应分别通过 proxy_pass_request_body offfastcgi_pass_request_body offuwsgi_pass_request_body offscgi_pass_request_body off 指令禁用请求体的传递。

$request_completion#

如果请求已完成则为 OK,否则为空字符串

$request_filename#

基于 rootalias 指令以及请求 URI 的当前请求的文件路径

$request_id#

由 16 个随机字节生成的唯一请求标识符,采用十六进制格式

$request_length#

请求长度(包括请求行、头部和请求体)

$request_method#

请求方法,通常为 GETPOST

$request_time#

请求处理时间(以秒为单位,精确到毫秒);自从从客户端读取第一个字节以来的经过时间

$request_uri#

完整的原始请求 URI(带参数)

$scheme#

请求方案,"http" 或 "https"

$sent_http_<name>#

任意响应头字段;变量名的最后部分对应转换为小写、用下划线替代破折号的字段名

$sent_trailer_<name>#

在响应末尾发送的任意字段;变量名的最后部分对应转换为小写、用下划线替代破折号的字段名

$server_addr#

接受请求的服务器的地址。

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

$server_name#

接受请求的服务器的名称

$server_port#

接受请求的服务器的端口

$server_protocol#

请求协议,通常是 "HTTP/1.0"、"HTTP/1.1" 或 "HTTP/2.0"

$status#

响应状态

$time_iso8601#

本地时间,符合 ISO 8601 标准格式

$time_local#

本地时间,符合通用日志格式

$tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, $tcpinfo_rcv_space#

有关客户端 TCP 连接的信息;在支持 TCP_INFO 套接字选项的系统上可用

$uri#

请求中的当前 URI,已规范化

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