如何配置Nginx禁止主动断开空闲TCP Socket连接
Nginx Stream四层TCP反向代理10分钟空闲断开修复方案
问题根因
Nginx stream四层代理模块默认的空闲连接超时阈值为 600秒(10分钟),对应控制参数为proxy_timeout。该参数仅在stream上下文生效,和HTTP块的proxy_read_timeout/proxy_send_timeout等参数无关,在HTTP块配置超时规则不会对四层代理生效。
当TCP连接连续空闲时长达到该阈值时,Nginx会主动断开客户端与上游服务的连接,该行为和是否开启SSL卸载、客户端/后端服务自身的超时配置均无关联,和观测到的10分钟准点断开现象完全匹配。
修复方法
在stream的server块(或stream全局块)中添加proxy_timeout配置,将值设置为业务需要的1小时(3600秒)即可。
修改后的完整配置示例:
stream { upstream tcp-server { server localhost:33445; } server { listen 33446; # listen 33446 ssl; proxy_pass tcp-server; # 配置TCP连接空闲超时为1小时,单位支持s(秒)/m(分钟)/h(小时) proxy_timeout 3600s; # SSL证书配置 # ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; } }
配置生效操作与注意事项
- 配置修改完成后,先执行
nginx -t校验配置语法是否正确,确认无报错后执行nginx -s reload重载配置即可生效 - 若需要所有stream代理服务统一使用该超时规则,可将
proxy_timeout直接配置在stream块层级,无需每个server单独配置 - 如果访问链路中还存在云负载均衡、硬件防火墙、操作系统TCP内核参数等其他节点,需要同步调整对应节点的空闲超时阈值,避免链路其他节点提前断开长连接
内容的提问来源于stack exchange,提问作者Jonathan D B Van Schenck
相关产品推荐
相关产品推荐

