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 上,从 FreeBSD 4.3 开始可以使用 AIO。在 FreeBSD 11.0 之前,AIO 可以静态链接到内核中:

options VFS_AIO

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

kldload aio

在 Linux 上,从内核版本 2.6.22 开始可以使用 AIO。此外,有必要启用 directio,否则读取将是阻塞的:

location /video/ {
  aio            on;
  directio       512;
  output_buffers 1 128k;
}

在 Linux 上,directio 只能用于读取 512 字节边界(或 XFS 的 4K)对齐的块。文件未对齐的结尾以阻塞模式读取。对文件开头和结尾未对齐数据的字节范围请求和 FLV 请求也是如此:文件开头和结尾的未对齐数据读取将是阻塞的。

当在 Linux 上同时启用 AIO 和 sendfile 时,AIO 用于大于或等于 directio 指令中指定大小的文件,而 sendfile 用于较小尺寸的文件或禁用 directio 时:

location /video/ {
  sendfile       on;
  aio            on;
  directio       8m;
}

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

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 值可以包含变量,除了 $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 响应代码的未经授权请求,以防止在访问受 password子请求结果 限制时进行时间攻击。

auto_redirect#

语法

auto_redirect [on | off | default];

默认值

auto_redirect default;

上下文

http, server, location

该指令控制前缀位置以斜杠结束时的 重定向 行为:

location /prefix/ {
    auto_redirect on;
}

在此,请求 /prefix 会导致重定向到 /prefix/

将此设置为 onoff 可以显式启用和禁用重定向。设置为 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

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

当设置为 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 字节的缓冲区就足够了。然而,如果请求包含很长的 cookies,或者来自 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;

这会将请求方法更改为"GET"(除"GET"和"HEAD"以外的所有方法),并内部重定向到指定的 uri

