keepalive_timeout控制http长连接空闲超时时间,首参数设nginx等待下个请求的最大秒数,次参数设响应头keep-alive timeout值;仅对启用keep-alive的http/1.1或显式声明的http/1.0连接生效。

在 Nginx 的 http 块中,keepalive_timeout 控制客户端与 Nginx 之间 HTTP 长连接(Keep-Alive)的最大空闲时间。它不决定连接能持续多久,而是决定“如果客户端不再发请求,这条连接还能保持打开多久”。超时后 Nginx 主动关闭连接,释放资源。
keepalive_timeout 的两个参数含义
该指令可接受一个或两个值:
-
第一个值(必填):Nginx 等待客户端下一次请求的最长时间(单位:秒)。例如
keepalive_timeout 65;表示空闲超过 65 秒就断开。 -
第二个值(可选):发送给客户端的
Keep-Alive: timeout=XX响应头中的 timeout 值,用于提示客户端也按此时间管理连接。若不指定,Nginx 默认不发送该头;若指定但小于第一个值,实际仍以第一个值为准。
它影响哪些连接
该配置仅对启用 Keep-Alive 的 HTTP/1.1 连接生效(HTTP/1.0 需显式加 Connection: keep-alive 头),且前提是客户端也支持并主动复用连接。常见场景包括:
- 浏览器加载网页时并发请求多个静态资源(CSS、JS、图片)
- API 客户端复用 TCP 连接发起多次请求
- 反向代理上游服务时,Nginx 与上游之间的长连接(需配合
upstream keepalive)
调优建议与常见误区
默认值通常是 75s(不同版本略有差异),但实际设置需结合业务特点:
- 高并发静态服务可适当降低(如 15–30s),减少空闲连接堆积,缓解 TIME_WAIT 和文件描述符压力
- 内网 API 网关或移动端长轮询场景,可设为 60–120s,平衡复用率与资源占用
- 不要盲目设成 0 或极小值(如 1s)——这等于禁用 Keep-Alive,反而增加 TCP 握手和 TLS 开销
- 注意:该值不控制请求处理时长,也不影响
proxy_read_timeout等后端通信超时
验证是否生效
可通过 curl 查看响应头:
curl -I http://your-domain.com若配置了第二个参数(如 keepalive_timeout 65 60;),响应头中会出现:
Keep-Alive: timeout=60
同时用 netstat -tnp | grep :80 或 ss -tan | grep ESTAB 观察连接生命周期,也能辅助判断。










