合理设置 Nginx 超时时间需分阶段控制:client_header_timeout(10–25秒)防慢速攻击,client_body_timeout(10–120秒)控上传间隔,send_timeout(10–60秒)管响应写入,keepalive_timeout(15–300秒)须小于后端超时且大于client_body_timeout,proxy_read_timeout应≥后端最长处理时间以避免504。

合理设置 Nginx 超时时间,核心是分阶段控制连接生命周期,避免空闲连接堆积或过早中断正常请求。不能所有超时都设成一个值,否则容易触发 408、502 或连接数暴涨。
客户端请求头与请求体超时要分开设
这两个阶段决定连接是否“算作有效发起”,必须区分对待:
- client_header_timeout:只管请求行和请求头(如 Host、Authorization、Cookie),不包含请求体。公网服务建议 10–25 秒;JWT 鉴权或含多 Cookie 的接口可设 15–25 秒;低于 5 秒可能误杀弱网用户
- client_body_timeout:不是“整个上传耗时”,而是两次数据包之间的最大空闲间隔。普通接口设 10–20 秒;大文件上传(如视频、安装包)可设 60–120 秒,但必须确保 client_body_timeout < keepalive_timeout,否则上传中途可能被长连接机制提前关闭
响应发送和长连接保持需协同调整
send_timeout 和 keepalive_timeout 不仅影响用户体验,更直接关联 worker 连接资源占用:
- send_timeout:控制 Nginx 向客户端写响应时的耐心程度——从发出第一个字节起,两次成功写之间最多等多久。多数业务设 10–30 秒;SSE、流式下载或跨境回源可放宽至 60 秒,但不宜超 120 秒
- keepalive_timeout:决定 HTTP/1.1 空闲连接存活时间。静态资源站建议 30–45 秒;移动端 API 推荐 15–25 秒(适配 App 切后台和 NAT 断连);常规 PC 网站设 60–75 秒较稳妥;内网长连接场景可设 60–300 秒,但前提是上游服务超时更长且中间无 LB 截断
反向代理链路必须全链路对齐
若 Nginx 做反向代理,后端超时未匹配会导致 502/504,尤其在处理慢请求时:
- proxy_read_timeout 应 ≥ 后端最长响应时间(如报表导出、AI 推理),常见设为 300 秒;fastcgi_read_timeout 同理
- proxy_connect_timeout 和 proxy_send_timeout 通常设 5–30 秒即可,反映建连与发请求的合理性
- 务必检查 upstream 中是否启用 keepalive 连接池,并确认其数值(如 keepalive 32)与后端并发能力匹配
验证配置是否真正生效
改完配置别只 reload 就完事,要观察运行态表现:
- 用 ss -tn | grep :443 | wc -l 查看 ESTABLISHED 连接数趋势:调低 keepalive_timeout 后应明显回落,但不应伴随大量重连(可通过 access log 中 User-Agent + IP 频次判断)
- 开启 ngx_http_stub_status_module,关注 Waiting 状态数:过高说明空闲连接积压,复用率低
- 抓包或 curl -v 查响应头,确认返回 Connection: keep-alive 且无 close;同时检查 error log 是否频繁出现 upstream prematurely closed connection



















