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 被禁用时: 最后,文件可以使用多线程读取和:ref:send <sendfile>,而不会阻塞工作进程: 读取和发送文件操作被卸载到指定的 pool 的线程中。如果省略 pool 名称,则使用名为"default"的池。池名称也可以通过变量设置: 默认情况下,多线程被禁用,必须通过 --with-threads 配置参数启用。目前,多线程仅与 epoll 、 kqueue 和 eventport 方法兼容。多线程发送文件仅在Linux上支持。 另请参阅 sendfile 指令。 如果启用了 aio,则指定其是否用于写入文件。目前,这仅在使用 aio threads 时有效,并且仅限于写入从代理服务器接收到的临时文件。 定义指定位置的替代品。例如,以下配置: 在请求 path 值可以包含变量,除了:ref:$document_root <v_document_root> 和 $realpath_root。 如果在使用正则表达式定义的 location 内使用 alias,则该正则表达式应包含捕获,并且 alias 应引用这些捕获,例如: 当位置匹配指令值的最后一部分时: 最好使用 root 指令: 该指令控制当前缀位置以斜杠结尾时的 重定向 行为: 在这里,请求 /prefix 将导致重定向到 /prefix/。 值 允许在HTTP/1.1中禁用分块传输编码。当使用不支持分块编码的软件时,这可能会很有用,尽管标准要求如此。 设置用于读取客户端请求体的缓冲区大小。如果请求体大于缓冲区,则整个请求体或仅其部分将写入:ref:临时文件 <client_body_temp_path>。默认情况下,缓冲区大小等于两个内存页面。在x86、其他32位平台和x86-64上为8K。在其他64位平台上通常为16K。 默认 http, server, location 确定Angie是否应将整个客户端请求体保存到文件中。此指令可以在调试期间使用,或在使用 $request_body_file 变量或模块 Perl 的:r->request_body_file <p_r_request_body_file>方法时使用。 当设置为on值时,临时文件在请求处理后不会被删除。 临时文件在请求处理后不会被删除 将导致请求处理后留下的临时文件被删除 默认 http, server, location 确定Angie是否应将整个客户端请求体保存在一个缓冲区中。此指令在使用 $request_body 变量时推荐使用,以减少涉及的复制操作数量。 默认 http, server, location 定义用于存储客户端请求体的临时文件的目录。在指定目录下最多可以使用三级子目录层次。例如,在以下配置中 临时文件的路径可能如下所示: 定义读取客户端请求体的超时。超时仅在两次连续读取操作之间设置,而不是在整个请求体的传输期间。如果客户端在此时间内没有传输任何内容,则请求将以408(请求超时)错误终止。 设置用于读取客户端请求头的缓冲区大小。对于大多数请求,1K 字节的缓冲区就足够了。然而,如果请求包含长 cookie,或者来自 WAP 客户端,则可能无法适应 1K。如果请求行或请求头字段无法放入此缓冲区,则会分配通过 large_client_header_buffers 指令配置的更大缓冲区。 定义读取客户端请求头的超时。如果客户端在此时间内未传输整个头,则请求将以 408(请求超时)错误终止。 设置客户端请求体的最大允许大小。如果请求中的大小超过配置值,则会返回 413(请求实体太大)错误给客户端。请注意,浏览器无法正确显示此错误。 禁用对客户端请求体大小的检查 允许准确调整每个连接的内存分配。该指令对性能的影响最小,通常不应使用。 默认情况下: 32 位平台 64 位平台 定义响应的默认 MIME 类型。文件名扩展名到 MIME 类型的映射可以通过 types 指令设置。 启用在读取大于或等于指定大小的文件时使用 O_DIRECT 标志(FreeBSD, Linux)、F_NOCACHE 标志(macOS)或 directio() 函数(Solaris)。该指令会自动禁用对特定请求的 sendfile 使用。它在提供大文件时非常有用: 或在 Linux 上使用 aio 时。 为 directio 设置对齐。在大多数情况下,512 字节的对齐就足够了。然而,在 Linux 上使用 XFS 时,需要增加到 4K。 默认 http, server, location 确定在打开文件时如何处理符号链接: 允许并不检查路径名中的符号链接。这是默认行为。 如果路径名的任何组成部分是符号链接,则拒绝访问文件。 如果路径名的任何组成部分是符号链接,并且链接和链接指向的对象具有不同的所有者,则拒绝访问文件。 在检查符号链接时(参数 示例: 该指令仅在具有 警告 参数 在不支持仅为搜索打开目录的系统上,使用这些参数需要工作进程对所有被检查的目录具有读取权限。 定义在指定错误时将显示的 URI。uri 值可以包含变量。 示例: 这会导致内部重定向到指定的 uri,并将客户端请求方法更改为 "GET"(对于除 "GET" 和 "HEAD" 之外的所有方法)。 另外,可以使用 =response 语法将响应代码更改为另一个,例如: 如果错误响应由代理服务器或 FastCGI/uwsgi/SCGI/gRPC 服务器处理,并且该服务器可能返回不同的响应代码(例如,200、302、401 或 404),则可以响应其返回的代码: 如果在内部重定向期间不需要更改 URI 和方法,可以将错误处理传递到命名位置: 备注 如果 uri 处理导致错误,则返回给客户端的状态代码为最后发生错误的状态代码。 还可以使用 URL 重定向进行错误处理: 在这种情况下,默认情况下,响应代码 302 将返回给客户端。它只能更改为重定向状态代码之一(301、302、303、307 和 308)。 启用或禁用静态资源的 "ETag" 响应头字段的自动生成。 提供 HTTP 服务器指令的配置文件上下文。 指定如何将响应的修改时间与 If-Modified-Since 请求头字段中的时间进行比较: 响应始终被视为已修改 精确匹配 响应的修改时间小于或等于 If-Modified-Since 请求头字段中的时间。 控制是否忽略无效名称的头字段。有效名称由英文字母、数字、连字符和可能的下划线(由 underscores_in_headers 指令控制)组成。 如果该指令在 server 级别上指定,则可以使用默认服务器的值。 指定给定位置只能用于内部请求。对于外部请求,将返回客户端错误 404(未找到)。内部请求包括: 由 error_page、index、random_index 和 try_files 指令重定向的请求; 由上游服务器的 X-Accel-Redirect 响应头字段重定向的请求; 由 http_ssi 模块的 include virtual 命令、 http_addition 模块指令及 auth_request 和 mirror 指令形成的子请求; 由 rewrite 指令更改的请求。 示例: 备注 每个请求的内部重定向限制为 10 次,以防止在不正确的配置中发生请求处理循环。如果达到该限制,将返回错误 500(内部服务器错误)。在这种情况下,可以在错误日志中看到 rewrite or internal redirection cycle 消息。 禁用与表现不佳的浏览器的长连接。browser 参数指定哪些浏览器将受到影响。 启用与所有浏览器的长连接 禁用与旧版本MSIE的长连接,一旦收到POST请求 禁用与macOS及类似操作系统上的Safari和类似浏览器的长连接 设置通过一个长连接可以服务的最大请求数。在达到最大请求数后,连接将关闭。 定期关闭连接是必要的,以释放每个连接的内存分配。因此,使用过高的最大请求数可能导致过高的内存使用,不建议这样做。 限制通过一个长连接处理请求的最长时间。在达到此时间后,连接将在后续请求处理后关闭。 设置长连接客户端连接在服务器端保持开启的超时时间 禁用长连接客户端连接 可选*的第二个参数设置“Keep-Alive: timeout=time”响应头字段中的值。两个参数可能不同。 “Keep-Alive: timeout=time”头字段被Mozilla和Konqueror识别。MSIE大约在60秒后自动关闭长连接。 设置用于读取大客户端请求头的最大缓冲区数量和大小。请求行不能超过一个缓冲区的大小,否则将返回414(请求的URI过大)错误给客户端。请求头字段也不能超过一个缓冲区的大小,否则将返回400(错误的请求)错误给客户端。缓冲区仅在需要时分配。默认情况下,缓冲区大小为8K字节。如果在请求处理结束后,连接被转换为长连接状态,则这些缓冲区将被释放。 如果指令在 server 级别上指定,则可以使用默认服务器的值。 限制在某个位置内允许的HTTP方法。 method 可以是以下之一: 备注 此示例将限制对所有方法的访问,
除了 限制向客户端的响应传输速率。速率以每秒字节为单位指定。零值禁用速率限制。限制是针对每个请求设置的,因此如果客户端同时打开两个连接,则整体速率将是指定限制的两倍。 参数值可以包含变量。在某些情况下,可能需要根据特定条件限制速率: 速率限制也可以在 $limit_rate 变量中设置,但不推荐使用此方法: 速率限制也可以在代理服务器响应的“X-Accel-Limit-Rate”头字段中设置。可以使用 proxy_ignore_headers、fastcgi_ignore_headers、uwsgi_ignore_headers 和 scgi_ignore_headers 指令禁用此功能。 设置在继续向客户端传输响应之前的初始量。参数值可以包含变量。 示例: 控制Angie如何关闭客户端连接。 指示Angie在完全关闭连接之前:等待 并 处理 来自客户端的额外数据,但仅在启发式分析表明客户端可能还在发送更多数据的情况下。 将导致Angie无条件等待并处理额外的客户端数据。 告诉Angie永远不要等待更多数据并立即关闭连接。这种行为破坏了协议,正常情况下不应使用。 要控制HTTP/2连接的关闭,指令必须在 server 级别上指定。 当 lingering_close 生效时,此指令指定Angie将处理(读取并忽略)来自客户端的额外数据的最长时间。在此之后,即使还有更多数据,连接也将被关闭。 当 lingering_close 生效时,
该指令指定等待更多客户端数据到达的最长时间。
如果在此时间内未接收到数据,则连接将被关闭。
否则,数据将被读取并忽略,
然后Angie开始再次等待更多数据。
这个“等待-读取-忽略”循环重复
最长不超过 lingering_time 指令所指定的时间。 在优雅关闭期间,仅当长连接处于非活动状态至少持续 默认值 server 设置监听套接字的 address 和 port,或服务器将接受请求的UNIX域套接字的路径。可以指定 address 和 port,或者仅指定 address 或仅指定 port。 address 也可以是主机名,例如: IPv6地址用方括号指定: UNIX域套接字用 如果仅给定 address,则使用端口 80。 如果指令不存在,则在Angie以超级用户权限运行时使用 *:80,否则使用 *:8000。 指定此参数的服务器将成为给定 address:port 对的默认服务器(两者共同形成一个 监听套接字)。 如果没有带有 允许指定在此端口上接受的所有连接应以 SSL 模式工作。这允许处理 HTTP 和 HTTPS 请求的服务器拥有更 紧凑的配置。 配置端口以接受 HTTP/2 连接。通常,为了使其工作,还应该指定 ssl 参数,但 Angie 也可以配置为在没有 SSL 的情况下接受 HTTP/2 连接。 自 1.2.0 版本弃用. 使用 http2 指令代替。 配置端口以接受 QUIC 连接。要使用此选项,Angie 必须启用并配置 HTTP3 模块。设置 允许指定在此端口上接受的所有连接应使用 PROXY 协议。 listen 指令可以有几个与套接字相关的系统调用特定的附加参数。这些参数可以在任何 listen 指令中指定,但对于给定的 address:port 对只能指定一次。 此参数设置与监听套接字关联的路由表 FIB(SO_SETFIB 选项)。这目前仅在 FreeBSD 上有效。 为监听套接字启用 "TCP Fast Open",并限制尚未完成三次握手的连接队列的最大长度。 小心 除非服务器能够处理多次接收相同的 SYN 数据包,否则请勿启用此功能。 设置 设置监听套接字的接收缓冲区大小( 设置监听套接字的发送缓冲区大小( 设置监听套接字的接受过滤器名称( 指示在 Linux 上使用延迟的 指示为给定的 address:port 对进行单独的 此参数通过 此参数指示为每个工作进程创建一个单独的监听套接字(在 Linux 3.9+ 和 DragonFly BSD 上使用 小心 不当使用此选项可能会导致安全隐患。 配置监听套接字的 "TCP keepalive" 行为。 如果省略此参数,则操作系统的设置将适用于该套接字。 为套接字开启 为套接字关闭 某些操作系统支持使用 将把空闲超时(TCP_KEEPIDLE)设置为 30 分钟,将探测间隔(TCP_KEEPINTVL)保持为其系统默认值,并将探测计数(TCP_KEEPCNT)设置为 10 次探测。 示例: 根据请求 URI 是否与任何匹配表达式匹配来设置配置。 匹配是在标准化 URI 上执行的,在解码以 "%XX" 形式编码的文本、解析相对路径组件 "." 和 ".." 的引用以及可能的 压缩 两个或多个相邻斜杠为单个斜杠后进行。 location 可以通过前缀字符串或正则表达式定义。 正则表达式通过前置修饰符指定: 不区分大小写的匹配 区分大小写的匹配 为了找到与请求匹配的位置,Angie 首先检查使用前缀字符串定义的位置(称为前缀位置)。在它们中,选择匹配前缀最长的位置并暂时存储。 备注 对于诸如 macOS 之类的不区分大小写的操作系统,前缀字符串匹配是不区分大小写的。然而,匹配仅限于单字节区域。 然后,基于正则表达式的位置按其在配置文件中的出现顺序进行评估。它们的评估在第一个匹配处停止,并使用相应的配置。如果未找到匹配的正则表达式位置,Angie 将使用暂时存储的前缀位置的配置。 在某些下述例外情况下,location 块可以嵌套。 正则表达式位置可以定义捕获组,稍后可以与其他指令一起使用。 如果匹配前缀位置使用 ^~ 修饰符,则不检查正则表达式位置。 此外,= 修饰符为 location 启用精确 URI 匹配模式;如果找到精确匹配,则查找停止。例如,如果 / 请求频繁,定义 示例: 一个 一个 一个 一个 一个 备注 如果前缀 对于精确 URI 匹配位置,不应用重定向: @ 前缀定义了一个 命名的 location。此类位置不用于常规请求处理,而是可以用于请求重定向。它们不能嵌套,也不能包含嵌套位置。 多个定义相同配置块的 location 上下文可以通过将所有匹配表达式列在一个单独的 location 中并使用单个配置块进行压缩。这称为 组合 location。 假设前面的示例中配置 A、D 和 E 定义相同的配置;您可以将它们组合成一个 location: 命名的 location 也可以是组合的一部分: 小心 组合 location 不能在匹配表达式和其修饰符之间有空格。
正确形式: 备注 目前,组合 启用或禁用将未找到文件的错误记录到 error_log。 启用或禁用将子请求记录到 access_log。 设置允许的客户端请求头字段的最大数量。
如果超过此限制,将返回 限制字节范围请求中允许的最大范围数量。超出限制的请求将被处理为没有指定字节范围。默认情况下,范围数量没有限制。 完全禁用字节范围支持 启用或禁用将URI中两个或多个相邻的斜杠压缩为一个斜杠。 请注意,压缩对于前缀字符串和正则表达式位置的正确匹配至关重要。如果没有它, 并可能被处理为静态文件。因此,它会被转换为 如果URI包含base64编码的名称,则可能需要关闭压缩,因为 base64 在内部使用“/”字符。然而,出于安全考虑,最好避免关闭压缩。 如果在 server 级别指定该指令,则可以使用默认服务器的值。 启用或禁用为状态大于400的MSIE客户端的响应添加注释,以增加响应大小到512字节。 启用或禁用为MSIE客户端发出刷新而不是重定向。 默认 http, server, location 配置一个可以存储的缓存: 打开的文件描述符、它们的大小和修改时间; 目录存在的信息; 文件查找错误,例如“找不到文件”、“无读取权限”等。 错误缓存应通过 open_file_cache_errors 指令单独启用。 设置缓存中元素的最大数量;在缓存溢出时,最少使用的元素将被删除; 定义在此时间内未被访问的元素从缓存中移除的时间; 默认设置为60秒。 禁用缓存。 示例: 启用或禁用通过 open_file_cache 缓存文件查找错误。 设置在 open_file_cache 指令的 inactive 参数配置的期间内,文件描述符保持在缓存中所需的最小 数字 次文件访问。 设置 open_file_cache 元素应被验证的时间。 设置用于从磁盘读取响应的缓冲区的 数字 和 大小。 启用或禁用在安吉发布的 绝对 重定向中指定端口。 重定向中主服务器名称的使用由 server_name_in_redirect 指令控制。 如果可能,将推迟客户端数据的传输,直到安吉至少有 大小 字节的数据可发送。 禁用推迟数据传输 设置内核在处理文件时的预读量。 在Linux上,使用 posix_fadvise(0, 0, 0, POSIX_FADV_SEQUENTIAL) 系统调用,因此大小参数将被忽略。 启用或禁用使用 error_page 指令进行多个重定向。此类重定向的数量是 有限的。 允许对每个请求的内存分配进行准确的调整。该指令对性能的影响很小,通常不应使用。 启用或禁用重置超时连接和使用非标准代码444关闭的连接。重置的方式如下。在关闭套接字之前,设置其 SO_LINGER 选项,超时值为 0。关闭套接字时,向客户端发送 TCP RST,并释放该套接字占用的所有内存。这有助于避免将已关闭的套接字及其填满的缓冲区长时间保持在 FIN_WAIT1 状态。 备注 超时的保持连接会正常关闭。 默认 — http, server, location, upstream 配置用于将上游服务器名称解析为地址的名称服务器,例如: 地址可以指定为域名或IP地址,并带有可选端口。如果未指定端口,则使用端口53。名称服务器以轮询方式查询。 默认情况下,安吉使用响应的TTL值缓存答案。 可选 参数允许覆盖缓存条目的有效性 默认情况下,安吉在解析时将查找IPv4和IPv6地址。 禁用查找IPv4地址 禁用查找IPv6地址 可选 参数;
启用在指定区域中收集DNS服务器请求和响应指标
(/status/resolvers/<zone>)。 小技巧 为防止DNS欺骗,建议在适当安全的受信任本地网络中配置DNS服务器。 提示 当在 Docker 中运行时,使用其内部 DNS 服务器地址,例如 为名称解析设置超时时间,例如: 为请求设置根目录。例如,使用以下配置 路径值可以包含变量,除了 $document_root 和 $realpath_root。 文件的路径仅通过将 URI 添加到 root 指令的值来构造。如果 URI 需要被修改,则应使用 alias 指令。 如果所有(all)或至少一个(any)模块允许访问,将允许访问:访问, 基础认证 或 认证请求。 如果指令设置为非零值,Angie 将尝试通过使用 NOTE_LOWAT 标志的 ref:kqueue 方法或 SO_SNDLOWAT 套接字选项来最小化客户端套接字上的发送操作数。在这两种情况下,使用指定的大小。 设置向客户端传输响应的超时时间。超时仅在两个连续的写操作之间设置,而不是对整个响应的传输。如果客户端在此时间内没有接收到任何内容,连接将被关闭。 启用或禁用 sendfile() 的使用。 aio 可用于预加载 sendfile() 的数据: 在此配置中,sendfile() 被调用时带有 SF_NODISKIO 标志,这使其不会在磁盘 I/O 上阻塞,而是报告数据不在内存中。然后,Angie 通过读取一个字节来启动异步数据加载。在第一次读取时,FreeBSD 内核将文件的前 128K 字节加载到内存中,尽管后续读取将仅以 16K 的块加载数据。这可以通过 read_ahead 指令进行更改。 限制可以在单个 sendfile() 调用中传输的数据量。没有限制时,一个快速连接可能会完全占用工作进程。 设置虚拟服务器的配置。没有明确区分基于 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> 的指标。 多个 单值 zone 语法在同一共享内存区域中聚合其上下文的所有指标: 替代语法使用以下参数: key 一个包含变量的字符串,
其值决定了请求在区域内的分组。
所有在替换后产生相同值的请求
都会被分到同一组。
如果替换产生空值,则不会更新指标。 zone 共享内存区域的名称。 count (可选) 收集指标的最大分组数。
如果新的 key 值超过此限制,
则会在 zone 下进行分组。 默认值为 1。 在以下示例中,
所有共享相同 因此,生成的指标在 API 输出中在各个主机之间分开。 Default http, server, location 设置用于存储子请求响应体的缓冲区大小。
默认情况下,缓冲区大小等于一个内存页面。这是
备注 此指令仅适用于响应体存储在内存中的子请求。例如,这种子请求由 SSI 创建。 启用或禁用 TCP_NODELAY 选项。 当连接进入保持活动状态时,该选项被启用。此外,在 SSL 连接、无缓冲代理和 WebSocket 代理 中也会启用该选项。 启用或禁用 FreeBSD 上的 TCP_NOPUSH 套接字选项或 Linux 上的 TCP_CORK 套接字选项。 这些选项仅在使用 sendfile 时启用。 启用该选项可以 在 Linux 和 FreeBSD 4.* 上将响应头和文件开头一起发送在一个数据包中; 以完整数据包发送文件。 按指定顺序检查文件的存在性,并使用第一个找到的文件进行请求处理;处理在当前上下文中进行。 文件路径根据 root 和 alias 指令从文件参数构建。 可以通过在名称末尾指定斜杠(例如 $uri/)来检查目录的存在性。如果没有找到任何文件,则会进行内部重定向到最后一个参数中指定的 uri。例如: 最后一个参数也可以指向命名的 location,如下所示。最后一个参数也可以是代码: 在以下示例中, try_files 指令等同于 在这里, try_files 在将请求传递给 FastCGI 服务器之前检查 PHP 文件的存在性。 Default http, server, location 将文件名扩展名映射到响应的 MIME 类型。 扩展名不区分大小写。 多个扩展名可以映射到同一类型,例如: 一个相对完整的映射表与 Angie 一起分发,存放在 要使特定位置对所有请求发出 "application/octet-stream" MIME 类型,可以使用以下配置: 设置类型哈希表的桶大小。 有关设置哈希表的详细信息,请参阅单独的 document。 设置类型哈希表的最大大小。 有关设置哈希表的详细信息,请参阅单独的 document。 启用或禁用在客户端请求头字段中使用下划线。 禁用下划线时,名称中包含下划线的请求头字段被标记为无效,并受到 ignore_invalid_headers 指令的约束。 如果该指令在 server 级别指定,则可以使用默认服务器的值。 设置变量哈希表的桶大小。 有关设置哈希表的详细信息,请参阅单独的 document。 设置变量哈希表的最大大小。 有关设置哈希表的详细信息,请参阅单独的 document。 Angie 版本 请求行中指定 name 的参数 请求行中的参数 以二进制形式表示的客户端地址,IPv4 地址的值长度始终为 4 字节,IPv6 地址为 16 字节 发送到客户端的字节数,不包括响应头;该变量与 mod_log_config Apache 模块的 "%B" 参数兼容 发送到客户端的字节数 连接序列号 通过连接发出的当前请求数量 连接时间(以秒为单位,精确到毫秒) "Content-Length" 请求头字段 "Content-Type" 请求头字段 与 $uri 相同 按优先顺序:请求行中的主机名、"Host" 请求头字段中的主机名,或与请求匹配的服务器名 主机名 任意请求头字段;name 是转换为小写、用下划线替代破折号的字段名 如果连接在 SSL 模式下运行则为 on,否则为空字符串 如果请求行有参数则为 ?,否则为空字符串 设置该变量以启用响应速率限制;请参见 limit_rate 当前时间(以秒为单位,精确到毫秒) 工作进程的 PID 如果请求是管道化的则为 p,否则为 . 来自 PROXY 协议头的客户端地址。 必须通过在 listen 指令中设置 proxy_protocol 参数来先启用 PROXY 协议。 来自 PROXY 协议头的客户端端口。 必须通过在 listen 指令中设置 proxy_protocol 参数来先启用 PROXY 协议。 来自 PROXY 协议头的服务器地址。 必须通过在 listen 指令中设置 proxy_protocol 参数来先启用 PROXY 协议。 来自 PROXY 协议头的服务器端口。 必须通过在 listen 指令中设置 proxy_protocol 参数来先启用 PROXY 协议。 来自 PROXY 协议头的 TLV。name 可以是 TLV 类型或其数字值。在后者情况下,该值为十六进制,并应以 0x 为前缀: SSL TLV 也可以通过 TLV 类型名称或其数字值访问,前面都加上 支持以下 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 协议。 与 $args 相同 客户端地址 客户端端口 通过基本身份验证提供的用户名 完整的原始请求行 请求体。 该变量的值在通过 proxy_pass、fastcgi_pass、uwsgi_pass 和 scgi_pass 指令处理的位置可用,当请求体被读取到 memory buffer 时。 请求体的临时文件名称。 处理结束时,需要删除该文件。要始终将请求体写入文件,必须启用 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 指令分别禁用请求体的传递。 如果请求已完成则为 "OK",否则为空字符串 由 16 个随机字节生成的唯一请求标识符,采用十六进制格式 请求长度(包括请求行、头部和请求体) 请求方法,通常为 请求处理时间(以秒为单位,精确到毫秒);自从从客户端读取的第一个字节以来的经过时间 完整的原始请求 URI(带参数) 请求方案,“http” 或 “https” 任意响应头字段;name 是转换为小写、用下划线替代破折号的字段名 在响应末尾发送的任意字段;name 是转换为小写、用下划线替代破折号的字段名 接受请求的服务器的地址。
计算该变量的值通常需要一个系统调用。
为避免此情况, listen 指令必须指定地址并使用 接受请求的服务器的名称 接受请求的服务器的端口 请求协议,通常是 "HTTP/1.0"、"HTTP/1.1" 或 "HTTP/2.0" 响应状态 本地时间,符合 ISO 8601 标准格式 本地时间,符合通用日志格式 有关客户端 TCP 连接的信息;在支持 请求中的当前 URI, normalized。
在请求处理期间, 指令#
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_write#
alias#
location /i/ {
alias /data/w3/images/;
}
/i/top.gif
时,将发送文件 /data/w3/images/top.gif。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;
}
on
明确启用重定向,而 off
禁用它。
当设置为 default
时,仅在 location 处理带有 api、proxy_pass、fastcgi_pass、uwsgi_pass、scgi_pass、memcached_pass 或 grpc_pass 的请求时,才启用重定向。chunked_transfer_encoding#
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-proxy-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#
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;
error_page 404 =200 /empty.gif;
error_page 404 = /404.php;
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#
http#
if_modified_since#
off
exact
before
ignore_invalid_headers#
internal#
error_page 404 /404.html;
location = /404.html {
internal;
}
keepalive_disable#
none
msie6
safari
keepalive_requests#
keepalive_time#
keepalive_timeout#
timeout
0
large_client_header_buffers#
limit_except#
GET
、HEAD
、POST
、PUT
、DELETE
、MKCOL
、COPY
、MOVE
、OPTIONS
、PROPFIND
、PROPPATCH
、LOCK
、UNLOCK
或 PATCH
。允许 GET
方法也会启用 HEAD
方法。可以使用 访问 和 基础认证 模块中的指令限制对其他方法的访问: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;
}
}
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]:[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;
default_server
default_server
参数的指令,监听套接字的默认服务器将是配置中为该套接字服务的第一个服务器。ssl
http2
quic
quic
后,您还可以指定 reuseport
,以便可以使用多个工作进程。proxy_protocol
setfib=
numberfastopen=
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+ 上有效。so_keepalive=on
| off
| [keepidle]:[keepintvl]:[keepcnt]
''
on
SO_KEEPALIVE
选项。off
SO_KEEPALIVE
选项。TCP_KEEPIDLE
、TCP_KEEPINTVL
和 TCP_KEEPCNT
套接字选项按套接字基础设置 TCP keepalive 参数。在此类系统上(目前为 Linux 2.4+、NetBSD 5+ 和 FreeBSD 9.0-STABLE),可以使用 keepidle
、keepintvl
和 keepcnt
参数进行配置。可以省略一个或两个参数,在这种情况下,相应套接字选项的系统默认设置将生效。例如,so_keepalive=30m::10
listen 127.0.0.1 default_server accept_filter=dataready backlog=1024;
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 时,将返回指向附加斜杠的请求 URI 的永久 301 代码重定向。location /user/ {
proxy_pass http://user.example.com;
}
location =/user {
proxy_pass http://login.example.com;
}
组合位置#
location =/
^~/images/
~*\.(gif|jpg|jpeg)$ {
# 一般配置
}
location =/
@named_combined {
#...
}
location ~*/match(ing|es|er)$ ...
。location
不能 立即 包含 proxy_pass 和类似的带有 URI 设置的指令,也不能包含 api
或 alias
。然而,这些指令可以通过嵌套在组合位置中的位置使用。log_not_found#
log_subrequest#
max_headers#
400 (错误请求)
错误。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#
open_file_cache_valid#
output_buffers#
port_in_redirect#
postpone_output#
0
read_ahead#
recursive_error_pages#
request_pool_size#
reset_timedout_connection#
resolver#
resolver
地址 ... [valid=
时间] [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 5s;
root#
location /i/ {
root /data/w3;
}
/data/w3/i/top.gif
文件将作为 /i/top.gif
请求的响应发送。satisfy#
location / {
satisfy any;
allow 192.168.1.0/32;
deny all;
auth_basic "closed site";
auth_basic_user_file conf/htpasswd;
}
send_lowat#
send_timeout#
sendfile#
location /video/ {
sendfile on;
tcp_nopush on;
aio on;
}
sendfile_max_chunk#
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
size;subrequest_output_buffer_size 4k
| 8k;
4K
或 8K
,具体取决于平台。不过,
可以将其设置得更小。tcp_nodelay#
tcp_nopush#
try_files#
location /images/ {
try_files $uri /images/default.gif;
}
location = /images/default.gif {
expires 30s;
}
location / {
try_files $uri $uri/index.html $uri.html =404;
}
location / {
try_files $uri $uri/ @drupal;
}
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;
# ...
}
代理 Mongrel 的示例:
location / {
try_files /system/maintenance.html
$uri $uri/index.html $uri.html
@mongrel;
}
location @mongrel {
proxy_pass http://mongrel;
}
Drupal/FastCGI 的示例:
location / {
try_files $uri $uri/ @drupal;
}
location ~ \.php$ {
try_files $uri @drupal;
fastcgi_pass ...;
fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param QUERY_STRING $args;
# ... 其他 fastcgi_param
}
location @drupal {
fastcgi_pass ...;
fastcgi_param SCRIPT_FILENAME /path/to/index.php;
fastcgi_param SCRIPT_NAME /index.php;
fastcgi_param QUERY_STRING q=$uri&$args;
# ... 其他 fastcgi_param
}
Wordpress 和 Joomla 的示例:
location / {
try_files $uri $uri/ @wordpress;
}
location ~ \.php$ {
try_files $uri @wordpress;
fastcgi_pass ...;
fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name;
# ... 其他 fastcgi_param
}
location @wordpress {
fastcgi_pass ...;
fastcgi_param SCRIPT_FILENAME /path/to/index.php;
# ... 其他 fastcgi_param
}
types#
types
{ ... }types text/html html; image/gif gif; image/jpeg jpg;
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
#$bytes_sent
#$connection
#$connection_requests
#$connection_time
#$content_length
#$content_type
#$document_root
#$document_uri
#$host
#$hostname
#$http_<name>
#$https
#$is_args
#$limit_rate
#$msec
#$pid
#$pipe
#$proxy_protocol_addr
#$proxy_protocol_port
#$proxy_protocol_server_addr
#$proxy_protocol_server_port
#$proxy_protocol_tlv_<name>
#$proxy_protocol_tlv_alpn
$proxy_protocol_tlv_0x01
ssl_
:$proxy_protocol_tlv_ssl_version
$proxy_protocol_tlv_ssl_0x21
$query_string
#$realpath_root
#$remote_addr
#$remote_port
#$remote_user
#$request
#$request_body
#$request_body_file
#$request_completion
#$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
的值可能会发生变化,例如在进行内部重定向或使用索引文件时。