直接配置 keepalive_timeout 即可启用客户端与 Nginx 间 HTTP 长连接,复用 TCP 连接以降低 RTT 和 TTFB;需按业务设合理空闲超时值(静态资源10–30秒、常规Web 45–60秒、移动端15–30秒、SSE等60–300秒),并联动 keepalive_requests、proxy_http_version 1.1、upstream keepalive 同步调优。

直接配置 keepalive_timeout 就能启用客户端与 Nginx 之间的 HTTP 长连接,复用 TCP 连接,从而避免每次请求都触发三次握手和 TLS 协商,显著降低 RTT 积压和首字节时间(TTFB)。
按业务类型设置合理超时值
该参数控制的是“空闲等待时长”,不是总连接寿命。设太短(如 ≤5 秒),用户翻页、加载 JS/CSS 后发 API 请求前的自然停顿就会断连;设太长(如 ≥300 秒),大量僵尸连接占满文件描述符,反致新请求被拒绝。
- 静态资源服务(CDN/图片/JS/CSS):10–30 秒——复用密集但需快速回收
- 常规 Web 页面(浏览器访问):45–60 秒——匹配 Chrome/Firefox 默认保活行为,覆盖页面内多资源加载周期
- 移动端 API 或小程序后端:15–30 秒——兼顾弱网唤醒延迟与连接池稳定性
- 长连接场景(SSE、WebSocket 代理):60–300 秒——需配合
proxy_read_timeout和后端心跳,不单靠此值
必须同步调整的关键配套参数
单独调大 keepalive_timeout 几乎无效,甚至有害。它必须与以下三项联动生效:
-
keepalive_requests 1000:限制单连接最多处理请求数,防止单个异常请求长期霸占连接(默认 100 太保守) -
proxy_http_version 1.1与proxy_set_header Connection '':确保 Nginx 与后端之间也复用连接,否则前端复用收益被后端频繁建连抵消 -
upstream { keepalive 32; }:为每个 worker 进程缓存空闲到同一后端的连接,值应略小于后端单实例最大连接数(如 TomcatmaxConnections=200,此处设 120–160)
配置位置与验证方式
建议在 http 块设全局基础值,再按需在 server 或 location 块覆盖:
- 例如:
keepalive_timeout 60 55;表示服务端等 60 秒,响应头中告知浏览器“建议复用不超过 55 秒” - 重载后执行
curl -I https://your-domain.com/,确认响应头含Connection: keep-alive和Keep-Alive: timeout=55 - 进一步用
netstat -an | grep :443 | grep ESTABLISHED | wc -l对比调优前后连接数波动,观察是否从“短连风暴”转向稳定复用
注意链路两端的实际约束
客户端或中间设备可能覆盖 Nginx 设置:
- 某些 CDN(如 Cloudflare)或云负载均衡器(如 AWS ALB)有自己的 keepalive 超时,默认常为 60 秒,若比 Nginx 设得更短,实际生效的是更严的那个
- 旧版 IE/Edge 实际遵守上限常为 60 秒,即使服务端返回
timeout=300也无效 - 后端服务自身需支持 keep-alive:Spring Boot 默认开启,Node.js 需显式配置
server.keepAliveTimeout



















