keepalive_timeout用于主动断开空闲客户端连接,首参数设nginx自身断连阈值(如60秒),次参数设响应头keep-alive timeout建议值(如55秒);仅对启用keep-alive的http/1.1或显式声明的http/1.0连接生效。

Nginx 用 keepalive_timeout 主动管理不活跃的客户端连接——它不是等连接“老化”,而是监控空闲状态,一旦超时就断开,释放资源。
只对空闲连接生效
这个参数不计算请求处理时间,只盯住“没数据来”的时段。只要客户端发来新请求(哪怕只是 HEAD 或小 GET),计时器立刻重置。所以一个持续上传大文件的连接,哪怕耗时几分钟,只要数据不断流,就不会被它断掉。
- 仅作用于启用了 Keep-Alive 的 HTTP/1.1 连接,或 HTTP/1.0 中显式带
Connection: keep-alive头的请求 - 不影响 Nginx 到上游服务(如后端应用)的连接,那需要单独配置
upstream keepalive - 浏览器是否真按这个时间复用,还取决于自身策略(比如旧版 IE 实际上限常为 60 秒)
两个数值各管一段
写成 keepalive_timeout 60 55 时:
- 第一个值(60)是 Nginx 自己的底线:空闲满 60 秒,不管浏览器怎么想,直接 FIN 断连
- 第二个值(55)是发给浏览器的建议:在响应头里加
Keep-Alive: timeout=55,提示它“你最多可复用到第 55 秒” - 如果只写一个值(如
keepalive_timeout 30),Nginx 不发 Keep-Alive 响应头,但服务端断连逻辑照常
不同场景下的典型设置
没有固定最优值,关键看连接行为模式:
- 高并发 Web 站点(页面含大量 JS/CSS/图片):设 15–30 秒。短一点能更快释放连接,缓解
TIME_WAIT和文件描述符压力 - 移动端 API 或内网网关:设 45–90 秒。请求间隔较规律,延长空闲窗口能显著减少建连开销
- 调试或压测时:设为 0 可彻底禁用 Keep-Alive,方便观察单请求真实行为
验证是否真正起效
改完配置 reload 后,别只看配置文件:
- 用
curl -I https://your-site.com/检查响应头是否有Connection: keep-alive和Keep-Alive: timeout=XX - 用
ss -tan | grep :443 | grep ESTAB观察连接存活时长,多次请求间是否复用同一端口 - 注意:浏览器开发者工具的 Network 标签页里看到的“Reused”状态,才是客户端侧复用的真实体现











