On this page
Module ngx_stream_proxy_module
- Example Configuration
- Directives
- proxy_bind
- proxy_buffer_size
- proxy_connect_timeout
- proxy_download_rate
- 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_crl
- 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 域套接字代理数据流。
Example Configuration
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;
}
Directives
Syntax: | proxy_bind address [transparent] | off; |
Default: | — |
Context: | stream , server |
该指令出现在 1.9.2 版中。
使到代理服务器的传出连接源自指定的本地 IP address
。参数值可以包含变量(1.11.2)。特殊值off
取消了从以前的配置级别继承的proxy_bind
指令的效果,这使系统可以自动分配本地 IP 地址。
transparent
参数(1.11.0)允许到代理服务器的传出连接源自 nonlocalIP 地址,例如,源自客户端的真实 IP 地址:
proxy_bind $remote_addr transparent;
为了使此参数起作用,通常必须使用superuser特权运行 nginx worker 进程。在 Linux 上,不需要(1.13.8),就好像指定了transparent
参数一样,辅助进程从主进程继承CAP_NET_RAW
功能。还必须配置内核路由表以拦截来自代理服务器的网络流量。
Syntax: | proxy_buffer_size size; |
Default: | proxy_buffer_size 16k; |
Context: | stream , server |
该指令出现在版本 1.9.4 中。
设置用于从代理服务器读取数据的缓冲区的size
。还设置用于从客户端读取数据的缓冲区的size
。
Syntax: | proxy_connect_timeout time; |
Default: | proxy_connect_timeout 60s; |
Context: | stream , server |
定义与代理服务器构建连接的超时。
Syntax: | proxy_download_rate rate; |
Default: | proxy_download_rate 0; |
Context: | stream , server |
该指令出现在 1.9.3 版中。
限制从代理服务器读取数据的速度。 rate
以每秒字节数指定。零值禁用速率限制。该限制是针对每个连接设置的,因此,如果 nginx 同时打开与代理服务器的两个连接,则总速率将是指定限制的两倍。
参数值可以包含变量(1.17.0)。在应根据特定条件限制费率的情况下,这可能会很有用:
map $slow $rate {
1 4k;
2 8k;
}
proxy_download_rate $rate;
Syntax: | proxy_next_upstream on | off; |
Default: | proxy_next_upstream on; |
Context: | stream , server |
如果无法构建与代理服务器的连接,请确定是否将客户端连接传递给下一个服务器。
Syntax: | proxy_next_upstream_timeout time; |
Default: | proxy_next_upstream_timeout 0; |
Context: | stream , server |
将通过连接的时间限制为next server。 0
值关闭了此限制。
Syntax: | proxy_next_upstream_tries number; |
Default: | proxy_next_upstream_tries 0; |
Context: | stream , server |
限制将连接传递到next server的可能尝试次数。 0
值关闭了此限制。
Syntax: | proxy_pass address; |
Default: | — |
Context: | server |
设置代理服务器的地址。该地址可以指定为域名或 IP 地址以及端口:
proxy_pass localhost:12345;
或作为 UNIX 域套接字路径:
proxy_pass unix:/tmp/stream.socket;
如果一个域名解析为多个地址,则所有这些地址都将以循环方式使用。另外,可以将地址指定为server group。
也可以使用变量(1.11.3)指定地址:
proxy_pass $upstream;
在这种情况下,将在描述的server groups中搜索服务器名称,如果找不到,则使用resolver确定服务器名称。
Syntax: | proxy_protocol on | off; |
Default: | proxy_protocol off; |
Context: | stream , server |
该指令出现在 1.9.2 版中。
启用PROXY protocol连接到代理服务器。
Syntax: | proxy_requests number; |
Default: | proxy_requests 0; |
Context: | stream , server |
该指令出现在 1.15.7 版中。
设置丢弃客户端和现有 UDP 流会话之间的绑定的客户端数据报的数量。收到指定数量的数据报后,来自同一客户端的下一个数据报将启动一个新会话。当所有客户端数据报都传输到代理服务器并接收到预期的responses或到达timeout时,会话终止。
Syntax: | proxy_responses number; |
Default: | — |
Context: | stream , server |
该指令出现在 1.9.13 版中。
如果使用UDP协议,则设置代理服务器响应客户端数据报而期望的数据报数。该数字用作会话终止的提示。默认情况下,数据报的数量不受限制。
如果指定零值,则不会响应。但是,如果收到响应并且会话仍未完成,则将处理该响应。
Syntax: | proxy_session_drop on | off; |
Default: | proxy_session_drop off; |
Context: | stream , server |
该指令出现在版本 1.15.8 中。
在将代理服务器从组中删除或标记为永久不可用之后,可以终止与代理服务器的所有会话。由于re-resolve或使用 API DELETE命令,可能会发生这种情况。如果服务器被认为是unhealthy或使用 API PATCH命令,则可以将其标记为永久不可用。当为客户端或代理服务器处理下一个读取或写入事件时,每个会话都会终止。
Note
该指令可作为commercial subscription的一部分使用。
Syntax: | proxy_socket_keepalive on | off; |
Default: | proxy_socket_keepalive off; |
Context: | stream , server |
该指令出现在 1.15.6 版中。
为与代理服务器的传出连接配置“ TCP 保持活动”行为。默认情况下,os 的设置对套接字有效。如果伪指令设置为值“ on
”,则将为套接字打开SO_KEEPALIVE
套接字选项。
Syntax: | proxy_ssl on | off; |
Default: | proxy_ssl off; |
Context: | stream , server |
启用 SSL/TLS 协议以连接到代理服务器。
Syntax: | proxy_ssl_certificate file; |
Default: | — |
Context: | stream , server |
使用用于对代理服务器进行身份验证的 PEM 格式的证书指定file
。
Syntax: | proxy_ssl_certificate_key file; |
Default: | — |
Context: | stream , server |
使用 PEM 格式的密钥指定file
,用于对代理服务器进行身份验证。
Syntax: | proxy_ssl_ciphers ciphers; |
Default: | proxy_ssl_ciphers DEFAULT; |
Context: | stream , server |
指定用于连接到代理服务器的启用密码。密码以 OpenSSL 库可以理解的格式指定。
可以使用“ openssl ciphers
”命令查看完整列表。
Syntax: | proxy_ssl_crl file; |
Default: | — |
Context: | stream , server |
指定带有file
的 PEM 格式的吊销证书(CRL),用于verify代理服务器的证书。
Syntax: | proxy_ssl_name name; |
Default: | proxy_ssl_name host from proxy_pass; |
Context: | stream , server |
与代理服务器构建连接时,允许覆盖用于verify代理服务器的证书和通过 SNI的服务器名称。也可以使用变量(1.11.3)指定服务器名称。
默认情况下,使用proxy_pass地址的主机部分。
Syntax: | proxy_ssl_password_file file; |
Default: | — |
Context: | stream , server |
指定一个带有secret keys密码短语的file
,其中每个密码短语都在单独的行上指定。加载密钥时依次尝试使用密码短语。
Syntax: | proxy_ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2] [TLSv1.3]; |
Default: | proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2; |
Context: | stream , server |
启用指定的协议以连接到代理服务器。
Syntax: | proxy_ssl_server_name on | off; |
Default: | proxy_ssl_server_name off; |
Context: | stream , server |
与代理服务器构建连接时,启用或禁用通过TLS 服务器名称指示扩展(SNI,RFC 6066)传递服务器名称。
Syntax: | proxy_ssl_session_reuse on | off; |
Default: | proxy_ssl_session_reuse on; |
Context: | stream , server |
确定在使用代理服务器时是否可以重用 SSL 会话。如果日志中出现错误“ SSL3_GET_FINISHED:digest check failed
”,请尝试禁用会话重用。
Syntax: | proxy_ssl_trusted_certificate file; |
Default: | — |
Context: | stream , server |
指定带有file
的 PEM 格式的受信任 CA 证书,用于verify代理服务器的证书。
Syntax: | proxy_ssl_verify on | off; |
Default: | proxy_ssl_verify off; |
Context: | stream , server |
启用或禁用代理服务器证书的验证。
Syntax: | proxy_ssl_verify_depth number; |
Default: | proxy_ssl_verify_depth 1; |
Context: | stream , server |
设置代理服务器证书链中的验证深度。
Syntax: | proxy_timeout timeout; |
Default: | proxy_timeout 10m; |
Context: | stream , server |
在客户端或代理服务器连接的两次连续读取或写入操作之间设置timeout
。如果在此时间内没有数据传输,则连接将关闭。
Syntax: | proxy_upload_rate rate; |
Default: | proxy_upload_rate 0; |
Context: | stream , server |
该指令出现在 1.9.3 版中。
限制从客户端读取数据的速度。 rate
以每秒字节数指定。零值禁用速率限制。该限制是针对每个连接设置的,因此,如果客户端同时打开两个连接,则总速率将是指定限制的两倍。
参数值可以包含变量(1.17.0)。在应根据特定条件限制费率的情况下,这可能会很有用:
map $slow $rate {
1 4k;
2 8k;
}
proxy_upload_rate $rate;