模块 ngx_stream_proxy_module

示例配置
指令
     proxy_bind
     proxy_buffer_size
     proxy_connect_timeout
     proxy_download_rate
     proxy_half_close
     proxy_next_upstream
     proxy_next_upstream_timeout
     proxy_next_upstream_tries
     proxy_pass
     proxy_protocol
     proxy_requests
     proxy_responses
     proxy_session_drop
     proxy_socket_keepalive
     proxy_ssl
     proxy_ssl_certificate
     proxy_ssl_certificate_key
     proxy_ssl_ciphers
     proxy_ssl_conf_command
     proxy_ssl_crl
     proxy_ssl_key_log
     proxy_ssl_name
     proxy_ssl_password_file
     proxy_ssl_protocols
     proxy_ssl_server_name
     proxy_ssl_session_reuse
     proxy_ssl_trusted_certificate
     proxy_ssl_verify
     proxy_ssl_verify_depth
     proxy_timeout
     proxy_upload_rate

ngx_stream_proxy_module 模块 (1.9.0) 允许通过 TCP、UDP (1.9.13) 和 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 地址 [transparent] | off;
默认值
上下文 stream, server

此指令出现在 1.9.2 版本中。

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

transparent 参数 (1.11.0) 允许传出到代理服务器的连接源自非本地 IP 地址,例如,来自客户端的真实 IP 地址。

proxy_bind $remote_addr transparent;

为了使此参数生效,通常需要以 超级用户 权限运行 Nginx 工作进程。在 Linux 上,不需要 (1.13.8),因为如果指定了 transparent 参数,工作进程将从主进程继承 CAP_NET_RAW 功能。还需要配置内核路由表以拦截来自代理服务器的网络流量。

语法 proxy_buffer_size 大小;
默认值
proxy_buffer_size 16k;
上下文 stream, server

此指令出现在 1.9.4 版本中。

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

语法 proxy_connect_timeout 时间;
默认值
proxy_connect_timeout 60s;
上下文 stream, server

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

语法 proxy_download_rate 速率;
默认值
proxy_download_rate 0;
上下文 stream, server

此指令出现在 1.9.3 版本中。

限制从代理服务器读取数据的速度。速率 以每秒字节数指定。零值禁用速率限制。限制针对每个连接设置,因此,如果 Nginx 同时打开两个到代理服务器的连接,则总体速率将是指定限制的两倍。

参数值可以包含变量 (1.17.0)。在需要根据特定条件限制速率的情况下可能很有用。

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

proxy_download_rate $rate;

语法 proxy_half_close on | off;
默认值
proxy_half_close off;
上下文 stream, server

此指令出现在 1.21.4 版本中。

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

语法 proxy_next_upstream on | off;
默认值
proxy_next_upstream on;
上下文 stream, server

当无法建立与代理服务器的连接时,确定是否将客户端连接传递到下一个服务器。

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

语法 proxy_next_upstream_timeout 时间;
默认值
proxy_next_upstream_timeout 0;
上下文 stream, server

限制允许将连接传递到 下一个服务器 的时间。0 值关闭此限制。

语法 proxy_next_upstream_tries 数字;
默认值
proxy_next_upstream_tries 0;
上下文 stream, server

限制将连接传递到 下一个服务器 的可能尝试次数。0 值关闭此限制。

语法 proxy_pass 地址;
默认值
上下文 服务器

设置代理服务器的地址。地址可以指定为域名或 IP 地址和端口

proxy_pass localhost:12345;

或作为 UNIX 域套接字路径

proxy_pass unix:/tmp/stream.socket;

如果域名解析为多个地址,则所有地址都将以循环方式使用。此外,地址可以指定为 服务器组

地址也可以使用变量 (1.11.3) 指定。

proxy_pass $upstream;

在这种情况下,服务器名称将在描述的 服务器组 中搜索,如果未找到,则使用 解析器 确定。

语法 proxy_protocol on | off;
默认值
proxy_protocol off;
上下文 stream, server

此指令出现在 1.9.2 版本中。

为连接到代理服务器启用 PROXY 协议

语法 proxy_requests 数字;
默认值
proxy_requests 0;
上下文 stream, server

此指令出现在 1.15.7 版本中。

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

语法 proxy_responses 数字;
默认值
上下文 stream, server

此指令出现在 1.9.13 版本中。

如果使用 UDP 协议,则设置代理服务器响应客户端数据报时预期的答复数据报数量。该数字作为会话终止的提示。默认情况下,数据报的数量没有限制。

如果指定零值,则不期望响应。但是,如果收到响应并且会话尚未结束,则将处理该响应。

