代理#
允许将请求传递到另一个(被代理的)服务器。
当 从源代码构建 时,该模块默认会被构建;可以通过
构建选项 --without-http_proxy_module 禁用它。
在来自 我们的软件仓库 的包和镜像中,该模块已包含在
构建中。 使到被代理服务器的出站连接从指定的本地 IP 地址(可选端口)发起。参数值可以包含变量。特殊值 默认情况下,该值在请求初始化时求值一次,即在选择被代理的服务器之前。在 Angie PRO 中,每次选择被代理的服务器之后(包括重试)都会进行求值,因此绑定地址可以取决于所选服务器;例如,通过 为了使此参数生效,通常需要以 超级用户 权限运行 Angie 工作进程。在 Linux 上不需要这样做,因为如果指定了 备注 需要配置内核路由表以拦截来自被代理服务器的网络流量。 设置用于读取从被代理服务器接收的响应的第一部分的缓冲区大小。这部分通常包含一个小的响应头。默认情况下,缓冲区大小等于一个内存页。根据平台不同,这可能是 4K 或 8K。但可以设置得更小。 启用或禁用来自被代理服务器的响应的缓冲。 Angie 在从被代理服务器读取响应的同时将其发送给客户端;客户端不必等待整个响应。响应被读入由 proxy_buffer_size 和 proxy_buffers 指令设置的缓冲区。缓冲区一旦被完全填满就会被传递用于发送,忙于发送的缓冲区总大小受 proxy_busy_buffers_size 限制。未填满的缓冲区会一直等待,直到被填满或响应结束,因此数据通常以完整缓冲区为单位到达客户端。因此,必须在产生时就送达客户端的响应需要使用 从被代理服务器读取到的每一部分数据都会立即传递给客户端,没有最小尺寸限制:例如从 4K 缓冲区中读取的 10 字节会被立即发送。Angie 使用由 proxy_buffer_size 指令设置的单个缓冲区,因此每次读取的数据都不会超过该大小。由于不使用临时文件,响应既不会被缓存,也不会被 存储 到磁盘,proxy_limit_rate 和 limit_rate 都不起作用。 也可以通过在 设置用于从被代理服务器读取响应的缓冲区的数量和大小,针对单个连接。 默认情况下,缓冲区大小等于一个内存页。根据平台不同,这可能是 4K 或 8K。 当启用来自被代理服务器的响应的 缓冲 时,限制在响应尚未完全读取时可以忙于向客户端发送响应的缓冲区的总大小。同时,其余的缓冲区可用于读取响应,如果需要,还可以将部分响应缓冲到临时文件中。 默认情况下,大小受 proxy_buffer_size 和 proxy_buffers 指令设置的两个缓冲区大小的限制。 定义用于缓存的共享内存区域。
同一个区域可以在多个地方使用。
参数值可以包含变量。 禁用从上一级配置继承的缓存。 在 Angie PRO 中,您可以指定多个使用相同 该值在从后端*缓存*响应时进行评估,预期使用变量,包括那些包含来自响应的信息的变量。 如果响应从缓存中获取,则不会重新评估 path;
因此,缓存的响应保留其原始 path,
直到它从缓存中删除。 这允许通过将 map 指令或脚本应用于来自后端的响应来选择所需的缓存路径。 这里有两个缓存路径和一个用于区分它们的变量映射。
如果 备注 使用 proxy_cache 时,
通常还需要设置 proxy_cache_valid 指令
来明确指定响应的缓存时间。
如果未设置,Angie 不使用默认值,
而是根据来自服务器的 HTTP 响应头
按以下优先级顺序确定响应缓存时间: 带有 如果这些头都不包含有效值或根本不存在,
响应将不会被缓存,因为无法确定其过期时间。 默认值 http, server, location 允许启动后台子请求来更新过期的缓存项,同时将陈旧的缓存响应返回给客户端。 警告 在更新陈旧缓存响应时使用它必须被 允许。 定义不从缓存中获取响应的条件。如果字符串参数中至少有一个值不为空且不等于 "0",则不会从缓存中获取响应: 参数值可以包含变量。 可以与 proxy_no_cache 指令一起使用。 启用或禁用将 "HEAD" 方法转换为 "GET" 以进行缓存。如果禁用转换, 缓存键 必须包含 $request_method。 默认值 http, server, location 定义缓存的键。键可以包含变量。例如: 默认情况下,该指令的值接近于以下字符串 启用后,一次只允许一个请求通过向被代理服务器传递请求来填充根据 proxy_cache_key 指令标识的新缓存元素。对于相同缓存元素的其他请求将等待响应出现在缓存中,或者等待该元素的缓存锁被释放,最长等待时间由 proxy_cache_lock_timeout 指令设置。 如果传递给被代理服务器以填充新缓存元素的最后一个请求在指定时间内未完成,则可以再向被代理服务器传递一个请求。 设置 proxy_cache_lock 的超时时间。当超时时间到期时,请求将被传递给被代理服务器,但响应不会被缓存。 为字节范围请求设置偏移量(以字节为单位)。如果范围超出指定的偏移量,范围请求将被传递到代理服务器,并且响应将不会被缓存。 默认值 http, server, location 如果客户端请求方法在此指令中列出,则响应将被缓存。"GET" 和 "HEAD" 方法始终会添加到列表中,但建议显式指定它们。另请参阅 proxy_no_cache 指令。 设置在多少次请求后响应将被缓存。 警告 缓存元数据存储在共享内存中。手动删除缓存文件不会重置计数器,可能导致不可预测的行为。要完全重置,请停止服务器,删除缓存目录,然后重新启动。 备注 第三方缓存清除模块(例如 Cache Purge)仅删除文件,但不会重置 默认值 — http 设置缓存的 path 和其他参数。缓存数据存储在文件中。缓存中的文件名是对 缓存键 应用 MD5 函数的结果。 定义缓存的层次结构级别:从 1 到 3,每个级别接受值 1 或 2。 例如,在以下配置中: 缓存中的文件名将如下所示: 缓存的响应首先写入临时文件,然后重命名该文件。临时文件和缓存可以放在不同的文件系统上。但是,请注意,在这种情况下,文件将在两个文件系统之间复制,而不是执行廉价的重命名操作。因此,建议对于任何给定位置,将缓存和存放临时文件的目录放在同一文件系统上。 确定用于临时文件的目录 如果未指定该参数或设置为 临时文件将直接放置在缓存目录中 设置用于存储所有活动键和数据信息的共享内存区域的名称和大小。缓存元数据存储在共享内存中。 区域大小以字节为单位指定,且必须至少为两个系统内存页。
1 兆字节的区域足以存储约 8000 个键。 当使用 如果由于区域大小更改、二进制版本不兼容或其他原因而无法恢复该区域,
Angie 将记录警告( 警告 确保正确指定 file 的路径,
并具有 Angie 使用所需的访问权限,
并受到保护以防止未经授权的访问;
相对路径基于 prefix。 如果在此参数指定的时间内未访问缓存数据,则无论其新鲜度如何,数据都将被删除;每次访问都会重置此计时器。这与下文所述的、由**缓存管理器**执行的基于大小的清除不同:即使缓存未达到 默认情况下, 备注 在 Angie PRO 中,可以使用相同的 一个特殊的**缓存管理器**进程会监控最大缓存大小和缓存所在文件系统的最小可用空间,当超过最大缓存大小或可用空间不足时,会删除最近最少使用的数据。数据删除以迭代方式进行。 缓存大小的最大阈值 该值以字节为单位指定; 缓存所在文件系统可用空间的最小阈值 该值使用与 在不支持查询文件系统统计信息的平台上,
此参数将被忽略,Angie 会记录警告
一次迭代中要删除的最大缓存项数 默认值: 限制一次迭代的持续时间 默认值: 配置迭代之间的暂停时间 默认值: Angie 启动一分钟后,会激活一个特殊的**缓存加载器**进程。
它扫描文件系统中先前缓存的数据,
并将这些信息加载到缓存区域中。
此进程以迭代方式工作;
每次迭代处理由 一次迭代中要加载的最大缓存项数 默认值: 限制一次迭代的持续时间 默认值: 配置迭代之间的暂停时间 默认值: 备注 为 启用使用带有 默认值 http, server, location 确定在哪些情况下可以使用过期的缓存响应。该指令的参数与 proxy_next_upstream 指令的参数相匹配。 如果无法选择代理服务器来处理请求,则允许使用过期的缓存响应。 附加参数,如果缓存响应当前正在更新,则允许使用过期的缓存响应。这可以在更新缓存数据时最小化对代理服务器的访问次数。 如果使用 非幂等 方法的请求已经发送到代理服务器,而随后与该服务器的通信因任何原因失败,则允许使用过期的缓存响应;在非幂等方法中只有 也可以直接在响应头中启用使用过期的缓存响应,指定响应过期后的秒数: 备注 这比使用指令参数的优先级更低。 要在填充新缓存元素时最小化对代理服务器的访问次数,可以使用 proxy_cache_lock 指令。 为不同的响应代码设置缓存时间。例如,以下指令 为代码 200 和 302 的响应设置 10 分钟的缓存时间,为代码 404 的响应设置 1 分钟的缓存时间。 如果只指定了缓存时间, 则只缓存 200、301 和 302 响应。 此外,可以指定 备注 缓存参数也可以直接在响应头中设置。这比使用指令设置缓存时间具有更高的优先级。 如果头中不包含 如果头中包含 如果头中包含值为 " 可以使用 proxy_ignore_headers 指令禁用对这些响应头字段中一个或多个的处理。 定义与被代理服务器建立连接的超时时间。需要注意的是,此超时时间通常不能超过 75 秒。 备注 此超时时间不适用于空闲连接:已打开的连接保留多久以供复用,
由 upstream 块中的 keepalive_timeout 设置,
该块需通过 keepalive 缓存连接。 启用在被代理服务器从组中移除或被 reresolve 进程或 API 命令 当为客户端或被代理服务器处理下一个读取或写入事件时,连接将被终止。 设置 time 启用连接终止 超时;
设置为 无论被代理服务器响应中的 设置 proxy_hide_header 和 proxy_set_header 指令使用的哈希表的桶大小。哈希表设置的详细信息在 单独的文档 中提供。 设置 proxy_hide_header 和 proxy_set_header 指令使用的哈希表的最大大小。哈希表设置的详细信息在 单独的文档 中提供。 默认情况下,Angie 不会将被代理服务器响应中的 切换特殊的 警告 仅在运行明确需要此模式的专门测试时启用此模式。 默认值 http, server, location 初始化 HTTP/3 和 QUIC 设置,
并设置 连接 中并发 HTTP/3 请求流的最大数量。
需要启用 keepalive 连接。 默认值 http, server, location 设置代理连接的 动态表
容量。 备注 类似的指令 http3_max_table_capacity
为服务器连接设置此值。
为避免错误,在代理模式下启用缓存时
会禁用动态表的使用。 默认值 http, server, location, if in location, limit_except 设置代理的 HTTP 协议版本。
建议使用 1.1 或更高版本
与 keepalive 连接 一起使用。 决定当客户端在未等待响应的情况下关闭连接时,是否应关闭与被代理服务器的连接。 禁用对来自代理服务器的某些响应头字段的处理。可以忽略以下字段: 如果未禁用,处理这些头字段将产生以下效果: 确定状态码大于或等于 300 的代理响应应该传递给客户端,还是被拦截并重定向到 Angie 以使用 error_page 指令进行处理。 限制从代理服务器读取响应的速度。
rate 以每秒字节数指定;允许使用变量。 禁用速率限制 备注 该限制是针对每个请求设置的,因此如果 Angie 同时打开两个到代理服务器的连接,总速率将是指定限制的两倍。该限制仅在启用来自代理服务器的响应 缓冲 时有效。 当启用来自代理服务器的响应 缓冲 时,如果整个响应无法放入 proxy_buffer_size 和 proxy_buffers 指令设置的缓冲区中,响应的一部分可以保存到临时文件中。此指令设置临时文件的最大大小。一次写入临时文件的数据大小由 proxy_temp_file_write_size 指令设置。 禁用将响应缓冲到临时文件 指定在转发到代理服务器的请求中使用的 HTTP 方法,而不是来自客户端请求的方法。参数值可以包含变量。 默认值 http, server, location 指定在哪些情况下应将请求传递给 upstream 组中的下一个服务器: 与服务器建立连接、向其传递请求或读取响应头时发生错误; 与服务器建立连接、向其传递请求或读取响应头时发生超时; 服务器返回空响应或无效响应; 服务器返回状态码为 500 的响应; 服务器返回状态码为 502 的响应; 服务器返回状态码为 503 的响应; 服务器返回状态码为 504 的响应; 服务器返回状态码为 403 的响应; 服务器返回状态码为 404 的响应; 服务器返回状态码为 429 的响应; 通常,如果请求已发送到上游服务器,则不会将使用 非幂等 方法
( 禁用将请求传递给下一个服务器。 如果上游组中的所有服务器均不可用,或者对该指令(及其他协议对应指令)
认定为错误的状态码作出响应,Angie 始终返回自己的错误页面,
而不是最后一台服务器的响应。 备注 应该理解,只有在尚未向客户端发送任何内容时,才可能将请求传递给下一个服务器。也就是说,如果在传输响应的过程中发生错误或超时,则无法修复此问题。 该指令还定义了什么被视为与服务器通信的 不成功尝试。 始终被视为不成功尝试,即使它们未在指令中指定 仅在指令中指定时才被视为不成功尝试 永远不会被视为不成功尝试 限制可以将请求传递给 下一个服务器 的时间。 禁用此限制 限制将请求传递给 下一个服务器 的可能尝试次数。 禁用此限制 定义响应不被保存到缓存的条件。如果字符串参数中至少有一个值不为空且不等于"0",则响应将不会被保存: 参数值可以包含变量。 可以与 proxy_cache_bypass 指令一起使用。 设置代理服务器的协议和地址,以及一个可选的 URI,用于映射 location。协议可以指定为 或者指定为 UNIX 域套接字路径,在 如果域名解析为多个地址,所有地址将以轮询方式使用。此外,地址还可以指定为 服务器组。 参数值可以包含变量。在这种情况下,如果地址指定为域名,则会在已描述的服务器组中搜索该名称,如果未找到,则使用 resolver 来确定。 备注 这些服务器组的名称在整个 因此,当某个 请求 URI 按以下方式传递给服务器: 如果 服务器收到的 如果 以下情况视为 URI 或参数已被更改: rewrite 指令的正则表达式匹配; 为 $args 变量赋值,即使赋的是其当前值; 请求被 内部重定向 到某个 URI,
例如由 index 或 error_page 指令、try_files 的最后一个参数,
或 重定向到 命名 location 不会更改 URI,
无论是通过 goto、error_page、try_files
还是 例如,客户端请求 在下面的配置中, rewrite 指令会更改 URI: 服务器收到的是 在某些情况下,无法确定请求 URI 中要替换的部分: 当 在这些情况下, 不含变量的 当在代理的 在这种情况下,指令中指定的 URI 将被忽略,完整的更改后的请求 URI 将传递给服务器。 当在 在这种情况下,如果在指令中指定了 URI,它将按原样传递给服务器,替换原始请求 URI。 WebSocket 代理需要特殊配置。 备注 如果 允许将代理服务器的 原本禁用 的头字段传递给客户端。 指示是否将原始请求正文传递给代理服务器。 另请参阅 proxy_set_header 和 proxy_pass_request_headers 指令。 指示是否将原始请求的头字段传递给代理服务器。 另请参阅 proxy_set_header 和 proxy_pass_request_body 指令。 允许将代理服务器的尾部字段传递给客户端。 HTTP/1.1 中的尾部部分需要 显式启用。 默认值 http, server, location 设置 QUIC
设置一个包含密钥的 file,
该密钥与 QUIC 一起使用来加密
无状态重置
和
地址验证
令牌。
默认情况下,每次重启时都会生成一个随机密钥。
使用旧密钥生成的令牌不被接受。 定义从代理服务器读取响应的超时时间。超时仅在两次连续读取操作之间设置,而不是用于整个响应的传输。如果代理服务器在此时间内未传输任何内容,则连接将关闭。 默认值 http, server, location 设置应在代理服务器响应的 "Location" 和 "Refresh" 头字段中更改的文本。 假设代理服务器返回了头字段: 指令 将把此字符串重写为: replacement 字符串中可以省略服务器名称: 然后将插入主服务器的名称和端口(如果不是 80)。 由 警告 如果 proxy_pass 使用变量指定,则不允许使用 replacement 字符串可以包含变量: redirect 也可以包含变量: 该指令可以使用正则表达式指定。在这种情况下, redirect 应该以 "~" 符号开头表示区分大小写的匹配,或者以 "~*" 符号开头表示不区分大小写的匹配。正则表达式可以包含命名捕获和位置捕获, replacement 可以引用它们: 可以在同一级别指定多个 如果多个指令可以应用于代理服务器响应的头字段,将选择第一个匹配的指令。 使用此指令,还可以向代理服务器发出的相对重定向添加主机名: 启用或禁用客户端请求体的缓冲。 当使用 HTTP/1.1 分块传输编码发送原始请求体时,无论指令值如何,请求体都将被缓冲,除非为代理 启用 HTTP/1.1、HTTP/2 或 HTTP/3。 如果该指令设置为非零值,Angie 将尝试通过使用 kqueue 方法的 备注 此指令在 Linux、Solaris 和 Windows 上被忽略。 设置向代理服务器传输请求的超时时间。超时仅在两次连续的写操作之间设置,而不是用于整个请求的传输。如果代理服务器在此时间内没有接收到任何内容,连接将被关闭。 允许重新定义传递给代理服务器的请求体。该值可以包含文本、变量及其组合。 允许重新定义或追加字段到 传递 给代理服务器的请求头。value 可以包含文本、变量及其组合。当且仅当当前级别没有定义 如果启用了缓存,原始请求中的头字段 可以像这样传递未更改的 "Host" 请求头字段: 但是,如果客户端请求头中不存在此字段,则不会传递任何内容。在这种情况下,最好使用 $host 变量 - 它的值等于 "Host" 请求头字段中的服务器名称,或者如果此字段不存在则为主服务器名称: 此外,服务器名称可以与代理服务器的端口一起传递: 如果头字段的值为空字符串,则此字段不会传递给代理服务器: 配置到代理服务器的出站连接的 "TCP keepalive" 行为。 默认情况下,套接字使用操作系统的设置。 为套接字打开 指定用于向被代理的 HTTPS 服务器进行身份验证的 PEM 格式证书。 该值的解释方式与 ssl_certificate 相同:可以是文件路径,也可以是 当启用 proxy_ssl_ntls 时,该指令接受两个参数而不是一个: 默认值 http, server, location 定义一个缓存,用于存储使用变量指定的 SSL 证书 和 私钥。 该指令支持以下参数: 受密码短语保护的密钥(参见 proxy_ssl_password_file)不会被缓存。 示例: 默认值 — http, server, location 指定用于向被代理的 HTTPS 服务器进行身份验证的 PEM 格式密钥。 该值(包括 当启用 proxy_ssl_ntls 时,该指令接受两个参数而不是一个: 指定向代理的 HTTPS 服务器发送请求时启用的加密套件。加密套件以 OpenSSL 库能够理解的格式指定。 加密套件列表取决于安装的 OpenSSL 版本。
可以使用 警告 当使用 OpenSSL 时, 在 LibreSSL 中,TLS 1.3 加密套件*可以*使用 在 BoringSSL 中,TLS 1.3 加密套件完全无法配置。 在与代理的 HTTPS 服务器建立连接时设置任意 OpenSSL 配置 命令。 备注 当使用 OpenSSL 1.0.2 或更高版本时支持该指令。
要使用 OpenSSL 配置 TLS 1.3 加密套件,请使用 可以在同一级别指定多个 警告 请注意,直接配置 OpenSSL 可能会导致意外行为。 指定一个包含 PEM 格式吊销证书 (CRL) 的文件,用于 验证 代理的 HTTPS 服务器的证书。 Added in version 1.12.0. 指定一个文件,用于以 SSLKEYLOGFILE 格式记录该上下文中到被代理的 HTTPS 服务器的连接的 SSL/TLS 密钥,该格式被 Wireshark 等工具用于解密捕获的 TLS 流量。 该指令不应与 LibreSSL 一起使用。 警告 该文件包含敏感的 TLS 密钥材料,可用于解密相应连接所捕获的流量。仅将此指令用于调试或协议分析,限制对该文件的访问,并在不再需要时将其删除。 允许覆盖用于 验证 代理的 HTTPS 服务器证书的服务器名称,以及在与代理的 HTTPS 服务器建立连接时 通过 SNI 传递 的服务器名称。 服务器名称也可以用变量指定。 默认情况下,使用 proxy_pass URL 的主机部分。 使用 Tongsuo TLS 库启用客户端对 NTLS 的支持。 备注 Angie 必须使用 指定一个包含 私钥 密码短语的文件,每个密码短语单独占一行。加载密钥时会依次尝试这些密码短语。 默认值 http, server, location 启用向代理的 HTTPS 服务器发送请求时使用的指定协议。 启用或禁用在与代理的 HTTPS 服务器建立连接时,通过 服务器名称指示 TLS 扩展(SNI,RFC 6066)传递由 proxy_ssl_name 指令设置的服务器名称。 确定在与代理服务器通信时是否可以重用 SSL 会话。如果日志中出现 指定一个包含 PEM 格式受信任 CA 证书的文件,用于 验证 代理的 HTTPS 服务器的证书。 启用或禁用对代理的 HTTPS 服务器证书的验证。 设置代理的 HTTPS 服务器证书链中的验证深度。 启用将文件保存到磁盘。 文件名可以使用带变量的 文件的修改时间根据响应中接收到的 此指令可用于创建静态不可变文件的本地副本,例如: 或者像这样: 默认值 http, server, location 设置新创建的文件和目录的访问权限,例如: 如果指定了任何 当启用将代理服务器的响应缓冲到临时文件时,限制一次写入临时文件的数据大小。默认情况下,大小受 proxy_buffer_size 和 proxy_buffers 指令设置的两个缓冲区限制。临时文件的最大大小由 proxy_max_temp_file_size 指令设置。 默认值 http, server, location 定义用于存储从代理服务器接收的数据的临时文件的目录。在指定目录下可以使用最多三级子目录层次结构。例如,在以下配置中 临时文件可能如下所示: 另请参阅 proxy_cache_path 指令的 本模块支持内置变量,可用于使用 proxy_set_header 指令组合头部: 客户端请求头字段 proxy_pass 指令中指定的被代理服务器的名称和端口; proxy_pass 指令中指定的被代理服务器的端口,或协议的默认端口;配置示例#
location / {
proxy_pass http://localhost:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_cache cache_zone;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
}
指令#
proxy_bind#
off 取消从上一级配置继承的 proxy_bind 指令的效果,允许系统自动分配本地 IP 地址和端口。$upstream_current_addr 变量。如果求得的值为空,则不进行绑定。transparent 参数允许到被代理服务器的出站连接从非本地 IP 地址发起,例如,从客户端的真实 IP 地址:proxy_bind $remote_addr transparent;
transparent 参数,工作进程会从主进程继承 CAP_NET_RAW 能力。proxy_buffer_size#
proxy_buffering#
onoff。当所有缓冲区都已占满且客户端读取速度比被代理服务器发送速度慢时,部分响应会被写入磁盘上的 临时文件。将被 缓存 或 存储 到磁盘的响应总是要经过临时文件。写入临时文件由 proxy_max_temp_file_size 和 proxy_temp_file_write_size 指令控制。缓冲功能会在被代理服务器发送完整个响应后立即释放该服务器,而不必为等待慢速客户端读取完毕而一直占用与其的连接。offoff 适用于必须在产生时就送达客户端的响应:Server-Sent Events、长轮询和流式传输。X-Accel-Buffering 响应头字段中传递 "yes" 或 "no" 来启用或禁用缓冲。可以使用 proxy_ignore_headers 指令禁用此功能。proxy_buffers#
proxy_busy_buffers_size#
proxy_cache#
offkeys_zone 值的 proxy_cache_path 指令来启用 缓存分片。这样做时,您应该设置使用此 keys_zone 值的 proxy_cache 指令的 path 参数:path=pathContent-Type 的示例:proxy_cache_path /cache/one keys_zone=zone:10m;
proxy_cache_path /cache/two keys_zone=zone;
map $upstream_http_content_type $cache {
~^text/ one;
default two;
}
server {
...
location / {
proxy_pass http://backend;
proxy_cache zone path=/cache/$cache;
proxy_cache_valid 200 10m;
}
}
Content-Type 以 text/ 开头,将选择第一个路径,
否则选择第二个。X-Accel-Expires 头(最高优先级)。max-age 或 s-maxage 参数的 Cache-Control 头。Expires 头。proxy_cache_background_update#
proxy_cache_background_update on | off;proxy_cache_background_update off;proxy_cache_bypass#
proxy_cache_bypass $cookie_nocache $arg_nocache$arg_comment;
proxy_cache_bypass $http_pragma $http_authorization;
proxy_cache_convert_head#
proxy_cache_key#
proxy_cache_key string;proxy_cache_key $scheme$proxy_host$request_uri;proxy_cache_key "$host$request_uri $cookie_user";
proxy_cache_key $scheme$proxy_host$uri$is_args$args;
proxy_cache_lock#
proxy_cache_lock_age#
proxy_cache_lock_timeout#
proxy_cache_max_range_offset#
proxy_cache_methods#
proxy_cache_methods GET | HEAD | POST ...;proxy_cache_methods GET HEAD;proxy_cache_min_uses#
proxy_cache_min_uses 计数器。该指令旨在保护缓存免受不频繁请求的污染,在清除时重置计数器可能会对性能产生负面影响。proxy_cache_path#
proxy_cache_path path [levels=levels] [use_temp_path=on | off] keys_zone=name:size[:file=file] [inactive=time] [max_size=size] [min_free=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time];levelsproxy_cache_path /data/angie/cache levels=1:2 keys_zone=one:10m;
/data/angie/cache/c/29/b7f54b2df7773722d382f4809d65029c
use_temp_path=on | offonon,将使用给定 location 的 proxy_temp_path 指令指定的目录offkeys_zonek 和 m 后缀也被接受;与 max_size 不同,
此参数不接受 g。keys_zone 指定可选的 file 时,
Angie 会在主进程终止时将该区域的内容转储到磁盘,
并在下次 启动 或 二进制升级 后
尝试在相同的内存地址恢复它,
以确保更可靠的数据持久性并减少缓存加载时间。failed to restore zone at address)
并且不会使用区域恢复机制。
相反,不兼容的文件将被重命名为 .old;
您可以删除它,
或恢复其名称并将 Angie 还原到最初创建此文件的配置和版本。inactivemax_size,基于不活动的删除也会进行,并且会忽略由 proxy_cache_valid 配置的有效期。inactive 为 10 分钟。keys_zone 值指定多个 proxy_cache_path 指令。共享内存区域大小只能在第一个指令中指定。将根据相应 proxy_cache 指令的 path 参数在指令之间进行选择。max_sizek、m 和 g 后缀也被接受。
默认情况下,缓存大小不受限制。min_freemax_size 相同的单位。
默认值 0 表示禁用可用空间监控。min_free is not supported on this platform, ignored。manager_files100。manager_threshold200 毫秒。manager_sleep50 毫秒。loader_files 参数指定的有限数量的项,
确保不超过 loader_threshold,
然后进行由 loader_sleep 定义的短暂暂停,
再继续处理下一批。
迭代会持续进行,
直到加载器处理完磁盘上所有现有的缓存条目:loader_files100loader_threshold200 毫秒loader_sleep50 毫秒keys_zone 参数指定 file 不会影响缓存加载器的操作。proxy_cache_revalidate#
If-Modified-Since 和 If-None-Match 头字段的条件请求来重新验证过期的缓存项。proxy_cache_use_stale#
proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | http_429 | non_idempotent | off ...;proxy_cache_use_stale off;errorupdatingnon_idempotentPOST 可以被缓存,并且必须由 proxy_cache_methods 启用。Cache-Control 头字段的 stale-while-revalidate 扩展允许在缓存响应当前正在更新时使用过期的缓存响应。Cache-Control 头字段的 stale-if-error 扩展允许在发生错误时使用过期的缓存响应。proxy_cache_valid#
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
proxy_cache_valid 5m;
any 参数来缓存任何响应:proxy_cache_valid 200 302 10m;
proxy_cache_valid 301 1h;
proxy_cache_valid any 1m;
X-Accel-Expires 头字段以秒为单位设置响应的缓存时间。零值会禁用响应的缓存。如果值以 @ 前缀开头,则设置自 Epoch 以来的绝对时间(以秒为单位),直到该时间响应可以被缓存。X-Accel-Expires 字段,则可以在 Expires 或 Cache-Control 头字段中设置缓存参数。Set-Cookie 字段,则不会缓存此类响应。*" 的 Vary 字段,则不会缓存此类响应。如果头中包含其他值的 Vary 字段,则会考虑相应的请求头字段来缓存此类响应。proxy_connect_timeout#
proxy_connection_drop#
DELETE 标记为永久不可用后,终止到该服务器的所有活动连接。
缓存 中的空闲连接不受影响。on 时,连接将立即断开。proxy_force_ranges#
Accept-Ranges 字段如何,都为来自被代理服务器的缓存和非缓存响应启用字节范围支持。proxy_headers_hash_bucket_size#
proxy_headers_hash_max_size#
proxy_hide_header#
Date、Server、X-Pad 和 X-Accel-... 头字段传递给客户端。proxy_hide_header 指令设置不会被传递的附加字段。相反,如果需要允许传递字段,可以使用 proxy_pass_header 指令。proxy_http3_hq#
hq-interop 协商模式,
该模式用于 Angie 依赖的
QUIC
互操作性测试。proxy_http3_max_concurrent_streams#
proxy_http3_max_concurrent_streams number;proxy_http3_max_concurrent_streams 128;proxy_http3_max_table_capacity#
proxy_http3_max_table_capacity number;proxy_http3_max_table_capacity 4096;proxy_http3_stream_buffer_size#
proxy_http_version#
proxy_http_version 1.0 | 1.1 | 2 | 3;proxy_http_version 1.1;proxy_ignore_client_abort#
proxy_ignore_headers#
X-Accel-Redirect、X-Accel-Expires、X-Accel-Limit-Rate、X-Accel-Buffering、X-Accel-Charset、Expires、Cache-Control、Set-Cookie 和 Vary。proxy_intercept_errors#
proxy_limit_rate#
0proxy_max_temp_file_size#
0proxy_method#
proxy_next_upstream#
proxy_next_upstream error | timeout | invalid_header | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | http_429 | non_idempotent | off ...;proxy_next_upstream error timeout;errortimeoutinvalid_headerhttp_500http_502http_503http_504http_403http_404http_429non_idempotentPOST、LOCK、PATCH)的请求传递给下一个
服务器;启用此选项将明确允许重试此类请求;offerrortimeoutinvalid_headerhttp_500http_502http_503http_504http_429http_403http_404proxy_next_upstream_timeout#
0proxy_next_upstream_tries#
0proxy_no_cache#
proxy_no_cache $cookie_nocache $arg_nocache$arg_comment;
proxy_no_cache $http_pragma $http_authorization;
proxy_pass#
http 或 https。地址可以指定为域名或 IP 地址,以及一个可选的端口:proxy_pass http://localhost:8000/uri/;
unix 关键字之后,并用冒号括起来:proxy_pass http://unix:/tmp/backend.socket:/uri/;
proxy_pass 中不包含变量且与已定义的
服务器组 不匹配的域名,
会隐式创建一个仅含单个服务器的服务器组,等价于:upstream example.com {
server example.com;
}
http 配置中共享,
与 proxy_pass 所在的 server 块无关。
由于隐式创建的 server 没有
resolve 参数,该名称仅在配置加载时解析一次,
所获得的地址会一直使用到下次重载为止,即使配置了
resolver 也是如此。proxy_pass 的变量求值为同一名称时,
它会复用这个已有的服务器组及其加载时的地址,
而不会通过 resolver 在每次请求时解析该名称。
要在运行时重新解析该名称并跟随 DNS 变化,
请显式定义该服务器组,并为其 server
添加 resolve 参数。proxy_pass 指令 带有 URI 指定,那么当请求传递给服务器时,
规范化 请求 URI 中与 location 匹配的部分将被指令中指定的 URI 替换:location /name/ {
proxy_pass http://127.0.0.1/remote/;
}
/name/page 请求会变为 /remote/page。proxy_pass 不带 URI 指定,只要 Angie 在代理请求前没有更改 URI 或参数,
服务器收到的就是客户端发送的原样请求 URI 及其参数
(即 $request_uri 的值)。
否则,服务器收到的是 $uri 的当前值
(即 规范化 后的 URI),后接当前参数。
这种情况下,路径中不能按字面出现的字符(例如空格)会重新进行百分号编码,参数则按原样传递。X-Accel-Redirect 响应头字段触发。X-Accel-Redirect 进行的。/some/path/%7Euser//a%20b?x=1。
在下面的配置中,服务器收到的请求 URI 保持不变:location /some/path/ {
proxy_pass http://127.0.0.1;
}
location /some/path/ {
rewrite ^/some/path/(.*)$ /other/$1 break;
proxy_pass http://127.0.0.1;
}
/other/~user/a%20b?x=1:%7E 被解码,
双斜杠被合并,空格被重新编码。location 使用正则表达式指定时,在命名 location 或
组合 location 内部,以及在 if 或
limit_except 块内部。proxy_pass 必须不带 URI 指定,
否则 Angie 将拒绝加载配置。location 内部使用带 break 标志的 rewrite 指令更改 URI,
使请求仍留在该 location 中时:location /name/ {
rewrite /name/([^/]+) /users?name=$1 break;
proxy_pass http://127.0.0.1;
}
proxy_pass 中使用变量时:location /name/ {
proxy_pass http://127.0.0.1$request_uri;
}
proxy_pass 放置在前缀带有尾部斜杠的 location 中
(例如, location /name/),
并且 auto_redirect 指令设置为 default,
则不带尾部斜杠的请求将被重定向 (/name -> /name/)。proxy_pass_header#
proxy_pass_request_body#
location /x-accel-redirect-here/ {
proxy_method GET;
proxy_pass_request_body off;
proxy_set_header Content-Length "";
proxy_pass ...;
}
proxy_pass_request_headers#
location /x-accel-redirect-here/ {
proxy_method GET;
proxy_pass_request_headers off;
proxy_pass_request_body off;
proxy_pass ...;
}
proxy_pass_trailers#
location / {
proxy_http_version 1.1;
proxy_set_header Connection "te";
proxy_set_header TE "trailers";
proxy_pass_trailers on;
proxy_pass ...;
}
proxy_quic_active_connection_id_limit#
proxy_quic_active_connection_id_limit number;proxy_quic_active_connection_id_limit 2;active_connection_id_limit 传输参数值。
这是每个服务器可以维护的最大活动
连接 ID
数量。proxy_quic_gso#
proxy_quic_host_key#
proxy_read_timeout#
proxy_redirect#
proxy_redirect default;proxy_redirect off;proxy_redirect redirect replacement;proxy_redirect default;Location: http://localhost:8000/two/some/uri/
proxy_redirect http://localhost:8000/two/ http://frontend/one/;
Location: http://frontend/one/some/uri/
proxy_redirect http://localhost:8000/two/ /;
default 参数指定的默认替换使用 location 和 proxy_pass 指令的参数。因此,以下两个配置是等效的:location /one/ {
proxy_pass http://upstream:port/two/;
proxy_redirect default;
}
location /one/ {
proxy_pass http://upstream:port/two/;
proxy_redirect http://upstream:port/two/ /one/;
}
default 参数。proxy_redirect http://localhost:8000/ http://$host:$server_port/;
proxy_redirect http://$proxy_host:8000/ /;
proxy_redirect ~^(http://[^:]+):\d+(/.+)$ $1$2;
proxy_redirect ~*/user/([^/]+)/(.+)$ http://$1.example.com/$2;
proxy_redirect 指令:proxy_redirect default;
proxy_redirect http://localhost:8000/ /;
proxy_redirect http://www.example.com/ /;
off 参数取消从上一级配置继承的 proxy_redirect 指令的效果。proxy_redirect / /;
proxy_request_buffering#
proxy_send_lowat#
NOTE_LOWAT 标志或 SO_SNDLOWAT 套接字选项,以指定的大小最小化到代理服务器的出站连接上的发送操作数量。proxy_send_timeout#
proxy_set_body#
proxy_set_header#
proxy_set_header 指令时,这些指令才从上一级配置继承。默认情况下,只重新定义两个字段:proxy_set_header Host $proxy_host;
proxy_set_header Connection close;
If-Modified-Since、If-Unmodified-Since、If-None-Match、If-Match、Range 和 If-Range 不会传递给代理服务器。proxy_set_header Host $http_host;
proxy_set_header Host $host;
proxy_set_header Host $host:$proxy_port;
proxy_set_header Accept-Encoding "";
proxy_socket_keepalive#
offonSO_KEEPALIVE 套接字选项。proxy_ssl_certificate#
data: 前缀之后的证书 PEM 文本。值中可以包含变量;每次 Angie 与被代理的 HTTPS 服务器建立连接时都会对其求值,因此请求的所有变量均可使用,包括由 set 赋值的变量。如果求值后的证书值为空,则不发送客户端证书。为避免每个连接都加载证书,请启用 proxy_ssl_certificate_cache。location /proxy {
proxy_ssl_ntls on;
proxy_ssl_certificate sign.crt enc.crt;
proxy_ssl_certificate_key sign.key enc.key;
proxy_ssl_ciphers "ECC-SM2-WITH-SM4-SM3:ECDHE-SM2-WITH-SM4-SM3:RSA";
proxy_pass https://backend:443;
}
proxy_ssl_certificate_cache#
proxy_ssl_certificate_cache off;proxy_ssl_certificate_cache max=N [inactive=time] [valid=time];proxy_ssl_certificate_cache off;max — 设置缓存中的最大元素数量。当缓存溢出时,将删除最近最少使用 (LRU) 的元素。inactive — 定义元素在此时间内未被访问即会被删除的时长,即使其仍处于 valid 周期内;每次访问都会重置此计时器。默认为 10 秒。valid — 定义缓存元素无需检查即可重用的时长。默认为 60 秒。此时间过后,从文件加载的元素仅在文件已更改时才会重新加载,而通过 engine: 或 store: 前缀加载的密钥会再次加载;使用 data: 前缀指定的元素保持有效。off — 禁用缓存。proxy_ssl_certificate /etc/angie/ssl/$host.crt;
proxy_ssl_certificate_key /etc/angie/ssl/$host.key;
proxy_ssl_certificate_cache max=1000 inactive=20s valid=1m;
proxy_ssl_certificate_key#
proxy_ssl_certificate_key file [file] | data:key | engine:name:id | store:uri;engine: 和 store: 前缀)的解释方式与 ssl_certificate_key 相同,其中的变量按 proxy_ssl_certificate 中所述的方式工作。受密码短语保护的密钥使用 proxy_ssl_password_file 中的密码短语解密。location /proxy {
proxy_ssl_ntls on;
proxy_ssl_certificate sign.crt enc.crt;
proxy_ssl_certificate_key sign.key enc.key;
proxy_ssl_ciphers "ECC-SM2-WITH-SM4-SM3:ECDHE-SM2-WITH-SM4-SM3:RSA";
proxy_pass https://backend:443;
}
proxy_ssl_ciphers#
openssl ciphers 命令查看完整列表。proxy_ssl_ciphers 指令*不*配置 TLS 1.3 的加密套件。要使用 OpenSSL 调整 TLS 1.3 加密套件,请使用 proxy_ssl_conf_command 指令,该指令是为支持高级 SSL 配置而添加的。proxy_ssl_ciphers 配置。proxy_ssl_conf_command#
ciphersuites 命令。proxy_ssl_conf_command 指令。当且仅当当前级别没有定义 proxy_ssl_conf_command 指令时,这些指令才会从上一级配置继承。proxy_ssl_crl#
proxy_ssl_keylog_file#
proxy_ssl_name#
proxy_ssl_ntls#
location /proxy {
proxy_ssl_ntls on;
proxy_ssl_certificate sign.crt enc.crt;
proxy_ssl_certificate_key sign.key enc.key;
proxy_ssl_ciphers "ECC-SM2-WITH-SM4-SM3:ECDHE-SM2-WITH-SM4-SM3:RSA";
proxy_pass https://backend:443;
}
--with-ntls 配置参数和支持 NTLS 的 SSL 库进行构建:$ ./configure --with-openssl=../Tongsuo-8.3.0 \
--with-openssl-opt=enable-ntls \
--with-ntls
proxy_ssl_password_file#
proxy_ssl_protocols#
proxy_ssl_protocols SSLv2 | SSLv3 | TLSv1 | TLSv1.1 | TLSv1.2 | TLSv1.3 ...;proxy_ssl_protocols TLSv1.2 TLSv1.3;proxy_ssl_server_name#
proxy_ssl_session_reuse#
SSL3_GET_FINISHED:digest check failed 错误,请尝试禁用会话重用。proxy_ssl_trusted_certificate#
proxy_ssl_verify#
proxy_ssl_verify_depth#
proxy_store#
string 显式设置:proxy_store /data/www$original_uri;
Last-Modified 头字段设置。响应首先写入临时文件,然后重命名该文件。临时文件和响应的持久存储可以位于不同的文件系统上。但是,请注意,在这种情况下,文件将从一个文件系统复制到另一个文件系统,而不是在一个文件系统内进行廉价的重命名操作。因此建议对于任何给定的位置,保存的文件和由 proxy_temp_path 指令设置的临时文件目录都放在同一个文件系统上。location /images/ {
root /data/www;
error_page 404 = /fetch$uri;
}
location /fetch/ {
internal;
proxy_pass http://backend/;
proxy_store on;
proxy_store_access user:rw group:rw all:r;
proxy_temp_path /data/temp;
alias /data/www/;
}
location /images/ {
root /data/www;
error_page 404 = @fetch;
}
location @fetch {
internal;
proxy_pass http://backend;
proxy_store on;
proxy_store_access user:rw group:rw all:r;
proxy_temp_path /data/temp;
root /data/www;
}
proxy_store_access#
proxy_store_access users:permissions [users:permissions] [users:permissions];proxy_store_access user:rw;proxy_store_access user:rw group:rw all:r;
group 或 all 访问权限,则可以省略 user 权限:proxy_store_access group:rw all:r;
proxy_temp_file_write_size#
proxy_temp_path#
proxy_temp_path path [level1 [level2 [level3]]];proxy_temp_path proxy_temp;
(路径取决于 构建选项 --http-proxy-temp-path)proxy_temp_path /spool/angie/proxy_temp 1 2;
/spool/angie/proxy_temp/7/45/00000123457
use_temp_path 参数。内置变量#
$proxy_add_x_forwarded_for#X-Forwarded-For 附加 $remote_addr 变量后的值,以逗号分隔。如果客户端请求头中不存在 X-Forwarded-For 字段,则 $proxy_add_x_forwarded_for 变量等于 $remote_addr 变量。$proxy_host#$proxy_port#