此外,可以使用`=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或内部重定向循环 消息。

keepalive_disable#

语法

keepalive_disable none | browser ...;

默认值

keepalive_disable msie6;

上下文

http, server, location

禁用与行为不当的浏览器的keep-alive连接。browser 参数指定将影响哪些浏览器。

none

允许与所有浏览器的keep-alive连接

msie6

在接收到POST请求后,禁用与旧版MSIE的keep-alive连接

safari

禁用与macOS及类似操作系统上的Safari及类似浏览器的keep-alive连接

keepalive_requests#

语法

keepalive_requests number;

默认值

keepalive_requests 1000;

上下文

http, server, location

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

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

keepalive_time#

语法

keepalive_time time;

默认值

keepalive_time 1h;

上下文

http, server, location

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

keepalive_timeout#

语法

keepalive_timeout timeout [header_timeout];

默认值

keepalive_timeout 75s;

上下文

http, server, location

timeout

设置一个超时时间,在此期间keep-alive客户端连接将在服务器端保持打开状态

0

禁用keep-alive客户端连接

可选 的第二个参数在“Keep-Alive: timeout=time”响应头字段中设置一个值。两个参数可以不同。

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

large_client_header_buffers#

语法

large_client_header_buffers number size;

默认值

large_client_header_buffers 4 8k;

上下文

http, server

设置用于读取大客户端请求头的缓冲区的最大数量和大小。请求行不能超过一个缓冲区的大小,否则将返回414(请求URI太大)错误给客户端。请求头字段也不能超过一个缓冲区的大小,否则将返回400(错误请求)错误给客户端。缓冲区仅在需要时分配。默认情况下,缓冲区大小等于8K字节。如果在请求处理结束后连接转入keep-alive状态,这些缓冲区将被释放。

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

limit_except#

语法

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

默认值

上下文

location

限制在某个位置内允许的HTTP方法。 method 可以是以下之一:GET, HEAD, POST, PUT, DELETE, MKCOL, COPY, MOVE, OPTIONS, PROPFIND, PROPPATCH, LOCK, UNLOCKPATCH。允许 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_headers, fastcgi_ignore_headers, uwsgi_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 指令指定的时间。

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() (TCP_DEFER_ACCEPT 套接字选项)。

bind

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

ipv6only=on | off

此参数通过 IPV6_V6ONLY 套接字选项决定是否仅接受 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 可以由前缀字符串或正则表达式定义。

正则表达式是通过前缀修饰符指定的:

~*

不区分大小写匹配

~

区分大小写匹配

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

备注

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

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

除下述例外,location 块可以嵌套。

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

如果匹配的前缀 location 使用了 ^~ 修饰符,则不检查正则表达式 locations。

此外,= 修饰符为 location 启用精确 URI 匹配模式;如果找到精确匹配,则查找停止。例如,如果 / 请求频繁,则定义 location =/ 会加速其处理,因为查找在精确匹配处停止。显然,这样的 locations 不能包含嵌套的 locations。

示例:

location =/ {
   #配置 A
}

location / {
   #配置 B
}

location /documents/ {
   #配置 C
}

location ^~/images/ {
   #配置 D
}

location ~*\.(gif|jpg|jpeg)$ {
   #配置 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。这些 locations 不用于常规请求处理,但可以用于请求重定向。它们不能嵌套,也不能包含嵌套的 locations。

组合 locations#

几个定义了相同配置块的 location 上下文可以通过在一个 location 中列出其所有匹配表达式并包含一个配置块来压缩。这被称为 组合 location

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

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

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

location =/
         @named_combined {
   #...
}

小心

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

备注

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

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_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 参数配置的期间,文件描述符在缓存中保持打开所需的文件访问最少 number 次数。

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

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

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) 系统调用,因此忽略 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 状态。

备注

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

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 服务器。

resolver_timeout#

语法

resolver_timeout time;

默认值

resolver_timeout 30s;

上下文

http, server, location, upstream

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

resolver_timeout 5s;

root#

语法

root path;

默认值

root html;

上下文

http, server, location, if in location

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

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

将会在响应 /i/top.gif 请求时发送 /data/w3/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 size;

默认值

send_lowat 0;

上下文

http, server, location

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

send_timeout#

语法

send_timeout time;

默认值

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

默认值

sendfile_max_chunk 2m;

上下文

http, server, location

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

server#

语法

server { ... }

默认值

上下文

http

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

示例配置在 How Angie processes a request 文档中提供。

server_name#

语法

server_name 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 size;

默认值

server_names_hash_bucket_size 32 | 64 | 128;

上下文

http

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

server_names_hash_max_size#

语法

server_names_hash_max_size size;

默认值

server_names_hash_max_size 512;

上下文

http

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

server_tokens#

语法

server_tokens on | off | build | string;

默认值

server_tokens on;

上下文

http, server, location

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

Added in version 1.1.0: PRO

在 Angie PRO 中,如果指令设置了一个 string,其中可能还包含变量, 错误页面和 Server 响应头字段 将使用字符串的变量插值值 而不是服务器名称、版本和构建名称。 空的 string 禁用显示 Server 字段。

status_zone#

语法

status_zone zone;

默认值

上下文

server, location, if in location

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

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

subrequest_output_buffer_size#

语法

subrequest_output_buffer_size 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 file ... uri;

try_files file ... =code;

默认值

上下文

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;

#  ... other 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;

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

location @wordpress {
  fastcgi_pass ...;

  fastcgi_param SCRIPT_FILENAME /path/to/index.php;
#  ... other 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>#

任意请求头字段;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`,否则为非零。

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

$query_string#

$args

$realpath_root#

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

$remote_addr#

客户端地址

$remote_port#

客户端端口

$remote_user#

通过基本认证提供的用户名

$request#

完整的原始请求行

$request_body#

请求体。

当请求体被读入 memory buffer 时,该变量的值在由 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>#

任意响应头字段; 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 的值可能会更改,例如在执行内部重定向或使用索引文件时。