代理#
允许通过 TCP、UDP 和 UNIX 域套接字代理数据流。
配置示例#
server {
listen 127.0.0.1:12345;
proxy_pass 127.0.0.1:8080;
}
server {
listen 12345;
proxy_connect_timeout 1s;
proxy_timeout 1m;
proxy_pass example.com:12345;
}
server {
listen 53 udp reuseport;
proxy_timeout 20s;
proxy_pass dns.example.com:53;
}
server {
listen [::1]:12345;
proxy_pass unix:/tmp/stream.socket;
}
指令#
proxy_bind#
使到代理服务器的出站连接来源于指定的本地 IP 地址。参数值可以包含变量。特殊值 off
取消从先前配置级别继承的 proxy_bind 指令的效果,允许系统自动分配本地 IP 地址。
transparent
参数允许到代理服务器的出站连接来源于非本地 IP 地址,例如,来自客户端的真实 IP 地址:
proxy_bind $remote_addr transparent;
要使此参数生效,Angie 工作进程通常需要以 超级用户 权限运行。在 Linux 上,若指定 transparent
参数,则工作进程从主进程继承 CAP_NET_RAW 能力,这不是必需的。
重要
内核路由表也应配置以拦截来自 FastCGI 服务器的网络流量。
proxy_buffer_size#
设置用于从代理服务器读取数据的缓冲区大小。也设置从客户端读取数据的缓冲区大小。
proxy_connect_timeout#
定义与代理服务器建立连接的超时时间。
proxy_connection_drop#
启用在代理服务器被从组中移除或被 reresolve 进程或 API 命令 DELETE
标记为永久不可用后终止与其的所有会话。
在为客户端或代理服务器处理下一个读取或写入事件时,终止会话。
设置 time 启用会话终止 超时;设置 on
时,会话立即终止。
proxy_download_rate#
限制从代理服务器读取数据的速度。rate
以每秒字节数指定。
|
禁用速率限制 |
备注
限制是针对每个连接设置的,因此如果 Angie 同时打开两个到代理服务器的连接,总速率将是指定限制的两倍。
参数值可以包含变量。在速率应根据某个条件限制的情况下可能会有用:
proxy_download_rate $rate;
map $slow $rate {
1 4k;
2 8k;
}
proxy_half_close#
启用或禁用独立关闭 TCP 连接的每个方向(“TCP 半关闭”)。如果启用,TCP 上的代理将在双方关闭连接之前保持。
proxy_next_upstream#
当无法建立与代理服务器的连接时,确定是否将客户端连接传递给下一个 上游池 中的服务器。
proxy_next_upstream_timeout#
限制传递连接到 下一个 服务器的允许时间。
|
关闭此限制 |
proxy_next_upstream_tries#
限制尝试将连接传递到 下一个 服务器的可能次数。
|
关闭此限制 |
proxy_pass#
设置代理服务器的地址。address
可以指定为域名或 IP 地址和端口:
proxy_pass localhost:12345;
或为 UNIX 域套接字路径:
proxy_pass unix:/tmp/stream.socket;
如果域名解析为多个地址,则会以循环方式使用所有这些地址。此外,地址可以指定为 服务器组。如果使用了组,则不能与其一起指定端口;而应分别为组内的每个服务器指定端口。
地址还可以使用变量指定:
proxy_pass $upstream;
proxy_protocol#
为连接到代理服务器启用 PROXY 协议。
proxy_requests#
设置在客户端与现有 UDP 流会话之间解除绑定时的客户端数据报数量。在接收到指定数量的数据报后,同一客户端的下一个数据报开始一个新会话。当所有客户端数据报都传输到代理服务器并接收到预期的 响应数量 时,或在达到 超时 时,会话终止。
proxy_responses#
设置在使用 UDP 协议时期望代理服务器响应的客户端数据报数量。该数量作为会话终止的提示。默认情况下,数据报数量不受限制。
如果指定零值,则不期望响应。然而,如果接收到响应且会话仍未完成,则将处理该响应。
proxy_socket_keepalive#
配置到代理服务器的出站连接的“TCP keepalive”行为。
|
默认情况下,套接字的操作系统设置生效。 |
|
为套接字打开 SO_KEEPALIVE 套接字选项。 |
proxy_ssl#
为连接到代理服务器启用 SSL/TLS 协议。
proxy_ssl_certificate#
指定用于对代理服务器进行身份验证的 PEM 格式证书文件。文件名中可以使用变量。
Added in version 1.2.0.
当启用 proxy_ssl_ntls 时,该指令接受两个参数而非一个,即证书的签名和加密部分:
server {
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 backend:12345;
}
proxy_ssl_certificate_key#
指定用于验证代理服务器的 PEM 格式的秘密密钥文件。变量可以在文件名中使用。
Added in version 1.2.0.
当启用 proxy_ssl_ntls 时,该指令接受两个参数而非一个,即密钥的签名和加密部分:
server {
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 backend:12345;
}
proxy_ssl_ciphers#
指定请求代理服务器时启用的加密套件。加密套件以 OpenSSL 库理解的格式指定。
完整列表可通过 "openssl ciphers" 命令查看。
proxy_ssl_conf_command#
在与代理服务器建立连接时,设置任意 OpenSSL 配置 命令。
重要
该指令在使用 OpenSSL 1.0.2 或更高版本时支持。
多个 proxy_ssl_conf_command 指令可以在同一级别指定。只有在当前级别没有定义 proxy_ssl_conf_command 指令时,这些指令才会从先前的配置级别继承。
小心
请注意,直接配置 OpenSSL 可能会导致意外行为。
proxy_ssl_crl#
指定用于 验证 代理服务器证书的 PEM 格式的撤销证书文件(CRL)。
proxy_ssl_name#
允许覆盖用于 验证 代理服务器证书的服务器名称,并在与代理服务器建立连接时通过 SNI 传递。
默认情况下,使用 proxy_pass 地址的主机部分。
proxy_ssl_ntls#
Added in version 1.2.0.
启用使用 TongSuo 库的客户端 NTLS 支持。
server {
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 backend:12345;
}
重要
使用 --with-ntls 构建选项构建 Angie,并链接具有 NTLS 支持的 SSL 库
./configure --with-openssl=../Tongsuo-8.3.0 \
--with-openssl-opt=enable-ntls \
--with-ntls
proxy_ssl_password_file#
指定用于 秘密密钥 的密码文件,其中每个密码单独占一行。在加载密钥时依次尝试这些密码。
proxy_ssl_protocols#
|
|
默认值 |
|
stream, server |
在 1.2.0 版本发生变更: 默认集合中添加了 TLSv1.3
参数。
启用请求代理服务器时使用的指定协议。
proxy_ssl_server_name#
启用或禁用通过 proxy_ssl_name 指令设置的服务器名称,通过 服务器名称指示 TLS 扩展 (SNI, RFC 6066) 在与代理服务器建立连接时传递。
proxy_ssl_session_reuse#
决定在与代理服务器交互时是否可以重用 SSL 会话。如果日志中出现 "SSL3_GET_FINISHED:digest check failed" 错误,请尝试禁用 会话重用。
proxy_ssl_trusted_certificate#
指定用于 验证 代理服务器证书的 PEM 格式的受信任 CA 证书文件。
proxy_ssl_verify#
启用或禁用对代理服务器证书的验证。
proxy_ssl_verify_depth#
设置代理服务器证书链的验证深度。
proxy_timeout#
设置客户端或代理服务器连接上两次连续读写操作之间的超时时间。如果在此时间内没有传输数据,则关闭连接。
upstream_probe_timeout (PRO)#
Added in version 1.4.0: PRO
设置通过 upstream_probe (PRO) 指令配置的探测的已建立服务器连接的最大不活动 时间;如果超过此限制,连接将被关闭。
proxy_upload_rate#
限制从客户端读取数据的速度。rate
以每秒字节数指定。
|
禁用速率限制 |
备注
该限制是针对每个连接设置的,因此如果客户端同时打开两个连接,总速率将是指定限制的两倍。
参数值可以包含变量。在需要根据某些条件限制速率的情况下可能会有用:
map $slow $rate {
1 4k;
2 8k;
}
proxy_upload_rate $rate;