Nginx长连接调优需分清客户端到Nginx(前端)与Nginx到upstream(后端)两个独立方向:前者用keepalive_timeout和keepalive_requests控制空闲超时与请求数限制,后者须在upstream块配keepalive并配合proxy_http_version 1.1及Connection头清理。

Nginx Server 配置中长连接的调优,核心是分清两个方向:客户端到 Nginx(前端连接) 和 Nginx 到后端 upstream(反向代理连接)。两者独立配置、作用不同,不能混用。调得好,能显著降低 TCP 开销、提升并发能力;调得不当,反而引发 TIME_WAIT 堆积、连接复用失败或资源耗尽。
一、控制客户端到 Nginx 的长连接
这是用户浏览器或 App 与你 Nginx 之间的连接,目标是复用 TCP 连接,减少握手延迟。关键参数在 http 或 server 块内:
keepalive_timeout 120s 120s;
第一个值表示 Nginx 空闲等待下个请求的最长时间(单位秒),超时即断连;第二个值会写入响应头Keep-Alive: timeout=120,告诉客户端“最多等 120 秒”。设为 0 表示彻底禁用长连接。keepalive_requests 1000;
单个长连接最多处理多少次请求。默认 100,高 QPS 场景建议调大(如 1000–5000),避免频繁建连/断连导致大量 TIME_WAIT。keepalive_disable none;
默认会针对旧版 IE/Safari 关闭长连接,设为none可对所有现代客户端启用(除非业务明确兼容老旧 UA)。
二、控制 Nginx 到 upstream 的长连接
这是 Nginx 作为客户端连接后端服务(如 Tomcat、Node.js)的连接,需在 upstream 块中显式开启,否则默认走 HTTP/1.0 短连接:
upstream backend {server 10.0.1.10:8080;keepalive 32;← 必须加!表示每个 worker 最多缓存 32 个空闲长连接}对应 location 中必须配齐协议头:
proxy_http_version 1.1;proxy_set_header Connection '';← 清空 Connection 头,让后端决定是否 keep-alive
(注意:不是Connection: keep-alive,那是旧写法,易触发复用异常)同时建议配:
proxy_read_timeout 60s;proxy_send_timeout 60s;
避免上游响应慢时,Nginx 提前中断连接,导致长连接失效。
三、常见踩坑点
- 把
keepalive写在location或server里 → 无效,Nginx 启动报错或静默忽略 -
keepalive_timeout设得比后端maxKeepAliveRequests或keepAliveTimeout还短 → 连接被 Nginx 先关,后端来不及复用 -
upstream里写了keepalive,但proxy_set_header Connection "close"→ 强制关闭,白配 - 想禁用客户端长连接,只设
keepalive_timeout 0就够,无需额外加Connection: close头
不复杂但容易忽略


















