keepalive_timeout控制Nginx与客户端长连接空闲超时,语法为keepalive_timeout timeout [header_timeout];推荐值依场景而定,需配合keepalive_requests使用,不可设为0。

在 Nginx 中,keepalive_timeout 是控制客户端与 Nginx 之间长连接空闲超时的核心参数。它不决定连接能活多久,而是定义“连接空闲多久就断开”——每次收到新请求都会重置计时器,只对无数据传输的静默状态生效。
基本语法和常用写法
语法为:keepalive_timeout timeout [header_timeout];
- 第一个值(必填):Nginx 实际执行关闭空闲连接的秒数,比如
30s、60或1m - 第二个值(可选):写入响应头
Keep-Alive: timeout=N的建议值,供部分浏览器(如 Firefox、Konqueror)参考;IE/Edge 忽略此值,仍按自身策略(约 60–65 秒)断连 - 常见写法示例:
keepalive_timeout 30s 30s;或keepalive_timeout 65 60;
不同业务场景的推荐值
设太长易积压连接、耗尽文件描述符;设太短会频繁建连,增加延迟。需结合实际:
- 静态资源服务(CDN/图片/JS/CSS):10–30 秒(高并发下快速回收)
- 移动端 API:15–25 秒(适配 App 切后台、NAT 超时)
- 常规 Web 站点(PC 浏览器):60–75 秒(匹配主流浏览器默认行为)
-
SSE 或长轮询服务:≥3600 秒(1 小时),并同步调大
proxy_read_timeout - 高并发网关或内网服务:5–15 秒(防 worker 进程热点倾斜)
必须配合 keepalive_requests 使用
单独调 keepalive_timeout 效果有限。它和 keepalive_requests 构成“双杀机制”——任一条件先触发即断连:
-
keepalive_requests 1000;表示单个连接最多处理 1000 个请求,到即断 - 例如:
keepalive_timeout 30s; keepalive_requests 1000;意味着:空闲满 30 秒断,或请求达 1000 次断,谁先到谁生效 - 默认值 100 偏保守,现代应用建议设为 500–1000,React/Vue 单页应用常用 1000
配置位置与注意事项
该指令可放在 http、server 或 location 块中,优先级从高到低:
- 生产环境建议在
http{}块设全局基础值,再按需在特定server中覆盖 - 切勿设为
0(即keepalive_timeout 0;),这会彻底禁用 Keep-Alive,所有连接变短连接 - 若使用反向代理,前端 keepalive 生效 ≠ 后端复用;还需在
upstream中配keepalive 32;,并在location中加proxy_http_version 1.1;和proxy_set_header Connection "";



















