模块 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_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 地址 [透明] | 关闭;
默认值:
上下文: 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 size;
默认值:
proxy_buffer_size 16k;
上下文: stream, server

此指令出现在版本1.9.4中。

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

语法: proxy_connect_timeout time;
默认值:
proxy_connect_timeout 60s;
上下文: stream, server

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

语法: proxy_download_rate 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 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 地址;
默认值:
上下文: server

设置代理服务器的地址。地址可以指定为域名或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 数字;
默认:
上下文: streamserver

此指令出现在版本 1.9.13 中。

设置使用UDP协议时,从代理服务器响应给客户端数据报的数量。该数字作为会话终止的提示。默认情况下,数据报数量不受限制。

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

语法: proxy_session_drop on | off;
默认:
proxy_session_drop off;
上下文: streamserver

此指令出现在版本 1.15.8 中。

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

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

语法: proxy_socket_keepalive on | off;
默认:
proxy_socket_keepalive off;
上下文: streamserver

此指令出现在版本 1.15.6 中。

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

语法: proxy_ssl on | off;
默认:
proxy_ssl off;
上下文: streamserver

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

语法: proxy_ssl_certificate file;
默认:
上下文: stream, server

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

自1.21.0版本起,可以在file名称中使用变量。

语法: proxy_ssl_certificate_key file;
默认:
上下文: stream, server

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

自1.21.0版本起,可以在file名称中使用变量。

语法: proxy_ssl_ciphers ciphers;
默认:
proxy_ssl_ciphers DEFAULT;
上下文: stream, server

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

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

语法: proxy_ssl_conf_command name value;
默认:
上下文: stream, server

此指令出现在1.19.4版本中。

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

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

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

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

语法: proxy_ssl_crl file;
默认:
上下文: stream, server

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

语法: proxy_ssl_name name;
默认:
proxy_ssl_name host from proxy_pass;
上下文: stream, server

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

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

语法: proxy_ssl_password_file file;
默认:
上下文: stream, server

指定包含私钥密码的file,每个密码都在单独的一行上指定。在加载密钥时逐个尝试密码。

语法: 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 Server Name Indication extension(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 file;
默认:
上下文: stream, server

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

语法: 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 速率;
默认值:
proxy_upload_rate 0;
上下文: stream, server

此指令在版本1.9.3中出现。

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

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

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

proxy_upload_rate $rate;