keepalive_timeout控制Nginx空闲HTTP连接保持时长,需设为5–60秒合理区间以平衡复用率与资源占用;须匹配客户端超时、协同upstream keepalive及TLS会话复用配置。

调优 keepalive_timeout 可以显著减少代理层(如 Nginx)与客户端之间重复建立 TCP 连接和 TLS 握手的开销,尤其在高并发、小请求场景下效果明显。
理解 keepalive_timeout 的作用
该参数控制 Nginx 保持空闲 HTTP 连接打开的时间。连接空闲超过此值后,Nginx 主动关闭它。合理设置能平衡资源占用与复用率:设太短,频繁重连;设太长,空闲连接堆积,消耗文件描述符和内存。
注意:它只影响已启用 HTTP Keep-Alive 的连接(即客户端发来 Connection: keep-alive 且未显式关闭),对短连接无作用。
结合客户端行为设定合理值
浏览器、移动端 SDK 或 API 客户端通常有自身的连接复用策略和超时逻辑。若 Nginx 的 keepalive_timeout 长于客户端主动断连时间,实际无法复用;若远短于客户端预期,则提前中断连接,引发“connection reset”或重试。
- 主流浏览器默认空闲连接超时约 5–7 分钟(Chrome 约 300s,Firefox 约 420s)
- 移动端 App 或 gRPC 客户端常设为 60–120s
- 建议初值设为 60s,再根据
netstat -an | grep :443 | grep ESTABLISHED | wc -l和错误日志中client closed connection频次微调
配套调优提升复用效率
单靠调整 keepalive_timeout 不够,需协同配置:
-
启用 upstream keepalive:若 Nginx 作为反向代理,还需配置
keepalive 32;在upstream块中,复用到后端的连接 - 匹配 client_header_timeout / client_body_timeout:避免因读取请求头/体超时早于 keepalive 超时而误关连接
- 监控活跃连接数与 close_wait / time_wait 状态:突增可能意味着 timeout 设定不合理或客户端异常
TLS 层的协同考虑
HTTPS 下,TCP 复用可跳过三次握手,但若会话票据(session ticket)或会话 ID 复用失效,仍需完整 TLS 握手。确保:
- 开启
ssl_session_cache shared:SSL:10m;和ssl_session_timeout 4h; - 客户端支持并启用 TLS session resumption(现代浏览器默认开启)
- 避免在负载均衡层强制禁用 session ticket(如某些云 WAF 默认策略)
这样,一次 TLS 握手后的后续请求,在 keepalive 连接内只需 0-RTT 或 1-RTT 恢复,大幅降低延迟和 CPU 开销。


















