模块 ngx_stream_proxy_module
该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 
     | 
|---|---|
| 默认: | — | 
| 语境: | stream,server | 
该指令出现在版本 1.9.2 中。
使到代理服务器的传出连接源自指定的本地 IP address。参数值可以包含变量(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 版本中。
设置size用于从代理服务器读取数据的缓冲区。还设置size用于从客户端读取数据的缓冲区。
| 句法: | proxy_connect_timeout  | 
|---|---|
| 默认: | proxy_connect_timeout 60s; | 
| 语境: | stream,server | 
定义与代理服务器建立连接的超时。
| 句法: | proxy_download_rate  | 
|---|---|
| 默认: | proxy_download_rate 0; | 
| 语境: | stream,server | 
该指令出现在版本 1.9.3 中。
限制从代理服务器读取数据的速度。rate以每秒字节数指定。零值禁用速率限制。该限制是针对每个连接设置的,因此如果 nginx 同时打开两个到代理服务器的连接,则总体速率将是指定限制的两倍。
参数值可以包含变量(1.17.0)。在应根据特定条件限制速率的情况下,它可能很有用:
map $slow $rate {
    1     4k;
    2     8k;
}
proxy_download_rate $rate;
| 句法: | proxy_half_close  | 
|---|---|
| 默认: | proxy_half_close off; | 
| 语境: | stream,server | 
该指令出现在版本 1.21.4 中。
启用或禁用独立关闭每个方向的 TCP 连接(“TCP 半关闭”)。如果启用,将保留 TCP 代理,直到双方关闭连接。
| 句法: | proxy_next_upstream  | 
|---|---|
| 默认: | 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  | 
|---|---|
| 默认: | — | 
| 语境: | server | 
设置代理服务器的地址。地址可以指定为域名或IP地址和端口:
proxy_pass localhost:12345;
或者作为 UNIX 域套接字路径:
proxy_pass unix:/tmp/stream.socket;
如果一个域名解析为多个地址,则所有这些地址都将以循环方式使用。另外,还可以指定一个地址作为 服务器组。
也可以使用变量指定地址 (1.11.3):
proxy_pass $upstream;
在这种情况下,将在所描述的服务器组 中搜索服务器名称 ,如果未找到,则使用解析器来确定 服务器名称。
| 句法: | proxy_protocol  | 
|---|---|
| 默认: | 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  | 
|---|---|
| 默认: | proxy_session_drop off; | 
| 语境: | stream,server | 
该指令出现在版本 1.15.8 中。
允许在代理服务器从组中删除或标记为永久不可用后终止与代理服务器的所有会话。这可能是由于
重新解析
或使用 API
DELETE
命令而发生的。如果服务器被认为
不健康
或使用 API
PATCH
命令,则可以将其标记为永久不可用。当为客户端或代理服务器处理下一个读取或写入事件时,每个会话都会终止。
该指令可作为我们 商业订阅的一部分提供。
| 句法: | proxy_socket_keepalive  | 
|---|---|
| 默认: | proxy_socket_keepalive off; | 
| 语境: | stream,server | 
该指令出现在版本 1.15.6 中。
配置与代理服务器的传出连接的“TCP keepalive”行为。默认情况下,操作系统的设置对套接字有效。如果该指令设置为值“ on”,
SO_KEEPALIVE则为套接字打开套接字选项。
| 句法: | proxy_ssl  | 
|---|---|
| 默认: | proxy_ssl off; | 
| 语境: | stream,server | 
启用 SSL/TLS 协议以连接到代理服务器。
| 句法: | proxy_ssl_certificate  | 
|---|---|
| 默认: | — | 
| 语境: | stream,server | 
指定filePEM 格式的证书,用于对代理服务器进行身份验证。
从1.21.0版本开始,名称中可以使用变量file。
| 句法: | proxy_ssl_certificate_key  | 
|---|---|
| 默认: | — | 
| 语境: | stream,server | 
指定filePEM 格式的密钥,用于对代理服务器进行身份验证。
从1.21.0版本开始,名称中可以使用变量file。
| 句法: | 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 | 
指定filePEM 格式的已撤销证书 (CRL),用于验证
代理服务器的证书。
| 句法: | proxy_ssl_name  | 
|---|---|
| 默认: | proxy_ssl_name host from proxy_pass; | 
| 语境: | stream,server | 
允许覆盖用于验证 代理服务器证书并 在与代理服务器建立连接时通过 SNI 传递的 服务器名称 。还可以使用变量指定服务器名称 (1.11.3)。
默认情况下,使用 proxy_pass地址 的主机部分。
| 句法: | proxy_ssl_password_file  | 
|---|---|
| 默认: | — | 
| 语境: | stream,server | 
指定file带有密钥的密码短语
,
其中每个密码短语在单独的行上指定。加载密钥时会依次尝试密码。
| 句法: | proxy_ssl_protocols 
    [ | 
|---|---|
| 默认: | proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; | 
| 语境: | stream,server | 
启用指定的协议以连接到代理服务器。
TLSv1.3从 1.23.4 开始默认使用
该参数。
| 句法: | proxy_ssl_server_name  | 
|---|---|
| 默认: | proxy_ssl_server_name off; | 
| 语境: | stream,server | 
与代理服务器建立连接时, 启用或禁用通过TLS 服务器名称指示扩展(SNI、RFC 6066) 传递服务器名称 。
| 句法: | proxy_ssl_session_reuse  | 
|---|---|
| 默认: | proxy_ssl_session_reuse on; | 
| 语境: | stream,server | 
确定在使用代理服务器时是否可以重用 SSL 会话。SSL3_GET_FINISHED:digest check failed如果日志中出现
错误“ ”,请尝试禁用会话重用。
| 句法: | proxy_ssl_trusted_certificate  | 
|---|---|
| 默认: | — | 
| 语境: | stream,server | 
指定file具有 PEM 格式的可信 CA 证书,用于验证
代理服务器的证书。
| 句法: | proxy_ssl_verify  | 
|---|---|
| 默认: | proxy_ssl_verify off; | 
| 语境: | stream,server | 
启用或禁用代理服务器证书的验证。
| 句法: | proxy_ssl_verify_depth  | 
|---|---|
| 默认: | proxy_ssl_verify_depth 1; | 
| 语境: | stream,server | 
设置代理服务器证书链中的验证深度。
| 句法: | proxy_timeout  | 
|---|---|
| 默认: | proxy_timeout 10m; | 
| 语境: | stream,server | 
设置timeout客户端或代理服务器连接上的两个连续读取或写入操作之间的间隔。如果在此时间内没有数据传输,则连接被关闭。
| 句法: | proxy_upload_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;
