HTTP 模块#
核心 HTTP 模块实现了 HTTP 服务器的基本功能:包括定义服务器块、配置用于请求路由的位置、提供静态文件和控制访问、配置重定向、支持保持连接以及管理请求和响应头。
本节中的其他模块扩展了此功能,允许您针对各种场景和需求灵活配置和优化 HTTP 服务器。 如果禁用,Angie 发出的重定向将是相对的。 另请参阅 server_name_in_redirect 和 port_in_redirect 指令。 在 FreeBSD 和 Linux 上启用或禁用异步文件 I/O (AIO) 的使用: 在 FreeBSD 上,从 FreeBSD 4.3 开始可以使用 AIO。在 FreeBSD 11.0 之前,AIO 可以静态链接到内核中: 或作为内核可加载模块动态加载: 在 Linux 上,从内核版本 2.6.22 开始可以使用 AIO。此外,还需要启用 directio,否则读取将会阻塞: 在 Linux 上,:ref:directio 只能用于读取按 512 字节边界对齐的块(对于 XFS 为 4K)。文件的未对齐末尾以阻塞模式读取。对于字节范围请求和非从文件开头开始的 FLV 请求也是如此:在文件开头和末尾读取未对齐的数据将会阻塞。 当在 Linux 上同时启用 AIO 和 sendfile 时,对于大于或等于 directio 指令中指定大小的文件使用 AIO,而对于较小的文件或禁用 directio 时使用 sendfile: 最后,可以使用多线程读取和 发送 文件,而不会阻塞工作进程: 读取和发送文件操作被卸载到指定 池 的线程。如果省略池名称,则使用名为 "default" 的池。池名称也可以使用变量设置: 使用 目前,多线程仅与 epoll、kqueue 和 eventport 方法兼容。多线程发送文件仅在 Linux 上受支持。 另请参阅 sendfile 指令。 如果启用了 aio,指定是否将其用于写入文件。目前,这仅在使用 为指定的位置定义替换路径。例如,使用以下配置: 对于 path 值可以包含变量,但不包括 $document_root 和 $realpath_root。 如果在使用正则表达式定义的位置内使用 当位置匹配指令值的最后部分时: 最好使用 root 指令: 控制当前缀位置以斜杠结尾时的 重定向 行为: 在这里,对 值 允许在 HTTP/1.1 中禁用分块传输编码。当使用的软件尽管标准要求但不支持分块编码时,这可能会派上用场。 创建一个特殊的 在 ACME 模块中通过预定义的 在 Docker 模块中通过预定义的 通过 upstream_probe (PRO) 对代理服务器进行健康探测; 在流 Upstream 模块中使用 支持多个 在每个 使用多个 备注 这里允许使用与常规 在其他 请求处理阶段 操作的指令
(如 limit_req、auth_request、
try_files、图像过滤器、XSLT 等)
在这里不起作用。 设置读取客户端请求体的缓冲区大小。如果请求体大于缓冲区,则将整个请求体或仅其部分写入 临时文件。默认情况下,缓冲区大小等于两个内存页。在 x86、其他 32 位平台和 x86-64 上,这是 8K。在其他 64 位平台上,通常是 16K。 默认值 http, server, location 确定是否将整个客户端请求体保存到文件中。此指令可在调试期间使用,或在使用 $request_body_file 变量或 Perl 模块的 $r->request_body_file 方法时使用。 请求处理后不删除临时文件 允许删除请求处理后留下的临时文件 默认值 http, server, location 确定是否将整个客户端请求体保存在单个缓冲区中。建议在使用 $request_body 变量时使用此指令,以减少涉及的复制操作数量。 默认值 http, server, location 定义用于存储客户端请求体临时文件的目录。在指定目录下最多可以使用三级子目录层次结构。例如,在以下配置中 临时文件的路径可能如下所示: 定义读取客户端请求体的超时时间。超时仅针对两次连续读取操作之间的时间段设置,而不是针对整个请求体的传输。如果客户端在此时间内未传输任何内容,则请求将以 408 (Request Time-out) 错误终止。 设置读取客户端请求头的缓冲区大小。对于大多数请求,1K 字节的缓冲区就足够了。但是,如果请求包含长 cookie,或来自 WAP 客户端,则可能无法容纳在 1K 中。如果请求行或请求头字段无法容纳在此缓冲区中,则会分配由 large_client_header_buffers 指令配置的更大缓冲区。 定义读取客户端请求头的超时时间。如果客户端在此时间内未传输整个请求头,则请求将以 408 (Request Time-out) 错误终止。 设置客户端请求体的最大允许大小。如果请求中的大小超过配置的值,则向客户端返回 413 (Request Entity Too Large) 错误。请注意,浏览器无法正确显示此错误。 禁用检查客户端请求体大小 允许精确调整每个连接的内存分配。此指令对性能的影响很小,通常不应使用。默认情况下: 在 32 位平台上 在 64 位平台上 定义响应的默认 MIME 类型。文件扩展名到 MIME 类型的映射可以使用 types 指令设置。 在读取大于或等于指定大小的文件时,启用 或在 Linux 上使用 aio 时。 设置 directio 的对齐方式。在大多数情况下,512 字节对齐就足够了。但是,在 Linux 下使用 XFS 时,需要将其增加到 4K。 默认值 http, server, location 确定在打开文件时应如何处理符号链接: 允许路径中的符号链接且不进行检查。这是默认行为。 如果路径的任何组成部分是符号链接,则拒绝访问该文件。 如果路径的任何组成部分是符号链接,且该链接与其指向的对象具有不同的所有者,则拒绝访问该文件。 在检查符号链接时(参数 示例: 此指令仅在具有 警告 在不支持仅为搜索而打开目录的系统上,使用这些参数需要工作进程对所有被检查的目录具有读取权限。 备注 AutoIndex、Random Index 和 DAV 模块目前忽略此指令。 定义针对指定错误显示的 URI。uri 值可以使用变量。 示例: 这会导致内部重定向到指定的 uri,并将客户端请求方法更改为 "GET"(对于除 "GET" 和 "HEAD" 之外的所有方法)。 此外,可以使用类似 如果错误响应由代理服务器或 FastCGI/uwsgi/SCGI/gRPC 服务器处理,并且该服务器可能返回不同的响应代码(例如 200、302、401 或 404),则可以传递它返回的代码: 如果在内部重定向期间不需要更改 URI 和方法,可以将错误处理传递到命名的 备注 如果在处理 uri 期间发生错误,则会将最后发生的错误代码的响应返回给客户端。 也可以使用 URL 重定向进行错误处理: 在这种情况下,默认情况下会向客户端返回响应代码 302。它只能更改为重定向响应代码之一(301、302、303、307 和 308)。 启用或禁用为静态资源自动生成 提供配置文件上下文,在其中指定 HTTP 服务器指令。 指定如何将响应的修改时间与 响应始终被视为已修改 精确匹配 响应的修改时间小于或等于 控制 Angie 是否忽略具有无效名称的头字段。有效名称由英文字母、数字、连字符以及可能的下划线组成(由 underscores_in_headers 指令控制)。 如果在 server 级别指定该指令,则可以使用默认服务器的值。 指定给定的 由 error_page、index、random_index 和 try_files 指令重定向的请求; 由上游服务器的 由 SSI 模块的 由 rewrite 指令更改的请求。 示例: 由于 404 错误是在带有 这里,外部请求 备注 为了防止由于配置不正确而可能发生的循环,内部重定向的次数限制为十次。当达到此限制时,将返回 500 (Internal Server Error) 错误。在这种情况下,可以在错误日志中看到 禁用与行为异常的浏览器的保持连接。browser 参数指定将受影响的浏览器。 对所有浏览器启用保持连接 一旦收到 POST 请求,禁用与旧版本 MSIE 的保持连接 禁用与 macOS 和类 macOS 操作系统上的 Safari 和类 Safari 浏览器的保持连接 设置通过一个保持连接可以处理的最大请求数。在达到最大请求数后,连接将被关闭。 定期关闭连接对于释放每个连接的内存分配是必要的。因此,使用过高的最大请求数可能会导致过度的内存使用,不建议这样做。 限制通过一个保持连接处理请求的最长时间。达到此时间后,连接将在后续请求处理完成后关闭。 timeout 设置保持连接的客户端连接在服务器端保持打开的超时时间 禁用保持连接的客户端连接 第二个 可选 参数在响应中设置 设置用于读取大型客户端请求头的缓冲区的最大数量和大小。请求行不能超过一个缓冲区的大小,否则将向客户端返回 414 (Request-URI Too Large) 错误。请求头字段也不能超过一个缓冲区的大小,否则将向客户端返回 400 (Bad Request) 错误。缓冲区仅在需要时分配。默认情况下,缓冲区大小等于 8K 字节。如果在请求处理结束后连接转换为保持连接状态,这些缓冲区将被释放。 如果在 server 级别指定该指令,则可以使用默认服务器的值。 限制 location 内允许的 HTTP 方法。method 参数可以是以下之一: 备注 此示例中的限制适用于 除 限制向客户端传输响应的速率。速率以每秒字节数指定。零值禁用速率限制。限制是针对每个请求设置的,因此如果客户端同时打开两个连接,总速率将是指定限制的两倍。 参数值可以包含变量。在需要根据特定条件限制速率的情况下,这可能很有用: 速率限制也可以在 $limit_rate 变量中设置,但不建议使用此方法: 速率限制也可以在代理服务器响应的 设置初始数量,在此之后向客户端传输响应的速率将受到限制。参数值可以包含变量。 示例: 控制 Angie 如何关闭客户端连接。 Angie 将 等待 并 处理 来自客户端的额外数据,然后完全关闭连接,但仅当启发式方法表明客户端可能正在发送更多数据时。 Angie 将始终等待并处理额外的客户端数据。 Angie 不会等待更多数据,将立即关闭连接。此行为会破坏协议,在正常情况下不应使用。 要控制 HTTP/2 连接的关闭,必须在 server 级别指定该指令。 当 lingering_close 生效时,此指令指定 Angie 处理(读取并忽略)来自客户端的额外数据的最长时间。在此之后,连接将被关闭,即使还有更多数据。 当 lingering_close 生效时,此指令指定等待更多客户端数据到达的最长等待时间。如果在此时间内未收到数据,连接将被关闭。否则,数据将被读取并忽略,Angie 再次开始等待更多数据。"等待-读取-忽略"循环会重复,但不会超过 lingering_time 指令指定的时间。 在优雅关闭期间,客户端保持连接仅在空闲时间至少达到 备注 在 nginx 中,类似的指令称为 keepalive_min_timeout。 默认值 server 设置监听套接字的 address 和 port,或服务器接受请求的 UNIX 域套接字的路径。address 也可以是主机名,例如: IPv6 地址用方括号指定: UNIX 域套接字使用 可以同时指定 address 和 port,或仅指定 address 或仅指定 port。
当省略某些部分时,适用以下规则: 如果仅给出 address,则使用端口 80。 如果仅给出 port,
Angie 将监听所有可用的 IPv4(以及 IPv6,如果已启用)接口。
该端口的第一个 如果完全省略该指令,Angie 在以超级用户权限运行时使用 指定了此参数的服务器
将成为给定 address:port 对的默认服务器
(它们共同构成一个 监听套接字)。 如果没有带 表示在此监听套接字上接受的所有连接都应在 SSL 模式下工作。这允许为同时处理 HTTP 和 HTTPS 请求的服务器提供更 紧凑的配置。 配置端口接受 HTTP/2 连接。通常,为了使其工作,还应指定 自 1.2.0 版本弃用. 请改用 http2 指令。 配置端口接受 QUIC 连接。
要使用此选项,
Angie 必须启用并配置 HTTP3 模块。
设置 表示在此监听套接字上接受的所有连接都应使用 PROXY 协议。 为监听套接字设置路由表 FIB( 为监听套接字启用"TCP Fast Open",并限制尚未完成三次握手的连接队列的最大长度。 警告 除非服务器能够处理多次接收带有数据的相同 SYN 数据包,否则不要启用"TCP Fast Open"。 设置 为监听套接字设置接收缓冲区大小( 为监听套接字设置发送缓冲区大小( 为监听套接字设置接受过滤器的名称( 指示在 Linux 上使用延迟 指示为给定的 address:port 对进行单独的 确定(通过 指示为每个工作进程创建单独的监听套接字
(在 Linux 3.9+ 和 DragonFly BSD 上使用 警告 不当使用 启用通过 Multipath TCP (MPTCP) 接受连接,
自 Linux 内核版本 5.6 起支持。
此参数与 为监听套接字配置"TCP keepalive"行为。 如果省略此参数,则套接字将使用操作系统的设置 为套接字开启 为套接字关闭 某些操作系统支持使用 将空闲超时( 示例: 根据请求 URI 是否匹配任何匹配表达式来设置配置。 匹配是针对规范化的 URI 执行的,在解码以"%XX"形式编码的文本、解析对相对路径组件"."和".."的引用,以及可能将两个或多个相邻斜杠 压缩 为单个斜杠之后进行。 正则表达式使用前置修饰符指定: 不区分大小写的匹配 区分大小写的匹配 为了找到与请求匹配的 location,Angie 首先检查使用前缀字符串定义的 location(前缀 location)。在这些 location 中,选择并记住具有最长匹配前缀的 location。 备注 对于不区分大小写的操作系统(如 macOS),前缀字符串匹配不区分大小写。
但是,匹配仅限于单字节区域设置。 然后按照正则表达式在配置文件中出现的顺序检查正则表达式。在第一次匹配后停止搜索,并使用相应的配置。如果没有找到与正则表达式的匹配,则使用之前记住的前缀 location 的配置。 除了下面提到的一些例外情况, 正则表达式可以创建捕获组,这些捕获组稍后可以与其他指令一起使用。 如果最长匹配前缀 location 具有 此外,使用 示例: 备注 如果前缀 对于精确 URI 匹配的 location,不会应用重定向: 多个定义相同配置块的 假设前面示例中的配置 A、D 和 E 定义了相同的配置;您可以将它们组合成一个 命名的 警告 组合 备注 目前,组合 启用或禁用将未找到文件的错误记录到 error_log 中。 启用或禁用将子请求记录到 access_log 中。 设置允许的客户端请求头字段的最大数量。
如果超过此限制,将返回 限制字节范围请求中允许的最大范围数量。超过限制的请求将被视为未指定字节范围。默认情况下,范围数量不受限制。 完全禁用字节范围支持 启用或禁用将 URI 中两个或多个相邻斜杠压缩为单个斜杠。 请注意,压缩对于正确匹配前缀字符串和正则表达式位置至关重要。如果没有压缩,:samp://scripts/one.php 请求将不会匹配 并且可能被作为静态文件处理。因此它会被转换为 如果 URI 包含 base64 编码的名称,则可能需要关闭压缩,因为 base64 在内部使用 "/" 字符。但是,出于安全考虑,最好避免关闭压缩。 如果在 server 级别指定该指令,则可以使用默认服务器的值。 启用或禁用为状态大于 400 的 MSIE 客户端响应添加注释,以将响应大小增加到 512 字节。 启用或禁用为 MSIE 客户端发出刷新而不是重定向。 默认值 http, server, location 配置可以存储以下内容的缓存: 打开的文件描述符、它们的大小和修改时间; 目录存在性信息; 文件查找错误,例如"文件未找到"、"无读取权限"等。 错误缓存应通过 open_file_cache_errors 指令单独启用。 设置缓存中元素的最大数量;缓存溢出时,将删除最近最少使用 (LRU) 的元素 定义一个时间,如果在此时间内未访问元素,则将其从缓存中删除; 默认为 60 秒 禁用缓存 示例: 启用或禁用通过 open_file_cache 缓存文件查找错误。 设置在 open_file_cache 指令的 设置应验证 open_file_cache 元素的时间。 设置用于从磁盘读取响应的缓冲区数量和大小。 启用或禁用在 Angie 发出的 绝对 重定向中指定端口。 在重定向中使用主服务器名称由 server_name_in_redirect 指令控制。 如果可能,客户端数据的传输将被推迟,直到 Angie 至少有指定字节数的数据要发送。 禁用推迟数据传输 设置在处理文件时内核的预读取量。 在 Linux 上,使用 在 FreeBSD 上,使用 启用或禁用使用 error_page 指令进行多次重定向。此类重定向的次数是 有限的。 允许精确调整每个请求的内存分配。此指令对性能的影响很小,通常不应使用。 启用或禁用重置超时连接和使用非标准代码 444 关闭的连接。重置按如下方式执行。在关闭套接字之前,为其设置 备注 keep-alive 连接在超时时会正常关闭。 默认值 — http, server, location, upstream 配置用于将上游服务器名称解析为地址的名称服务器,例如: 地址可以指定为域名或 IP 地址,并可选端口。如果未指定端口,则使用端口 53。名称服务器以轮询方式查询。 备注 该指令值会被嵌套块继承,
并可在其中根据需要覆盖。
在单个块内,该指令只能指定一次。
如果重复指定,则最后的定义生效。 默认情况下,Angie 使用响应的 TTL 值缓存答案。可选的 可选 参数允许覆盖响应缓存的有效期 备注 如果未指定 默认情况下,Angie 在解析时会同时查找 IPv4 和 IPv6 地址。 禁用查找 IPv4 地址 禁用查找 IPv6 地址 可选 参数;
启用在指定区域中收集 DNS 服务器请求和响应指标
(/status/resolvers/<zone>) 小技巧 为防止 DNS 欺骗,建议在适当保护的可信本地网络中使用 DNS 服务器。 小技巧 在 Docker 中运行时,使用相应的内部 DNS 服务器地址,例如 设置名称解析的超时时间,例如: 设置请求的根目录。例如,使用以下配置 将发送 path 值可以包含变量,但 $document_root 和 $realpath_root 除外。 文件路径的构造仅仅是将 URI 添加到 root 指令的值。如果需要修改 URI,应使用 alias 指令。 如果所有 ( 如果该指令设置为非零值,Angie 将尝试通过使用 kqueue 方法的 设置向客户端传输响应的超时时间。超时仅在两次连续的写操作之间设置,而不是用于整个响应的传输。如果客户端在此时间内没有收到任何内容,连接将被关闭。 启用或禁用 aio 可用于为 在此配置中,:samp:sendfile() 使用 限制单次 设置虚拟服务器的配置。基于 IP(基于 IP 地址)和基于名称(基于 "Host" 请求头字段)的虚拟服务器之间没有明确的分隔。相反,:ref:listen 指令描述应该接受服务器连接的所有地址和端口,:ref:server_name 指令列出所有服务器名称。 Angie 如何处理请求 文档中提供了配置示例。 设置虚拟服务器的名称,例如: 第一个名称成为主服务器名称。 服务器名称可以包含星号("*")来替换名称的第一部分或最后部分: 这样的名称称为通配符名称。 上述提到的前两个名称可以合并为一个: 也可以在服务器名称中使用正则表达式,在名称前加上波浪号("~"): 正则表达式可以包含捕获,这些捕获可以在其他指令中使用: 正则表达式中的命名捕获会创建变量,这些变量可以在其他指令中使用: 备注 如果指令的参数设置为 $hostname,
则使用机器名称。 也可以指定空服务器名称: 按名称搜索虚拟服务器时,
如果名称匹配多个指定的变体
(例如,通配符名称和正则表达式都匹配),
将按以下优先级顺序选择第一个匹配的变体: 精确名称; 以星号开头的最长通配符名称,例如 以星号结尾的最长通配符名称,例如 第一个匹配的正则表达式(按配置文件中出现的顺序),
包括空名称。 警告 要在 TLS 中使用 启用或禁用在 Angie 发出的 绝对 重定向中使用由 server_name 指令指定的主服务器名称。 使用由 server_name 指令设置的主服务器名称 使用 "Host" 请求头字段中的名称。如果此字段不存在,则使用服务器的 IP 地址。 重定向中端口的使用由 port_in_redirect 指令控制。 设置服务器名称哈希表的桶大小。默认值取决于处理器缓存行的大小。有关设置哈希表的详细信息在 单独的文档 中提供。 设置服务器名称哈希表的最大大小。有关设置哈希表的详细信息在 单独的文档 中提供。 启用或禁用在错误页面和 在 Angie PRO 中,如果指令设置了一个 string,该字符串也可以包含变量,
错误页面和 分配一个共享内存区域用于收集
/status/http/location_zones/<zone> 和 /status/http/server_zones/<zone> 指标。 多个 使用单个 zone 值的语法
将当前上下文的所有指标合并到一个共享内存区域中: 替代语法允许设置以下参数: key 包含变量的字符串,其值决定区域中请求的分组。
所有在替换后产生相同值的请求
被分组在一起。如果替换产生空值,
则不更新指标。 zone 共享内存区域的名称。 number (可选) 用于收集指标的独立组的最大数量。
如果新的 key 值超过此限制,它们将被分组到 默认值为 1。 在以下示例中,
所有共享相同 因此,生成的指标在 API 输出中按各个主机分割。 默认值 http, server, location 设置用于存储子请求响应体的缓冲区大小。
默认情况下,缓冲区大小等于一个内存页。这是
备注 该指令仅适用于响应体保存在内存中的子请求。例如,这样的子请求由 SSI 创建。 启用或禁用 启用或禁用在 FreeBSD 上使用 在 Linux 和 FreeBSD 4.* 上,在一个数据包中发送响应头和文件的开头; 以完整数据包发送文件。 按指定顺序检查文件是否存在,并使用第一个找到的文件进行请求处理;处理在当前 location 的上下文中执行。文件的路径根据 file 参数按照 root 和 alias 指令构造。可以通过在名称末尾指定斜杠来检查目录是否存在,例如 例如: 最后一个参数可以是用于内部重定向的 URI、
对命名 应该注意的是,过度使用 因此,:samp:try_files 不应该用于复制
实际上是默认行为的行为,例如: 此外,:samp:try_files 不应该
仅用于在文件不存在时进行重定向。
原因是 首先,它检查每个文件是否存在,
这会增加系统负载。 其次,任何文件打开错误(例如 因此,在实践中,可能会遇到以下有问题的结构: 这里的问题是唯一的目的是重定向。
使用 相比之下,在以下示例中: 将文件扩展名映射到响应的 MIME 类型。扩展名不区分大小写。多个扩展名可以映射到一个类型,例如: Angie 随附了一个足够完整的映射表,位于 要使特定的 设置类型哈希表的桶大小。有关设置哈希表的详细信息,请参阅 单独讨论。 设置类型哈希表的最大大小。有关设置哈希表的详细信息,请参阅 单独讨论。 启用或禁用在客户端请求头字段中使用下划线。当禁用下划线的使用时,名称包含下划线的请求头字段将被标记为无效,并受 ignore_invalid_headers 指令的约束。 如果该指令在 server 级别指定,则可以使用默认服务器的值。 设置变量哈希表的桶大小。有关设置哈希表的详细信息,请参阅 单独讨论。 设置变量哈希表的最大大小。有关设置哈希表的详细信息,请参阅 单独讨论。 Angie 版本 请求行中的参数 name 请求行中的参数 二进制形式的客户端地址,对于 IPv4 地址,值的长度始终为 4 字节,对于 IPv6 地址则为 16 字节 发送给客户端的字节数,不包括响应头;此变量与 发送给客户端的字节数 连接序列号 通过一个连接发出的当前请求数 连接时间(以秒为单位),具有毫秒分辨率 与 $uri 相同 按以下优先顺序:请求行中的主机名,或 "Host" 请求头字段中的主机名,或与请求匹配的服务器名称 主机名 任意请求头字段;变量名的最后部分对应于转换为小写并将破折号替换为下划线的字段名称 如果连接在 SSL 模式下运行,则为 如果请求行有参数,则为 设置此变量可启用响应速率限制;参见 limit_rate 当前时间(以秒为单位),具有毫秒分辨率 工作进程的 PID 如果请求是流水线式的,则为 来自 PROXY 协议头的客户端地址 必须先通过在 listen 指令中设置 来自 PROXY 协议头的客户端端口 必须先通过在 listen 指令中设置 来自 PROXY 协议头的服务器地址 必须先通过在 listen 指令中设置 来自 PROXY 协议头的服务器端口 必须先通过在 listen 指令中设置 来自 PROXY 协议头的 TLV。name 可以是 TLV 类型名称或其数值。在后一种情况下,该值为十六进制,应以 SSL TLV 也可以通过 TLV 类型名称或其数值访问,两者都以 支持以下 TLV 类型名称: 支持以下 SSL TLV 类型名称: 此外,还支持以下特殊 SSL TLV 类型名称: 必须先通过在 listen 指令中设置 与 $args 相同 客户端地址 客户端端口 通过基本身份验证提供的用户名 完整的原始请求行 请求体 当请求体被读取到 内存缓冲区 时,该变量的值在由 proxy_pass、fastcgi_pass、uwsgi_pass 和 scgi_pass 指令处理的位置中*可用*。 包含请求体的临时文件名 在处理结束时,需要删除该文件。要始终将请求体写入文件,请启用 client_body_in_file_only。在代理请求或向 FastCGI/uwsgi/SCGI 服务器发送请求时传递临时文件名时,应分别使用 proxy_pass_request_body off、fastcgi_pass_request_body off、uwsgi_pass_request_body off 或 scgi_pass_request_body off 指令禁用请求体本身的传递。 如果请求已完成,则为 从 16 个随机字节生成的唯一请求标识符,以十六进制表示 请求长度(包括请求行、头和请求体) 请求方法,通常为 请求处理时间(以秒为单位),具有毫秒分辨率;从客户端读取第一个字节以来经过的时间 完整的原始请求 URI(带参数) 请求方案,"http" 或 "https" 任意响应头字段;变量名的最后部分对应于转换为小写并将破折号替换为下划线的字段名称 在响应末尾发送的任意字段;变量名的最后部分对应于转换为小写并将破折号替换为下划线的字段名称 接受请求的服务器地址 计算此变量的值通常需要一次系统调用。为避免系统调用,:ref:listen 指令必须指定地址并使用 接受请求的服务器名称 接受请求的服务器端口 请求协议,通常为 "HTTP/1.0"、"HTTP/1.1" 或 "HTTP/2.0" 响应状态 ISO 8601 标准格式的本地时间 通用日志格式的本地时间 关于客户端 TCP 连接的信息;在支持 请求中的当前 URI,已 规范化指令#
absolute_redirect#
aio#
location /video/ {
aio on;
output_buffers 1 64k;
}
options VFS_AIO
kldload aio
location /video/ {
aio on;
directio 512;
output_buffers 1 128k;
}
location /video/ {
sendfile on;
aio on;
directio 8m;
}
location /video/ {
sendfile on;
aio threads;
}
aio threads=pool$disk;
aio on 需要使用 --with-file-aio 配置参数进行构建。使用 aio threads 需要使用 --with-threads 参数进行构建。aio_write#
aio threads 时有效,并且仅限于写入包含从代理服务器接收的数据的临时文件。alias#
location /i/ {
alias /data/w3/images/;
}
/i/top.gif 的请求,将发送文件 /data/w3/images/top.gif。alias,则该正则表达式应包含捕获组,并且 alias 应引用这些捕获组,例如:location ~ ^/users/(.+\.(?:gif|jpe?g|png))$ {
alias /data/w3/images/$1;
}
location /images/ {
alias /data/w3/images/;
}
location /images/ {
root /data/w3;
}
auth_delay#
auto_redirect#
location /prefix/ {
auto_redirect on;
}
/prefix 的请求会导致重定向到 /prefix/。on 显式启用重定向,而 off 禁用它。当设置为 default 时,仅当位置使用 api、proxy_pass、fastcgi_pass、uwsgi_pass、scgi_pass、memcached_pass 或 grpc_pass 处理请求时才启用重定向。chunked_transfer_encoding#
client#
client 上下文,用于处理 Angie 自行执行的内部 HTTP 请求,而无需外部客户端参与。client 上下文将来自各种 Angie 模块的服务流量与用户流量隔离,允许对其进行额外控制。在此上下文中,只能定义命名位置(带有 @ 前缀);它们无法被外部 HTTP 请求访问,只能通过内部服务器机制以编程方式调用。client 上下文用于:location @acme 向证书颁发机构发送请求,可以使用 代理 模块的指令进行额外配置;location @docker_events 和 @docker_containers 向 Docker API 发送请求,可以使用 代理 模块的指令进行额外配置;remote_action 的 sticky learn 模式。client 块允许在每个块内为多个 location 块分组通用设置,这有助于避免配置重复。client 块中指定的指令仅由在其中显式声明的 location 块继承。特别是,这就是为什么它们不会影响隐式使用 client 块进行出站请求的其他模块的配置(例如 ACME 或 Docker)。client 块并继承设置的示例:client {
proxy_set_header Host docker.example.com;
proxy_set_header Authorization "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==";
location @docker_events {
}
location @docker_containers {
}
}
client {
proxy_method GET;
proxy_set_header Host backend.example.com;
proxy_set_header X-Real-IP $remote_addr;
location @health_check {
proxy_pass http://upstream-server/health;
}
}
location 块中相同的指令,
但实际上只有内容处理器
(如 js_content 或 autoindex)
和变量处理器(如 map),
以及自身生成请求的指令
(如 upstream_probe)才会生效。client_body_buffer_size#
client_body_in_file_only#
client_body_in_file_only on | clean | off;client_body_in_file_only off;oncleanclient_body_in_single_buffer#
client_body_in_single_buffer on | off;client_body_in_single_buffer off;client_body_temp_path#
client_body_temp_path path [level1 [level2 [level3]]];client_body_temp_path client_body_temp;
(路径取决于 构建选项 --http-client-body-temp-path)client_body_temp_path /spool/angie/client_temp 1 2;
/spool/angie/client_temp/7/45/00000123457
client_body_timeout#
client_header_buffer_size#
client_header_timeout#
client_max_body_size#
0connection_pool_size#
256 (字节)512 (字节)default_type#
directio#
O_DIRECT 标志(FreeBSD、Linux)、F_NOCACHE 标志(macOS)或 directio() 函数(Solaris)的使用。该指令会自动禁用给定请求的 sendfile 使用。建议用于提供大文件:directio 4m;
directio_alignment#
disable_symlinks#
disable_symlinks off;disable_symlinks on | if_not_owner [from=part];disable_symlinks off;offonif_not_ownerfrom=parton 和 if_not_owner),通常会检查所有路径组成部分。可以通过额外指定 from=part 参数来跳过对路径初始部分中符号链接的检查。在这种情况下,仅从指定初始部分之后的路径组成部分开始检查符号链接。如果该值不是被检查路径的初始部分,则会完整检查路径,就像根本没有指定此参数一样。如果该值与文件名完全匹配,则不检查符号链接。参数值中可以使用变量。disable_symlinks on from=$document_root;
openat() 和 fstatat() 接口的系统上可用。此类系统包括现代版本的 FreeBSD、Linux 和 Solaris。on 和 if_not_owner 参数会增加处理开销。error_page#
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
=response 的语法将响应代码更改为另一个代码,例如:error_page 404 =200 /empty.gif;
error_page 404 = /404.php;
location:location / {
error_page 404 = @fallback;
}
location @fallback {
proxy_pass http://backend;
}
error_page 403 http://example.com/forbidden.html;
error_page 404 =301 http://example.com/notfound.html;
etag#
ETag 响应头字段。http#
if_modified_since#
If-Modified-Since 请求头字段中的时间进行比较:offexactbeforeIf-Modified-Since 请求头字段中的时间ignore_invalid_headers#
internal#
location 只能用于内部请求。对于外部请求,将返回客户端错误 404 (Not Found)。内部请求包括以下几种:X-Accel-Redirect 响应头字段重定向的请求;include virtual 命令、Addition 模块指令以及 auth_request 和 mirror 指令形成的子请求;error_page 404 /404.html;
location = /404.html {
internal;
}
internal 指令的 location 上下文中返回的,外部请求可以重定向到不同的 location。这允许对外部和内部请求使用相同的前缀,但进行不同的处理,例如:location /path {
internal;
error_page 404 =@external;
proxy_pass https://internal;
}
location @external {
proxy_pass https://external;
}
GET /path 将被代理到
https://external/path,而相同的内部请求将被代理到
https://internal/path。rewrite or internal redirection cycle 消息。keepalive_disable#
nonemsie6safarikeepalive_requests#
keepalive_time#
keepalive_timeout#
0Keep‑Alive: timeout=time 头字段的值。这两个参数可以不同。Keep-Alive: timeout=time 头字段被 Mozilla 和 Konqueror 识别。MSIE 会在大约 60 秒后自行关闭保持连接。large_client_header_buffers#
limit_except#
GET、HEAD、POST、PUT、DELETE、MKCOL、COPY、MOVE、OPTIONS、PROPFIND、PROPPATCH、LOCK、UNLOCK 或 PATCH。允许 GET 方法也会使 HEAD 方法被允许。可以使用 Access 和 Auth Basic 模块指令限制对其他方法的访问:limit_except GET {
allow 192.168.1.0/32;
deny all;
}
GET 和 HEAD 之外 的所有方法。limit_rate#
map $slow $rate {
1 4k;
2 8k;
}
limit_rate $rate;
server {
if ($slow) {
set $limit_rate 4k;
}
}
X-Accel-Limit-Rate 头字段中设置。可以使用 proxy_ignore_headers、fastcgi_ignore_headers、uwsgi_ignore_headers 和 scgi_ignore_headers 指令禁用此功能。limit_rate_after#
location /flv/ {
flv;
limit_rate_after 500k;
limit_rate 50k;
}
lingering_close#
onalwaysofflingering_time#
lingering_timeout#
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;listen 127.0.0.1:8000;
listen 127.0.0.1;
listen 8000;
listen *:8000;
listen localhost:8000;
listen [::]:8000;
listen [::1];
unix: 前缀指定:listen unix:/var/run/angie.sock;
server 块
将成为具有不匹配 Host 头的请求的默认服务器。*:80,
否则使用 *:8000。default_serverdefault_server 参数的指令,
该监听套接字的默认服务器
将是配置中为该套接字提供服务的第一个服务器。sslhttp2ssl 参数,但 Angie 也可以配置为接受不带 SSL 的 HTTP/2 连接。quicquic 后,
您还可以指定 reuseport
以便可以使用多个工作进程。proxy_protocollisten 指令还可以指定几个特定于套接字相关系统调用的附加参数。这些参数可以在任何 listen 指令中指定,但对于给定的监听套接字只能指定一次:setfib=numberSO_SETFIB 选项)。目前仅在 FreeBSD 上有效。fastopen=numberbacklog=numberlisten() 调用中的 backlog 参数,
该参数限制待处理连接队列的最大长度。默认情况下,
在 FreeBSD、DragonFly BSD 和 macOS 上 backlog 设置为 -1,
在其他平台上设置为 511。rcvbuf=sizeSO_RCVBUF 选项)。sndbuf=sizeSO_SNDBUF 选项)。accept_filter=filterSO_ACCEPTFILTER 选项),
该过滤器在将传入连接传递给 accept() 之前对其进行过滤。
这仅在 FreeBSD 和 NetBSD 5.0+ 上有效。
可能的值为 dataready 和 httpready。deferredaccept()
(TCP_DEFER_ACCEPT 套接字选项)。bindbind() 调用。
这很有用,因为如果有多个具有相同端口但不同地址的 listen
指令,并且其中一个 listen 指令监听给定 port
的所有地址(*:port),Angie 将只 bind() 到
*:port。应该注意的是,在这种情况下将进行 getsockname()
系统调用以确定接受连接的地址。如果使用了 setfib、fastopen、
backlog、rcvbuf、sndbuf、accept_filter、
deferred、ipv6only、reuseport 或 so_keepalive
参数,那么对于给定的 address:port 对将始终进行单独的 bind() 调用。ipv6only=on | offIPV6_V6ONLY 套接字选项)
监听通配符地址 [::] 的 IPv6 套接字是否只接受
IPv6 连接或同时接受 IPv6 和 IPv4 连接。此参数
默认开启。它只能在启动时设置一次。reuseportSO_REUSEPORT 套接字选项,
或在 FreeBSD 12+ 上使用 SO_REUSEPORT_LB),
允许内核在工作进程之间分配传入连接。目前仅在 Linux 3.9+、
DragonFly BSD 和 FreeBSD 12+ 上有效。reuseport 参数
可能会带来安全隐患。multipathquic 不兼容。so_keepalive=on | off | [keepidle]:[keepintvl]:[keepcnt]''onSO_KEEPALIVE 选项offSO_KEEPALIVE 选项TCP_KEEPIDLE、TCP_KEEPINTVL 和
TCP_KEEPCNT 套接字选项在每个套接字的基础上设置 TCP keepalive 参数。在这些系统上,可以使用
keepidle、keepintvl 和 keepcnt 参数进行配置。可以省略一个或两个
参数,在这种情况下,相应套接字选项的系统默认设置将生效。例如,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 可以由前缀字符串定义,也可以由正则表达式定义。~*~location 块可以嵌套。^~ 修饰符,则不检查正则表达式。= 修饰符,可以定义 URI 和 location 的精确匹配。如果找到精确匹配,则搜索终止。例如,如果 / 请求频繁发生,定义 location =/ 将加快这些请求的处理速度,因为搜索在第一次比较后终止。这样的 location 不能包含嵌套的 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。location /user/ {
proxy_pass http://user.example.com;
}
location =/user {
proxy_pass http://login.example.com;
}
@ 前缀定义了一个 命名 location。此类 location 不用于常规请求处理,
而是仅用于请求重定向。
它们不能嵌套,也不能包含嵌套的 location。组合位置#
location 上下文可以通过在单个 location 中列出所有匹配表达式并使用单个配置块来压缩。这称为*组合* location。location:location =/
^~/images/
~*\.(gif|jpg|jpeg)$ {
# 通用配置
}
location 也可以是组合的一部分:location =/
@named_combined {
#...
}
location 的匹配表达式修饰符和表达式本身之间不能有空格。
正确形式:location ~*/match(ing|es|er)$ ...。location 不能**直接**包含设置了 URI 的 proxy_pass 指令,也不能包含 api 或 alias。
但是,这些指令可以在嵌套于组合位置内的位置中使用。log_not_found#
log_subrequest#
max_headers#
400 (Bad Request) 错误。max_ranges#
0merge_slashes#
location /scripts/ { }
/scripts/one.php。msie_padding#
msie_refresh#
open_file_cache#
open_file_cache off;open_file_cache max=N [inactive=time];open_file_cache off;maxinactiveoffopen_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_min_uses#
inactive 参数配置的期间内,文件描述符在缓存中保持打开所需的最小文件访问次数。open_file_cache_valid#
output_buffers#
port_in_redirect#
postpone_output#
0read_ahead#
posix_fadvise(0, 0, 0, POSIX_FADV_SEQUENTIAL) 系统调用,因此 size 参数会被忽略。fcntl(O_READAHEAD, size ) 系统调用,该调用从 FreeBSD 9.0-CURRENT 开始支持。recursive_error_pages#
request_pool_size#
reset_timedout_connection#
SO_LINGER 选项,超时值为 0。当套接字关闭时,TCP RST 被发送到客户端,并释放与此套接字关联的所有内存。这有助于避免长时间保持已关闭的套接字处于 FIN_WAIT1 状态且缓冲区已满。resolver#
resolver address ... [valid=time] [ipv4=on | off] [ipv6=on | off] [status_zone=zone];resolver 127.0.0.53 [::1]:5353;
valid 参数允许覆盖此行为:validresolver 127.0.0.53 [::1]:5353 valid=30s;
resolver 指令且不执行动态 DNS 查询(例如,在 代理 中使用固定名称而不使用变量时),则不需要指定解析器:名称将在启动时使用系统解析器进行解析。ipv4=offipv6=offstatus_zone127.0.0.11。resolver_timeout#
resolver_timeout 5s;
root#
location /i/ {
root /data/w3;
}
/data/w3/i/top.gif 文件来响应 /i/top.gif 请求。satisfy#
all) 或至少一个 (any) Access、Auth Basic 或 Auth Request 模块允许访问,则允许访问。location / {
satisfy any;
allow 192.168.1.0/32;
deny all;
auth_basic "closed site";
auth_basic_user_file conf/htpasswd;
}
send_lowat#
NOTE_LOWAT 标志或 SO_SNDLOWAT 套接字选项来最小化客户端套接字上的发送操作次数。在这两种情况下都使用指定的大小。send_timeout#
sendfile#
sendfile() 的使用。sendfile() 预加载数据:location /video/ {
sendfile on;
tcp_nopush on;
aio on;
}
SF_NODISKIO 标志调用,这使其不会在磁盘 I/O 上阻塞,而是报告数据不在内存中。然后 Angie 通过读取一个字节来启动异步数据加载。在第一次读取时,FreeBSD 内核将文件的前 128K 字节加载到内存中,但后续读取将仅以 16K 块加载数据。这可以使用 read_ahead 指令更改。sendfile_max_chunk#
sendfile() 调用中可以传输的数据量。如果没有限制,一个快速连接可能会完全占用工作进程。server#
server_name#
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;
}
}
server {
server_name www.example.com "";
}
*.example.com;mail.*;server_name,
需要 TLS 连接终止。
此指令匹配 HTTP 请求中的 Host,
因此必须完成握手并解密连接。server_name_in_redirect#
onoffserver_names_hash_bucket_size#
server_names_hash_max_size#
server_tokens#
Server 响应头字段中显示 Angie 版本。
build 参数启用显示构建名称,
该名称由相应的 configure 参数设置,
与版本一起显示。Server 响应头字段
将使用该字符串的变量插值后的值
来代替服务器名称、版本和构建名称。
空 string 将禁用 Server 字段的显示。status_zone#
server 上下文
可以共享同一个区域进行数据收集;
特殊值 off
在嵌套的 location 块中禁用数据收集。server {
listen 80;
server_name *.example.com;
status_zone single;
# ...
}
zone 下。$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;
}
}
subrequest_output_buffer_size#
subrequest_output_buffer_size size;subrequest_output_buffer_size 4k | 8k;4K 或 8K,取决于平台。它可以设置得更小。tcp_nodelay#
TCP_NODELAY 选项的使用。当连接转换到保持活动状态时启用该选项。此外,它在 SSL 连接、无缓冲代理和 WebSocket 代理 中也被启用。tcp_nopush#
TCP_NOPUSH 套接字选项或在 Linux 上使用 TCP_CORK 套接字选项。这些选项仅在使用 sendfile 时启用。启用该选项允许try_files#
$uri/。如果没有找到任何文件,则进行内部重定向到最后一个参数中指定的 uri。location /images/ {
try_files $uri /images/default.gif;
}
location = /images/default.gif {
expires 30s;
}
location 的引用(例如 @drupal)、
或以 =code 形式的响应码(例如 =404):location / {
try_files $uri $uri/index.html $uri.html =404;
}
try_files 指令
会增加系统调用的数量,
这可能会对性能产生负面影响。location /bad_pattern {
# try_files $uri $uri/ =404; # 不推荐!
}
try_files 指令有两个特点:打开文件过多、
权限错误)也被视为文件不存在并触发回退
到备用处理程序,这可能会用成功响应掩盖 5xx 错误
并导致错误的缓存。location / {
try_files $uri $uri/ @drupal; # 不推荐!
}
try_files 会导致上述缺点,
但没有任何好处,
因为不需要检查文件是否存在。
正确的解决方案是使用 error_page 指令,
它没有这些缺点: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 文件是否存在;
这里使用 try_files 是合理的。代理到 Mongrel 时的使用示例:
location / {
try_files /system/maintenance.html
$uri $uri/index.html $uri.html
@mongrel;
}
location @mongrel {
proxy_pass http://mongrel;
}
与 Drupal/FastCGI 一起使用的示例:
location / {
error_page 404 = @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 / {
error_page 404 = @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 {
application/octet-stream bin exe dll;
application/octet-stream deb;
application/octet-stream dmg;
}
conf/mime.types 文件中。location 对所有响应返回 "application/octet-stream" MIME 类型,可以使用以下配置:location /download/ {
types { }
default_type application/octet-stream;
}
types_hash_bucket_size#
types_hash_max_size#
underscores_in_headers#
variables_hash_bucket_size#
variables_hash_max_size#
内置变量#
http_core 模块支持与 Apache Server 变量名称匹配的内置变量。首先,这些是表示客户端请求头字段的变量,例如 $http_user_agent、$http_cookie 等。此外,还有其他变量:$angie_version#$arg_<name>#$args#$binary_remote_addr#$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#$document_uri#$host#$hostname#$http_<name>#$https#on,否则为空字符串$is_args#?,否则为空字符串$limit_rate#$msec#$pid#$pipe#p,否则为 .$proxy_protocol_addr#proxy_protocol 参数来启用 PROXY 协议。$proxy_protocol_port#proxy_protocol 参数来启用 PROXY 协议。$proxy_protocol_server_addr#proxy_protocol 参数来启用 PROXY 协议。$proxy_protocol_server_port#proxy_protocol 参数来启用 PROXY 协议。$proxy_protocol_tlv_<name>#0x 为前缀:$proxy_protocol_tlv_alpn
$proxy_protocol_tlv_0x01
ssl_ 为前缀:$proxy_protocol_tlv_ssl_version
$proxy_protocol_tlv_ssl_0x21
alpn (0x01) - 连接上使用的上层协议authority (0x02) - 客户端传递的主机名值unique_id (0x05) - 唯一连接 IDnetns (0x30) - 命名空间的名称ssl (0x20) - 二进制 SSL TLV 结构ssl_version (0x21) - 客户端连接中使用的 SSL 版本ssl_cn (0x22) - SSL 证书通用名称ssl_cipher (0x23) - 使用的密码名称ssl_sig_alg (0x24) - 用于签署证书的算法ssl_key_alg (0x25) - 公钥算法ssl_verify - 客户端 SSL 证书验证结果:如果客户端提供了证书并且验证成功,则为 0,否则为非零值proxy_protocol 参数来启用 PROXY 协议。$query_string#$realpath_root#$remote_addr#$remote_port#$remote_user#$request#$request_body#$request_body_file#$request_completion#OK,否则为空字符串$request_filename#$request_id#$request_length#$request_method#GET 或 POST$request_time#$request_uri#$scheme#$sent_http_<name>#$sent_trailer_<name>#$server_addr#bind 参数。$server_name#$server_port#$server_protocol#$status#$time_iso8601#$time_local#$tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, $tcpinfo_rcv_space#TCP_INFO 套接字选项的系统上可用$uri#$uri 的值可能在请求处理过程中发生变化,例如在执行内部重定向时,或在使用索引文件时。