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

最后,文件可以使用多线程读取和:ref:send <sendfile>,而不会阻塞工作进程:

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

读取和发送文件操作被卸载到指定的 pool 的线程中。如果省略 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 值可以包含变量,除了:ref:$document_root <v_document_root>$realpath_root

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

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

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

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 /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_body_buffer_size#

语法

client_body_buffer_size size;

默认

client_body_buffer_size 8k|16k;

上下文

http, server, location

设置用于读取客户端请求体的缓冲区大小。如果请求体大于缓冲区,则整个请求体或仅其部分将写入:ref:临时文件 <client_body_temp_path>。默认情况下,缓冲区大小等于两个内存页面。在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

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

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

on

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

clean

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

client_body_in_single_buffer#

语法

client_body_in_single_buffer on | off;

默认

client_body_in_single_buffer off;

上下文

http, server, location

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

client_body_temp_path#

语法

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

默认

client_body_temp_path client_body_temp; (路径取决于 --http-proxy-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 / {
  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

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

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

internal#

语法

internal;

默认

上下文

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(请求的URI过大)错误给客户端。请求头字段也不能超过一个缓冲区的大小,否则将返回400(错误的请求)错误给客户端。缓冲区仅在需要时分配。默认情况下,缓冲区大小为8K字节。如果在请求处理结束后,连接被转换为长连接状态,则这些缓冲区将被释放。

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

limit_except#

语法

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

默认值

上下文

location

限制在某个位置内允许的HTTP方法。 method 可以是以下之一:GETHEADPOSTPUTDELETEMKCOLCOPYMOVEOPTIONSPROPFINDPROPPATCHLOCKUNLOCKPATCH。允许 GET 方法也会启用 HEAD 方法。可以使用 访问基础认证 模块中的指令限制对其他方法的访问:

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 的时间时,客户端的长连接才会被关闭。

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]:[keepintvl]:[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]:[keepintvl]:[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]:[keepintvl]:[keepcnt]];

默认值

listen *:80 | *:8000;

上下文

server

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

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;

如果仅给定 address,则使用端口 80

如果指令不存在,则在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 指令中指定,但对于给定的 address:port 对只能指定一次。

setfib=number

此参数设置与监听套接字关联的路由表 FIB(SO_SETFIB 选项)。这目前仅在 FreeBSD 上有效。

fastopen=number

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

小心

除非服务器能够处理多次接收相同的 SYN 数据包,否则请勿启用此功能。

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+ 上有效。

小心

不当使用此选项可能会导致安全隐患。

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

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

''

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

on

为套接字开启 SO_KEEPALIVE 选项。

off

为套接字关闭 SO_KEEPALIVE 选项。

