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