直接在server块设keepalive_timeout可控制客户端到nginx空闲连接时长,需按业务选值:静态资源30–45秒、移动端api 15–25秒、常规web站点60–75秒、sse服务≥3600秒;须同步调keepalive_requests(推荐500–1000)、upstream keepalive及proxy_http_version 1.1等配套参数。

直接在 server 块里写 keepalive_timeout 就能控制客户端到 Nginx 的长连接空闲保持时间,但必须结合业务场景设合理值,并同步调整关联参数,否则容易白配。
按业务类型选 timeout 值
这个值不是越大越好,核心是让连接“够用但不积压”:
- 静态资源(图片/JS/CSS):用户连续请求密集,但页面加载完就空闲,推荐 30–45 秒
- 移动端 API:App 切后台、NAT 设备易静默断连,推荐 15–25 秒
- 常规 Web 站点(PC 浏览器):匹配主流浏览器行为,设 60–75 秒 较稳
- SSE 或实时推送服务:需长期维持单向连接,至少设 3600 秒(1 小时),并配
proxy_read_timeout
必须配套设置 keepalive_requests
它和 keepalive_timeout 构成“双杀机制”,谁先触发谁断连:
- 默认值 100 太保守,高 QPS 场景建议调到 500–1000(如 React 单页应用)
- 网关类服务可设 800–1000;若后端连接池小,可适当降低防压垮
- 避免只改 timeout 不调 requests,否则单连接可能被异常请求长期占用
注意响应头与客户端兼容性
第二个参数会影响部分浏览器(如 Firefox)的保活判断:
- 写成
keepalive_timeout 30s 30s;,会在响应头加Keep-Alive: timeout=30 - IE/Edge 实际忽略该值,仍按自身策略(约 60–65 秒)断连,不用强求一致
- 不要设为
0,那会彻底禁用 Keep-Alive
别漏掉 upstream 侧的长连接配置
Server 块只管前端连接,反向代理到后端还得单独配:
- 在
upstream块中加keepalive 32;(每个 worker 缓存 32 个空闲连接) -
location中必须有proxy_http_version 1.1;和proxy_set_header Connection ''; - 否则 Nginx 默认用 HTTP/1.0 短连接,前端 keepalive 白开了