某些操作系统支持使用 TCP_KEEPIDLETCP_KEEPINTVLTCP_KEEPCNT 套接字选项按套接字基础设置 TCP keepalive 参数。在此类系统上(目前为 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;

location#

语法

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

默认

上下文

server, location

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

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

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

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

~*

不区分大小写的匹配

~

区分大小写的匹配

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

备注

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

然后,基于正则表达式的位置按其在配置文件中的出现顺序进行评估。它们的评估在第一个匹配处停止,并使用相应的配置。如果未找到匹配的正则表达式位置,Angie 将使用暂时存储的前缀位置的配置。

在某些下述例外情况下,location 块可以嵌套。

正则表达式位置可以定义捕获组,稍后可以与其他指令一起使用。

如果匹配前缀位置使用 ^~ 修饰符,则不检查正则表达式位置。

此外,= 修饰符为 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 时,将返回指向附加斜杠的请求 URI 的永久 301 代码重定向。

对于精确 URI 匹配位置,不应用重定向:

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

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

@ 前缀定义了一个 命名的 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 数字;

默认

max_headers 1000;

上下文

http, server

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

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

max_ranges#

语法

max_ranges 数字;

默认

上下文

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

设置缓存中元素的最大数量;在缓存溢出时,最少使用的元素将被删除;

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 数字;

默认

open_file_cache_min_uses 1;

上下文

http, server, location

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

open_file_cache_valid#

语法

open_file_cache_valid 时间;

默认

open_file_cache_valid 60s;

上下文

http, server, location

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

output_buffers#

语法

output_buffers 数字 大小;

默认

output_buffers 2 32k;

上下文

http, server, location

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

port_in_redirect#

语法

port_in_redirect on | off;

默认

port_in_redirect on;

上下文

http, server, location

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

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

postpone_output#

语法

postpone_output 大小;

默认

postpone_output 1460;

上下文

http, server, location

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

0

禁用推迟数据传输

read_ahead#

语法

read_ahead 大小;

默认

read_ahead 0;

上下文

http, server, location

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

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

recursive_error_pages#

语法

recursive_error_pages on | off;

默认

recursive_error_pages off;

上下文

http, server, location

启用或禁用使用 error_page 指令进行多个重定向。此类重定向的数量是 有限的

request_pool_size#

语法

request_pool_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 状态。

备注

超时的保持连接会正常关闭。

resolver#

语法

resolver 地址 ... [valid=时间] [ipv4=on | off] [ipv6=on | off] [status_zone=zone];

默认

上下文

http, server, location, upstream

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

resolver 127.0.0.53 [::1]:5353;

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

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

valid

可选 参数允许覆盖缓存条目的有效性

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

默认情况下,安吉在解析时将查找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 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 请求的响应发送。

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

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

satisfy#

语法

satisfy all | any;

默认

satisfy all;

上下文

http, server, location

如果所有(all)或至少一个(any)模块允许访问,将允许访问:访问, 基础认证认证请求

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 将尝试通过使用 NOTE_LOWAT 标志的 ref:kqueue 方法或 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 | key zone=zone[:count];

默认

上下文

server, location, if in location

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

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

单值 zone 语法在同一共享内存区域中聚合其上下文的所有指标:

server {

    listen 80;
    server_name *.example.com;

    status_zone single;
    # ...
}

替代语法使用以下参数:

key

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

zone

共享内存区域的名称。

count (可选)

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

默认值为 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#

Syntax

subrequest_output_buffer_size size;

Default

subrequest_output_buffer_size 4k | 8k;

Context

http, server, location

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

备注

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

tcp_nodelay#

Syntax

tcp_nodelay on | off;

Default

tcp_nodelay on;

Context

http, server, location

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

tcp_nopush#

Syntax

tcp_nopush on | off;

Default

tcp_nopush off;

Context

http, server, location

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

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

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

try_files#

Syntax

try_files file ... uri;

try_files file ... =code;

Default

Context

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#

Syntax

types { ... }

Default

types text/html html; image/gif gif; image/jpeg jpg;

Context

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#

Syntax

types_hash_bucket_size size;

Default

types_hash_bucket_size 64;

Context

http, server, location

设置类型哈希表的桶大小。 有关设置哈希表的详细信息,请参阅单独的 document

types_hash_max_size#

Syntax

types_hash_max_size size;

Default

types_hash_max_size 1024;

Context

http, server, location

设置类型哈希表的最大大小。 有关设置哈希表的详细信息,请参阅单独的 document

underscores_in_headers#

Syntax

underscores_in_headers on | off;

Default

underscores_in_headers off;

Context

http, server

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

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

variables_hash_bucket_size#

Syntax

variables_hash_bucket_size size;

Default

variables_hash_bucket_size 64;

Context

http

设置变量哈希表的桶大小。 有关设置哈希表的详细信息,请参阅单独的 document

variables_hash_max_size#

Syntax

variables_hash_max_size size;

Default

variables_hash_max_size 1024;

Context

http

设置变量哈希表的最大大小。 有关设置哈希表的详细信息,请参阅单独的 document

内置变量#

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#

发送到客户端的字节数,不包括响应头;该变量与 mod_log_config Apache 模块的 "%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>#

任意请求头字段;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 指令处理的位置可用,当请求体被读取到 memory buffer 时。

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

任意响应头字段;name 是转换为小写、用下划线替代破折号的字段名

$sent_trailer_<name>#

在响应末尾发送的任意字段;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, normalized。 在请求处理期间, $uri 的值可能会发生变化,例如在进行内部重定向或使用索引文件时。