要让Nginx server块真正复用短连接,关键在于控制客户端到Nginx的空闲连接生命周期:需配置keepalive_timeout(15–30秒)、keepalive_requests(50–100)、reset_timedout_connection on,并确保响应头含Connection: keep-alive、上游设备超时≥Nginx设置、HTTPS下启用ssl_session_cache与ssl_session_tickets,最后通过curl、ss命令和$connection_requests字段验证复用效果。
要让 Nginx 的 server 块在处理大量短连接时真正复用连接,关键不是堆高并发数,而是控制好客户端到 Nginx 这一层的空闲连接生命周期,并确保链路中各环节不主动中断它。
这些必须写在 http 或 server 块里,作用对象是浏览器、App、SDK 等直连 Nginx 的客户端:
keepalive_timeout 15s;。短连接密集型业务(如 H5 秒杀页、小程序 API)建议 15–30 秒——太长易被中间设备(运营商 NAT、WAF)提前回收,太短则复用率上不去。keepalive_requests 100;。防止低频但持续发请求的连接长期驻留,形成“伪活跃”资源占用;公网入口可压到 50–80,平衡安全性与复用率。reset_timedout_connection on;。超时后直接发 RST,跳过四次挥手,避免 socket 卡在 TIME_WAIT,提升端口复用效率。Nginx 必须明确告诉客户端“这个连接可以接着用”,否则客户端会默认关闭:
Connection: keep-alive,且绝不能出现 Connection: close;keepalive_timeout,否则连接在半路就被断了;idleTimeout。短连接 + HTTPS 时,TLS 握手开销会放大性能问题,需叠加会话复用:
http 块顶部配共享缓存:ssl_session_cache shared:SSL:10m;(10MB 支持约 4 万个会话);ssl_session_timeout 10m;,兼顾复用率与内存安全;ssl_session_tickets on; 并配密钥文件,兼容 TLS 1.2 客户端,降低服务端查表压力。别只看配置有没有写,用真实指标判断:
curl -I https://your-domain.com 检查响应头是否含 Connection: keep-alive;ss -tan | grep :443 | grep ESTAB | wc -l,连接数应趋于平稳,而非随 QPS 线性上涨;$connection_requests 字段,高频短连接下多数值应 > 1。