HTTP模块#
核心HTTP模块实现了HTTP服务器的基本功能:包括定义服务器块、配置请求路由的位置、提供静态文件和控制访问、配置重定向、支持keep-alive连接以及管理请求和响应头。
本节中的其他模块扩展了此功能,使您能够灵活配置和优化HTTP服务器以满足各种场景和要求。 如果禁用,Angie发出的重定向将是相对的。 另请参阅 server_name_in_redirect 和 port_in_redirect 指令。 启用或禁用在FreeBSD和Linux上使用异步文件I/O(AIO): 在FreeBSD上,AIO可以从FreeBSD 4.3开始使用。在FreeBSD 11.0之前,AIO可以静态链接到内核: 或者作为可加载内核模块动态加载: 在Linux上,AIO可以从内核版本2.6.22开始使用。此外,必须启用 directio,否则读取将是阻塞的: 在Linux上,directio 只能用于读取在512字节边界(或XFS的4K)对齐的块。文件的未对齐结尾在阻塞模式下读取。对字节范围请求和从文件开头以外的位置的FLV请求也是如此:在文件的开头和结尾读取未对齐数据将是阻塞的。 当在Linux上启用AIO和 sendfile 时,AIO用于大于或等于 directio 指令指定的大小的文件,而 sendfile 用于较小的文件或当 directio 被禁用时: 最后,文件可以使用多线程读取和 发送,而不会阻塞工作进程: 读取和发送文件操作被卸载到指定的 pool 的线程中。如果省略池名称,则使用名为"default"的池。池名称也可以通过变量设置: 默认情况下,多线程被禁用,必须通过 另请参阅 sendfile 指令。 如果启用了 aio,则指定其是否用于写入文件。目前,这仅在使用 定义指定位置的替代路径。例如,以下配置: 在请求 path 值可以包含变量,除了 $document_root 和 $realpath_root。 如果在使用正则表达式定义的location内使用 当location匹配指令值的最后一部分时: 最好使用 root 指令: 控制当前缀location以斜杠结尾时的 重定向 行为: 在这里,请求 值 允许在HTTP/1.1中禁用分块传输编码。当使用不支持分块编码的软件时,这可能会很有用,尽管标准要求如此。 创建一个特殊的 在 ACME 模块中通过预定义的 在 Docker 模块中通过预定义的 通过 upstream_probe (PRO) 对代理服务器进行健康检查; 在 stream 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(请求超时)错误终止。 设置用于读取客户端请求头的缓冲区大小。对于大多数请求,1K 字节的缓冲区就足够了。然而,如果请求包含长 cookie,或者来自 WAP 客户端,则可能无法适应 1K。如果请求行或请求头字段无法放入此缓冲区,则会分配通过 large_client_header_buffers 指令配置的更大缓冲区。 定义读取客户端请求头的超时。如果客户端在此时间内未传输整个头,则请求将以 408(请求超时)错误终止。 设置客户端请求体的最大允许大小。如果请求中的大小超过配置值,则会返回 413(请求实体太大)错误给客户端。请注意,浏览器无法正确显示此错误。 禁用对客户端请求体大小的检查 允许准确调整每个连接的内存分配。该指令对性能的影响最小,通常不应使用。默认情况下: 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 指令更改的请求。 示例: 备注 每个请求的内部重定向限制为 10 次,以防止在不正确的配置中发生请求处理循环。如果达到此限制,将返回错误 500(内部服务器错误)。在这种情况下,可以在错误日志中看到 禁用与行为异常的浏览器的长连接。browser 参数指定哪些浏览器将受到影响。 启用与所有浏览器的长连接 禁用与旧版本 MSIE 的长连接,一旦收到 POST 请求 禁用与 macOS 和类似操作系统上的 Safari 和类似浏览器的长连接 设置通过一个长连接可以服务的最大请求数。在达到最大请求数后,连接将关闭。 定期关闭连接是必要的,以释放每个连接的内存分配。因此,使用过高的最大请求数可能导致过度的内存使用,不建议这样做。 限制通过一个长连接处理请求的最长时间。在达到此时间后,连接将在后续请求处理后关闭。 timeout 设置保持活动的客户端连接在服务器端保持打开状态的超时时间 禁用保持活动的客户端连接 第二个 可选 参数设置响应中 设置用于读取大型客户端请求头的缓冲区的最大数量和大小。请求行不能超过一个缓冲区的大小,否则将向客户端返回 414(Request-URI Too Large)错误。请求头字段也不能超过一个缓冲区的大小,否则将向客户端返回 400(Bad Request)错误。缓冲区仅按需分配。默认情况下,缓冲区大小等于 8K 字节。如果在请求处理结束后连接转换为保持活动状态,这些缓冲区将被释放。 如果指令在 server 级别指定,可以使用默认服务器的值。 限制位置内允许的 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 上使用 警告 不当使用 启用通过 多路径 TCP
<https://en.wikipedia.org/wiki/Multipath_TCP>`__(MPTCP)接受连接,
自 Linux 内核版本 5.6 起支持。
此参数与 :samp:`quic 不兼容。 为监听套接字配置"TCP keepalive"行为。 如果省略此参数,则套接字将使用操作系统的设置 为套接字开启 为套接字关闭 某些操作系统支持使用 将把空闲超时( 示例: 根据请求 URI 是否与任何匹配表达式匹配来设置配置。 匹配是在标准化 URI 上执行的,在解码以 "%XX" 形式编码的文本、解析相对路径组件 "." 和 ".." 的引用以及可能的 压缩 两个或多个相邻斜杠为单个斜杠后进行。 location 可以通过前缀字符串或正则表达式定义。 正则表达式通过前置修饰符指定: 不区分大小写的匹配 区分大小写的匹配 为了找到与请求匹配的位置,Angie 首先检查使用前缀字符串定义的位置(前缀位置)。在它们中,选择匹配前缀最长的位置并记住。 备注 对于诸如 macOS 之类的不区分大小写的操作系统,前缀字符串匹配是不区分大小写的。然而,匹配仅限于单字节区域设置。 然后按照正则表达式在配置文件中出现的顺序检查正则表达式。搜索在第一次匹配后停止,并使用相应的配置。如果没有找到与正则表达式的匹配,则使用之前记住的前缀位置的配置。 除了下面提到的一些例外情况外, 正则表达式可以创建捕获组,稍后可以与其他指令一起使用。 如果匹配前缀最长的位置具有 此外,使用 示例: 一个 一个 一个 一个 一个 备注 如果前缀 对于精确 URI 匹配的 location,不应用重定向: 多个定义相同配置块的 假设前面的示例中配置 A、D 和 E 定义相同的配置;您可以将它们组合成一个 命名的 警告 组合 备注 目前,组合 启用或禁用将未找到文件的错误记录到 error_log。 启用或禁用将子请求记录到 access_log。 设置允许的客户端请求头字段的最大数量。
如果超过此限制,将返回 限制字节范围请求中允许的最大范围数量。超出限制的请求将被处理为没有指定字节范围。默认情况下,范围数量没有限制。 完全禁用字节范围支持 启用或禁用将URI中两个或多个相邻的斜杠压缩为一个斜杠。 请注意,压缩对于前缀字符串和正则表达式位置的正确匹配至关重要。如果没有它, 并可能被处理为静态文件。因此,它会被转换为 如果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至少有 size 字节的数据可发送。 禁用推迟数据传输 设置内核在处理文件时的预读量。 在Linux上,使用 在FreeBSD上,使用自FreeBSD 9.0-CURRENT以来支持的 启用或禁用使用 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服务器地址,例如 为名称解析设置超时时间,例如: 为请求设置根目录。例如,使用以下配置 路径`值可以包含变量,除了 :ref:`$document_root <v_document_root> 和 $realpath_root。 文件的路径仅通过将URI添加到root指令的值来构造。如果URI需要被修改,则应使用 alias 指令。 如果所有( 如果指令设置为非零值,Angie将尝试通过使用 kqueue 方法的 设置向客户端传输响应的超时时间。超时仅在两个连续的写操作之间设置,而不是对整个响应的传输。如果客户端在此时间内没有接收到任何内容,连接将被关闭。 启用或禁用 aio 可用于预加载 在此配置中, 限制可以在单个 设置虚拟服务器的配置。没有明确区分基于IP(基于IP地址)和基于名称(基于"Host"请求头字段)的虚拟服务器。相反,listen 指令描述了应该接受服务器连接的所有地址和端口,而 server_name 指令列出了所有服务器名称。 示例配置在 Angie如何处理请求 文档中提供。 设置虚拟服务器的名称,例如: 第一个名称成为主要服务器名称。 服务器名称可以包含一个星号("*")以替代名称的第一部分或最后一部分: 这样的名称称为通配符名称。 上述名称中的前两个可以合并为一个: 也可以在服务器名称中使用正则表达式,在名称前加上波浪号("~"): 正则表达式可以包含捕获,稍后可以在其他指令中使用: 正则表达式中的命名捕获组创建变量,稍后可以在其他指令中使用: 备注 如果指令设置为 $hostname,将使用Web服务器的主机名。 您还可以指定空服务器名称( 在按名称搜索虚拟服务器时,如果多个选项匹配(例如,通配符和正则表达式),将按照以下优先级顺序选择第一个匹配的选项: 精确名称; 以通配符开头的最长名称,例如 以通配符结尾的最长名称,例如 第一个匹配的正则表达式(按配置中出现的顺序),包括空名称。 警告 要使 启用或禁用在Angie发出的 绝对重定向 中使用由 server_name 指令指定的主要服务器名称。 使用由 server_name 指令指定的主要服务器名称 使用"Host"请求头字段中的名称。如果该字段不存在,则使用服务器的IP地址。 重定向中使用端口的方式由 port_in_redirect 指令控制。 设置服务器名称哈希表的桶大小。默认值取决于处理器缓存行的大小。有关设置哈希表的详细信息,请参见单独的 文档。 设置服务器名称哈希表的最大大小。有关设置哈希表的详细信息,请参见单独的 文档。 启用或禁用在错误页面和 Added in version 1.1.0: PRO 在 Angie PRO 中,如果指令设置为 字符串,该字符串也可以包含变量,错误页面和 分配一个共享内存区域以收集 /status/http/location_zones/<zone> 和 /status/http/server_zones/<zone> 的指标。 多个 单值 区域 语法将当前上下文的所有指标合并到一个共享内存区域中: 替代语法允许设置以下参数: 键 一个包含变量的字符串,其值决定了请求在区域内的分组。所有在替换后产生相同值的请求都会被分到同一组。如果替换产生空值,则不会更新指标。 区域 共享内存区域的名称。 数量 (可选) 收集指标的最大分组数。如果新的 键 值超过此限制,则会在 默认值为 1。 在以下示例中,所有共享相同 因此,生成的指标在 API 输出中在各个主机之间分开。 默认 http, server, location 设置用于存储子请求响应体的缓冲区大小。默认情况下,缓冲区大小等于一个内存页面。这是 备注 此指令仅适用于响应体存储在内存中的子请求。例如,这种子请求由 SSI 创建。 启用或禁用 启用或禁用 FreeBSD 上的 在 Linux 和 FreeBSD 4.* 上将响应头和文件开头一起发送在一个数据包中; 以完整数据包发送文件。 按指定顺序检查文件的存在性,并使用第一个找到的文件进行请求处理;处理在当前上下文中进行。文件路径根据 root 和 alias 指令从文件参数构建。可以通过在名称末尾指定斜杠(例如 最后一个参数也可以指向命名 在以下示例中, 在这里, 将文件名扩展名映射到响应的 MIME 类型。扩展名不区分大小写。多个扩展名可以映射到同一类型,例如: 一个相对完整的映射表与 Angie 一起分发,存放在 要使特定位置对所有响应返回 "application/octet-stream" MIME 类型,可以使用以下配置: 设置类型哈希表的桶大小。有关设置哈希表的详细信息在 单独讨论。 设置类型哈希表的最大大小。有关设置哈希表的详细信息在 单独讨论。 启用或禁用在客户端请求头字段中使用下划线。当禁用下划线使用时,名称中包含下划线的请求头字段被标记为无效,并受到 ignore_invalid_headers 指令的约束。 如果该指令在 server 级别指定,则可以使用默认服务器的值。 设置变量哈希表的桶大小。有关设置哈希表的详细信息在 单独讨论。 设置变量哈希表的最大大小。有关设置哈希表的详细信息在 单独讨论。 Angie 版本 请求行中的参数 name 请求行中的参数 以二进制形式表示的客户端地址,IPv4 地址的值长度始终为 4 字节,IPv6 地址为 16 字节 发送到客户端的字节数,不包括响应头;该变量与 Apache 模块 发送到客户端的字节数 连接序列号 通过连接发出的当前请求数量 连接时间(以秒为单位,精确到毫秒) 与 $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" 任意响应头字段;变量名的最后部分对应转换为小写、用下划线替代破折号的字段名 在响应末尾发送的任意字段;变量名的最后部分对应转换为小写、用下划线替代破折号的字段名 接受请求的服务器的地址。 计算该变量的值通常需要一个系统调用。为避免系统调用,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;
--with-threads
配置参数启用。目前,多线程仅与 epoll、kqueue 和 eventport 方法兼容。多线程发送文件仅在Linux上支持。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
时,仅在location处理带有 api、proxy_pass、fastcgi_pass、uwsgi_pass、scgi_pass、memcached_pass 或 grpc_pass 的请求时,才启用重定向。chunked_transfer_encoding#
client#
client
上下文,用于处理Angie自身执行的内部HTTP请求,无需外部客户端参与。client
上下文将各种Angie模块的服务流量与用户流量隔离,允许对其进行额外控制。
在此上下文中,只能定义命名的 location`(带有 :samp:`@
前缀);
它们不能被外部HTTP请求访问,只能通过内部服务器机制以编程方式调用。client
上下文用于:location @acme
向证书颁发机构发送请求,
可以使用 Proxy 模块的指令进行额外配置;location @docker_events
和 @docker_containers
向Docker API发送请求,
可以使用 Proxy 模块的指令进行额外配置;remote_action
的 sticky learn 模式。client
上下文。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;
on
clean
client_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#
0
connection_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;
off
on
if_not_owner
from=
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
请求头字段中的时间进行比较:off
exact
before
If-Modified-Since
请求头字段中的时间ignore_invalid_headers#
internal#
location
只能用于内部请求。对于外部请求,将返回客户端错误 404(未找到)。内部请求包括:X-Accel-Redirect
响应头字段重定向的请求;include virtual
命令、Addition 模块指令以及 auth_request 和 mirror 指令形成的子请求;error_page 404 /404.html;
location = /404.html {
internal;
}
rewrite or internal redirection cycle
消息。keepalive_disable#
none
msie6
safari
keepalive_requests#
keepalive_time#
keepalive_timeout#
0
Keep‑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#
on
always
off
lingering_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
]:[samp:keepintvl]:[samp:keepcnt]];listen
port [default_server
] [ssl
] [http2 | quic
] [proxy_protocol
] [setfib=
number] [fastopen=
number] [backlog=
number] [rcvbuf=
size] [sndbuf=
size] [accept_filter=
filter] [deferred
] [bind
] [ipv6only=
on
| off
] [reuseport
] [so_keepalive=
on|off|[keepidle
]:[samp:keepintvl]:[samp:keepcnt]];listen
unix:path [default_server
] [ssl
] [http2 | quic
] [proxy_protocol
] [backlog=
number] [rcvbuf=
size] [sndbuf=
size] [accept_filter=
filter] [deferred
] [bind
] [so_keepalive=
on|off|[keepidle
]:[samp:keepintvl]:[samp:keepcnt]];listen *:80
| *:8000;
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_server
default_server
参数的指令,
监听套接字的默认服务器将是配置中为此套接字提供服务的第一个服务器。ssl
http2
ssl
参数,但 Angie 也可以配置为接受不带 SSL 的 HTTP/2 连接。quic
quic
后,
您还可以指定 reuseport
以便可以使用多个工作进程。proxy_protocol
listen
指令还可以指定几个特定于套接字相关系统调用的附加参数。这些参数可以在任何 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
。deferred
accept()`(:samp:`TCP_DEFER_ACCEPT
套接字选项)。bind
bind()
调用。
这很有用,因为如果有几个具有相同端口但不同地址的 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
| off
IPV6_V6ONLY
套接字选项)
监听通配符地址 [::] 的 IPv6 套接字是否只接受
IPv6 连接或同时接受 IPv6 和 IPv4 连接。此参数
默认开启。只能在启动时设置一次。reuseport
SO_REUSEPORT
套接字选项,
或在 FreeBSD 12+ 上使用 SO_REUSEPORT_LB
),
允许内核在工作进程之间分发传入连接。目前仅在 Linux 3.9+、DragonFly BSD 和
FreeBSD 12+ 上有效。reuseport
参数
可能会带来安全隐患。multipath
so_keepalive=on
| off
| [keepidle
]:[samp:keepintvl]:[samp:keepcnt]''
on
SO_KEEPALIVE
选项off
SO_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
块可以嵌套。^~
修饰符,则不检查正则表达式。=
修饰符,可以定义 URI 和位置的精确匹配。如果找到精确匹配,搜索终止。例如,如果 /
请求频繁发生,定义 location =/
将加快这些请求的处理速度,因为搜索在第一次比较后终止。这样的位置不能包含嵌套位置,因为它定义了精确匹配。location =/ {
#configuration A
}
location / {
#configuration B
}
location /documents/ {
#configuration C
}
location ^~/images/ {
#configuration D
}
location ~*\.(gif|jpg|jpeg)$ {
#configuration E
}
/
请求将匹配配置 A,/index.html
请求将匹配配置 B,/documents/document.html
请求将匹配配置 C,/images/1.gif
请求将匹配配置 D,/documents/1.jpg
请求将匹配配置 E。location
以斜杠字符结尾,并且 auto_redirect 已启用,则会发生以下情况:
当请求到达的 URI 没有尾部斜杠但其他方面完全匹配前缀时,将返回永久 301 代码重定向,指向附加了斜杠的请求 URI。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
不能 立即 包含 proxy_pass
和类似的带有 URI 设置的指令,也不能包含 api
或 alias
。然而,这些指令可以通过嵌套在组合位置中的位置使用。log_not_found#
log_subrequest#
max_headers#
400 (Bad Request)
错误。max_ranges#
0
merge_slashes#
//scripts/one.php
请求将不会匹配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;
max
inactive
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_min_uses#
inactive
参数配置的期间内,文件描述符保持在缓存中打开所需的最小文件访问次数。open_file_cache_valid#
output_buffers#
port_in_redirect#
postpone_output#
0
read_ahead#
posix_fadvise(0, 0, 0, POSIX_FADV_SEQUENTIAL)
系统调用,因此大小参数被忽略。fcntl(O_READAHEAD,
size ) 系统调用。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
resolver 127.0.0.53 [::1]:5353 valid=30s;
ipv4=off
ipv6=off
status_zone
127.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
):ref:Access <http_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;
}
sendfile()
被调用时带有 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一起使用,您需要终止TLS连接。该指令匹配HTTP请求中的 Host
,因此握手必须完成并且连接被解密。server_name_in_redirect#
on
off
server_names_hash_bucket_size#
server_names_hash_max_size#
server_tokens#
Server
响应头字段中发出 Angie 版本。build
参数启用发出构建名称,该名称由相应的 configure 参数设置,以及版本。Server
响应头字段将使用该字符串的变量插值值,而不是服务器名称、版本和构建名称。空 字符串 禁用发出 Server
字段。status_zone#
server
上下文可以共享同一区域以进行数据收集;特殊值 off
禁用在嵌套 location
块中的数据收集。server {
listen 80;
server_name *.example.com;
status_zone single;
# ...
}
区域
下进行分组。$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
大小;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
,如下所示。最后一个参数也可以是代码:location / {
try_files $uri $uri/index.html $uri.html =404;
}
location / {
try_files $uri $uri/ @drupal;
}
try_files
指令等同于location / {
error_page 404 = @drupal;
log_not_found off;
}
location ~ \.php$ {
try_files $uri @drupal;
fastcgi_pass ...;
fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name;
# ...
}
try_files
在将请求传递给 FastCGI 服务器之前检查 PHP 文件的存在性。代理 Mongrel 的示例:
location / {
try_files /system/maintenance.html
$uri $uri/index.html $uri.html
@mongrel;
}
location @mongrel {
proxy_pass http://mongrel;
}
Drupal/FastCGI 的示例:
location / {
try_files $uri $uri/ @drupal;
}
location ~ \.php$ {
try_files $uri @drupal;
fastcgi_pass ...;
fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param QUERY_STRING $args;
# ... 其他 fastcgi_param
}
location @drupal {
fastcgi_pass ...;
fastcgi_param SCRIPT_FILENAME /path/to/index.php;
fastcgi_param SCRIPT_NAME /index.php;
fastcgi_param QUERY_STRING q=$uri&$args;
# ... 其他 fastcgi_param
}
Wordpress 和 Joomla 的示例:
location / {
try_files $uri $uri/ @wordpress;
}
location ~ \.php$ {
try_files $uri @wordpress;
fastcgi_pass ...;
fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name;
# ... 其他 fastcgi_param
}
location @wordpress {
fastcgi_pass ...;
fastcgi_param SCRIPT_FILENAME /path/to/index.php;
# ... 其他 fastcgi_param
}
types#
types {
application/octet-stream bin exe dll;
application/octet-stream deb;
application/octet-stream dmg;
}
conf/mime.types
文件中。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 服务器变量匹配的内置变量。首先,这些变量表示客户端请求头字段,例如 $http_user_agent
、$http_cookie
等。此外,还有其他变量:$angie_version
#$arg_<name>
#$args
#$binary_remote_addr
#$body_bytes_sent
#mod_log_config
的 "%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
的值可能在请求处理期间发生变化,例如在进行内部重定向或使用索引文件时。