我当前的 nginx 设置总是在 5 分钟不活动(即没有交易)后终止 TCP 连接。
我有此设置,需要从我的内部网络 [客户端应用程序] 连接到公共网络 [服务器] 的 TLS1.2 连接。它仅使用 TCP 端口(不是 http/https)并与位于公共网络的服务器建立连接。客户端应用程序不支持 TLS1.2 连接,因此引入了 nginx 代理/反向代理以实现 TLS 包装目的。您可以参考以下内容:
Internal Network | INTERNET/Public
[客户端应用程序] <-----> [NGINX 反向代理] <--- | ---> [公共服务器]
<Non TLS TCP Traffic> <TLS 1.2>
- 使用流模块
- nginx 错误日志中没有显示任何错误
- 访问日志显示 TCP 200 状态,但会话每次仅持续 300 秒。[记录在 access_log 中]访问日志
以下是我的 nginx 配置
stream {
resolver 127.0.0.1;
include /etc/nginx/conf.d/*.conf;
log_format basic '$remote_addr [$time_local] '
'$protocol $status $bytes_sent $bytes_received '
'$session_time $upstream_addr'
'"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"';
access_log /var/log/nginx/stream.access.log basic;
error_log log_file;
error_log /var/log/nginx/error_log;
server {
listen 35012;
proxy_pass X.X.X.X:35012;
proxy_timeout 86400s;
proxy_connect_timeout 1200s;
proxy_socket_keepalive on;
ssl_session_cache shared:SSL:5m;
ssl_session_timeout 30m;
proxy_ssl on;
proxy_ssl_certificate /etc/ssl/certs/backend.crt;
proxy_ssl_certificate_key /etc/ssl/certs/backend.key;
proxy_ssl_protocols TLSv1.2;
proxy_ssl_ciphers HIGH:!aNULL:!MD5;
proxy_ssl_verify_depth 2;
proxy_ssl_session_reuse on;
}
捕获 tcp 数据包并通过 wireshark 检查后,我发现 nginx 正在向公共服务器发送 RST,然后发送 FIN/ACK(参考附加的 pcap 图片)wireshark_pcap
我尝试按照上面的 nginx 配置启用 keepalive 相关参数,并检查操作系统的 TCP 可调参数,但我找不到任何导致 NGINX 终止 TCP 连接的相关设置。
有人遇到同样的问题吗?