代理#

允许通过 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#

语法

proxy_bind address [transparent] | off;

默认值

上下文

stream, server

使发往被代理服务器的出站连接从指定的本地 IP 地址发起。参数值可以包含变量。特殊值 off 取消从先前配置级别继承的 proxy_bind 指令的效果,从而允许系统自动分配本地 IP 地址。

transparent 参数允许从非本地 IP 地址发起出站连接,例如,从客户端的真实 IP 地址:

proxy_bind $remote_addr transparent;

为了使此参数生效,Angie 工作进程通常需要以 超级用户 权限运行。在 Linux 上,这不是必需的:如果指定了 transparent 参数,工作进程将从主进程继承 CAP_NET_RAW 权限。

重要

内核路由表也应该配置为拦截来自 FastCGI 服务器的网络流量。

proxy_buffer_size#

语法

proxy_buffer_size size;

默认值

proxy_buffer_size 16k;

上下文

stream, server

设置用于从被代理服务器读取数据的缓冲区大小。还设置用于从客户端读取数据的缓冲区大小。

proxy_connect_timeout#

语法

proxy_connect_timeout time;

默认值

proxy_connect_timeout 60s;

上下文

stream, server

定义与被代理服务器建立连接的超时时间。

proxy_connection_drop#

语法

proxy_connection_drop time | on | off;

默认值

proxy_connection_drop off;

上下文

stream, server

在被代理服务器从组中移除或被 reresolve 进程或 API 命令 DELETE 标记为永久不可用后,启用终止与该服务器的所有会话。

当为客户端或被代理服务器处理下一个读或写事件时,会话被终止。

设置 time 启用会话终止 超时;如果设置为 on,会话将立即被丢弃。

proxy_download_rate#

语法

proxy_download_rate rate;

默认值

proxy_download_rate 0;

上下文

stream, server

限制从被代理服务器读取数据的速度。 rate 以每秒字节为单位指定。

0

禁用速率限制

备注

限制是针对每个连接设置的,因此如果 Angie 同时打开两个连接到被代理服务器,则整体速率将是指定限制的两倍。

参数值可以包含变量。在需要根据某种条件限制速率的情况下,这可能会很有用:

map $slow $rate {
    1     4k;
    2     8k;
}

proxy_download_rate $rate;

proxy_half_close#

语法

proxy_half_close on | off;

默认值

proxy_half_close off;

上下文

stream, server

启用或禁用独立关闭 TCP 连接的每个方向(“TCP 半关闭”)。如果启用,TCP 的代理将保持,直到双方都关闭连接。

proxy_next_upstream#

语法

proxy_next_upstream on | off;

默认值

proxy_next_upstream on;

上下文

stream, server

当无法建立与被代理服务器的连接时,决定是否将客户端连接传递给 上游池 中的下一个服务器。

将连接传递给下一个服务器可以受到 尝试次数时间 的限制。

proxy_next_upstream_timeout#

语法

proxy_next_upstream_timeout time;

默认值

proxy_next_upstream_timeout 0;

上下文

stream, server

限制传递连接到 下一个 服务器的时间。

0

关闭此限制

proxy_next_upstream_tries#

语法

proxy_next_upstream_tries number;

默认值

proxy_next_upstream_tries 0;

上下文

stream, server

限制将连接传递给 下一个 服务器的可能尝试次数。

0

关闭此限制

proxy_pass#

语法

proxy_pass address;

默认值

上下文

server

设置被代理服务器的地址。 address 可以指定为域名或 IP 地址,以及端口:

proxy_pass localhost:12345;

或作为 UNIX 域套接字路径:

proxy_pass unix:/tmp/stream.socket;

如果域名解析为多个地址,则将以轮询的方式使用所有这些地址。此外,地址可以指定为 服务器组。 如果使用了组,则不能与之指定端口;而应为组内的每个服务器单独指定端口。

地址也可以使用变量指定:

proxy_pass $upstream;

在这种情况下,服务器名称将在描述的 服务器组 中进行搜索,如果未找到,则通过 resolver 确定。

proxy_protocol#

语法

proxy_protocol on | off;

默认值

proxy_protocol off;

上下文

stream, server

启用与被代理服务器连接的 PROXY 协议

proxy_requests#

语法

proxy_requests number;

默认值

proxy_requests 0;

上下文

stream, server

设置在丢弃客户端与现有 UDP 流会话之间的绑定时所需的客户端数据报数量。在接收到指定数量的数据报后,来自同一客户端的下一个数据报将启动一个新会话。当所有客户端数据报传输到被代理服务器并收到预期的 响应数量 时,会话终止,或者当达到 超时 时。

proxy_responses#

语法

proxy_responses number;

默认值

上下文

stream, server

设置在使用 UDP 协议时,预期从被代理服务器收到的客户端数据报数量。该数量作为会话终止的提示。默认情况下,数据报的数量没有限制。

如果指定零值,则不期望任何响应。然而,如果收到响应且会话仍未结束,则将处理该响应。

proxy_socket_keepalive#

语法

proxy_socket_keepalive on | off;

默认值

proxy_socket_keepalive off;

上下文

stream, server

配置与被代理服务器的出站连接的 "TCP keepalive" 行为。