语法 proxy_session_drop on | off;
默认值
proxy_session_drop off;
上下文 stream, server

此指令出现在 1.15.8 版本中。

启用在代理服务器从组中删除或标记为永久不可用后终止到该代理服务器的所有会话。这可能是由于 重新解析 或使用 API DELETE 命令导致的。如果服务器被认为 不健康 或使用 API PATCH 命令,则可以将其标记为永久不可用。每个会话在为客户端或代理服务器处理下一个读或写事件时终止。

此指令作为我们 商业订阅 的一部分提供。

语法 proxy_socket_keepalive on | off;
默认值
proxy_socket_keepalive off;
上下文 stream, server

此指令出现在 1.15.6 版本中。

配置传出到代理服务器的连接的“TCP 保活”行为。默认情况下,操作系统设置对套接字有效。如果指令设置为“on”值,则套接字的 SO_KEEPALIVE 套接字选项将打开。

语法 proxy_ssl on | off;
默认值
proxy_ssl off;
上下文 stream, server

为连接到代理服务器启用 SSL/TLS 协议。

语法 proxy_ssl_certificate 文件;
默认值
上下文 stream, server

指定包含用于对代理服务器进行身份验证的 PEM 格式证书的 文件

从 1.21.0 版本开始,可以在 文件 名称中使用变量。

语法 proxy_ssl_certificate_key 文件;
默认值
上下文 stream, server

指定包含用于对代理服务器进行身份验证的 PEM 格式密钥的 文件

从 1.21.0 版本开始,可以在 文件 名称中使用变量。

语法 proxy_ssl_ciphers 密码;
默认值
proxy_ssl_ciphers DEFAULT;
上下文 stream, server

指定连接到代理服务器时启用的密码。密码以 OpenSSL 库理解的格式指定。

可以使用“openssl ciphers”命令查看完整列表。

语法 proxy_ssl_conf_command 名称 ;
默认值
上下文 stream, server

此指令出现在 1.19.4 版本中。

在与代理服务器建立连接时,设置任意的 OpenSSL 配置 命令

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

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

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

语法 proxy_ssl_crl 文件;
默认值
上下文 stream, server

指定包含用于 验证 代理服务器证书的 PEM 格式吊销证书 (CRL) 的 文件

语法 proxy_ssl_key_log 路径;
默认值
上下文 stream, server

此指令出现在 1.27.2 版本中。

启用代理服务器连接 SSL 密钥的日志记录,并指定密钥日志文件的路径。密钥以与 Wireshark 兼容的 SSLKEYLOGFILE 格式记录。

此指令作为我们 商业订阅 的一部分提供。

语法 proxy_ssl_name 名称;
默认值
proxy_ssl_name host from proxy_pass;
上下文 stream, server

允许覆盖用于 验证 代理服务器证书的服务器名称,并在与代理服务器建立连接时 通过 SNI 传递。服务器名称也可以使用变量 (1.11.3) 指定。

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

语法 proxy_ssl_password_file 文件;
默认值
上下文 stream, server

指定包含 密钥 密码的 文件,其中每个密码都在单独的行上指定。加载密钥时,将依次尝试密码。

语法 proxy_ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2] [TLSv1.3];
默认值
proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
上下文 stream, server

为连接到代理服务器启用指定的协议。

从 1.23.4 版本开始,默认使用 TLSv1.3 参数。

语法 proxy_ssl_server_name on | off;
默认值
proxy_ssl_server_name off;
上下文 stream, server

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

语法 proxy_ssl_session_reuse on | off;
默认值
proxy_ssl_session_reuse on;
上下文 stream, server

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

语法 proxy_ssl_trusted_certificate 文件;
默认值
上下文 stream, server

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

语法 proxy_ssl_verify on | off;
默认值
proxy_ssl_verify off;
上下文 stream, server

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

语法 proxy_ssl_verify_depth 数字;
默认值
proxy_ssl_verify_depth 1;
上下文 stream, server

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

语法 proxy_timeout 超时;


默认值
proxy_timeout 10m;
上下文 stream, server

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

语法 proxy_upload_rate rate;
默认值
proxy_upload_rate 0;
上下文 stream, server

此指令出现在 1.9.3 版本中。

限制从客户端读取数据的速度。rate以每秒字节数指定。零值禁用速率限制。限制针对每个连接设置,因此如果客户端同时打开两个连接,则总体速率将是指定限制的两倍。

参数值可以包含变量 (1.17.0)。在需要根据特定条件限制速率的情况下可能很有用。

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

proxy_upload_rate $rate;