启用Nginx客户端与上游长连接并配合TLS会话复用,可显著降低TCP三次握手和TLS协商开销;需配置keepalive_timeout、keepalive_requests、upstream keepalive、proxy_http_version 1.1、ssl_session_cache等参数,并通过响应头及连接数验证效果。

启用并合理配置Nginx的长连接(Keepalive),能显著降低频繁TCP三次握手和TLS协商带来的开销,尤其在高并发、小请求场景下效果明显。
开启客户端到Nginx的长连接
Nginx默认已启用与客户端的长连接,但需确认关键参数:
-
keepalive_timeout:控制连接空闲多久后关闭,建议设为 15–60 秒(如
keepalive_timeout 30s;),太短起不到复用作用,太长会占用worker进程连接数 -
keepalive_requests:单个连接最多处理请求数,默认100,高QPS服务可适当调高(如
keepalive_requests 1000;),避免过早断连
配置Nginx到上游服务的长连接
若Nginx作为反向代理,还需显式启用与后端(如Tomcat、Go服务)的长连接,否则每次请求都会新建TCP连接:
- 在
upstream块中添加keepalive 32;(数字表示保活连接池大小,建议从16–64起步) - 在
location或server块中设置代理头:
proxy_http_version 1.1;<br> proxy_set_header Connection '';
这两项确保Nginx复用连接而非发送Connection: close
配合TLS优化进一步减少延迟
HTTPS场景下,长连接还能复用TLS会话,跳过完整握手:
- 启用
ssl_session_cache shared:SSL:10m;(共享缓存提升多worker复用率) - 设置
ssl_session_timeout 4h;,延长会话复用窗口 - 开启
ssl_buffer_size 4k;可改善首字节时间,间接提升长连接利用率
验证是否生效
通过抓包或响应头观察:
- 客户端发起请求时带
Connection: keep-alive,且响应头也含该字段 → 客户端连接复用正常 - 用
ss -tan | grep :443 | wc -l对比压测前后ESTABLISHED连接数变化,稳定后应明显低于并发请求数 - 后端access log中同一IP短时间内出现大量请求,且Nginx日志无高频重连报错 → upstream长连接已起效
不复杂但容易忽略:只配客户端keepalive而没配upstream keepalive,等于只优化了半程。两端都打开,才能真正把TCP握手消耗压下来。

