""

默认情况下,套接字使用操作系统的设置。

on

为套接字开启 SO_KEEPALIVE 套接字选项。

proxy_ssl#

语法

proxy_ssl on | off;

默认值

proxy_ssl off;

上下文

stream, server

启用与被代理服务器的 SSL/TLS 协议。

proxy_ssl_certificate#

语法

proxy_ssl_certificate file;

默认值

上下文

stream, server

指定用于与被代理服务器进行身份验证的 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#

语法

proxy_ssl_certificate_key file;

默认值

上下文

stream, server

指定用于认证代理服务器的 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#

语法

proxy_ssl_ciphers ciphers;

默认值

proxy_ssl_ciphers DEFAULT;

上下文

stream, server

指定对代理服务器请求启用的密码。密码以 OpenSSL 库可理解的格式指定。

密码列表取决于已安装的 OpenSSL 版本。可以使用 openssl ciphers 命令查看完整列表。

proxy_ssl_conf_command#

语法

proxy_ssl_conf_command name value;

默认值

上下文

stream, server

在与代理服务器建立连接时设置任意 OpenSSL 配置 commands

重要

此指令在使用 OpenSSL 1.0.2 或更高版本时受支持。

可以在同一层级上指定多个 proxy_ssl_conf_command 指令。仅当当前层级没有定义 proxy_ssl_conf_command 指令时,这些指令才会从上一个配置级别继承。

小心

请注意,直接配置 OpenSSL 可能导致意外行为。

proxy_ssl_crl#

语法

proxy_ssl_crl file;

默认值

上下文

stream, server

指定 PEM 格式的撤销证书文件 (CRL),用于 验证 代理服务器的证书。

proxy_ssl_name#

语法

proxy_ssl_name name;

默认值

proxy_ssl_name $proxy_host;

上下文

stream, server

允许覆盖用于 验证 代理服务器证书的服务器名称,并在与代理服务器建立连接时通过 SNI 传递。

默认情况下,使用 proxy_pass 地址的主机部分。

proxy_ssl_ntls#

Added in version 1.2.0.

语法

proxy_ssl_ntls on | off;

默认值

proxy_ssl_ntls off;

上下文

stream, server

启用客户端对 NTLS 的支持,使用 TongSuo 库。

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_password_file file;

默认值

上下文

stream, server

指定包含 私钥 密码的文件,每个密码单独一行。当加载密钥时,依次尝试密码。

proxy_ssl_protocols#

语法

proxy_ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2] [TLSv1.3];

默认值

proxy_ssl_protocols TLSv1.2 TLSv1.3;

上下文

stream, server

在 1.2.0 版本发生变更: TLSv1.3 参数添加到默认集。

启用对代理服务器请求的指定协议。

proxy_ssl_server_name#

语法

proxy_ssl_server_name on | off;

默认值

proxy_ssl_server_name off;

上下文

stream, server

启用或禁用通过 proxy_ssl_name 指令设置的服务器名称的传递 通过 服务器名称指示 TLS 扩展 (SNI, RFC 6066) 在与代理服务器建立连接时。

proxy_ssl_session_reuse#

语法

proxy_ssl_session_reuse on | off;

默认值

proxy_ssl_session_reuse on;

上下文

stream, server

确定在与代理服务器工作时是否可以重用 SSL 会话。如果日志中出现错误 "SSL3_GET_FINISHED:digest check failed",请尝试禁用 会话重用

proxy_ssl_trusted_certificate#

语法

proxy_ssl_trusted_certificate file;

默认值

上下文

http, server, location

指定用于 验证 代理服务器证书的 PEM 格式的受信任 CA 证书文件。

proxy_ssl_verify#

语法

proxy_ssl_verify on | off;

默认值

proxy_ssl_verify off;

上下文

stream, server

启用或禁用对代理服务器证书的验证。

proxy_ssl_verify_depth#

语法

proxy_ssl_verify_depth number;

默认值

proxy_ssl_verify_depth 1;

上下文

stream, server

设置代理服务器证书链中的验证深度。

proxy_timeout#

语法

proxy_timeout timeout;

默认值

proxy_timeout 10m;

上下文

stream, server

设置客户端或代理服务器连接上两个连续读或写操作之间的超时。如果在此时间内没有传输数据,则连接将关闭。

upstream_probe_timeout (PRO)#

Added in version 1.4.0: PRO

语法

upstream_probe_timeout time;

默认值

upstream_probe_timeout 50s;

上下文

server

设置已建立的服务器连接的最大非活动 时间,用于使用 upstream_probe (PRO) 指令配置的探测;如果超出此限制,连接将关闭。

proxy_upload_rate#

语法

proxy_upload_rate rate;

默认值

proxy_upload_rate 0;

上下文

stream, server

限制从客户端读取数据的速度。 rate 以每秒字节数为单位指定。

0

禁用速率限制

备注

限制是针对每个连接设置的,因此如果客户端同时打开两个连接,则整体速率将是指定限制的两倍。

参数值可以包含变量。这在需要根据某种条件限制速率的情况下可能很有用:

map $slow $rate {
    1     4k;
    2     8k;
}

proxy_upload_rate $rate;