Nginx server块中客户端超时与长连接配置需按服务粒度精准设置:client_header_timeout和client_body_timeout防慢请求攻击,send_timeout控制响应发送停顿,keepalive_timeout与keepalive_requests共同管理Keep-Alive生命周期,均应置于server块并reload生效。

在 server 块中配置客户端连接超时与保持时间,核心是明确各参数的作用阶段和适用范围——它们控制的是“客户端到 Nginx”这一链路的交互节奏,不是全局强制,而是按域名或服务粒度精准干预。
client_header_timeout 与 client_body_timeout:防慢请求攻击
这两个参数限制客户端发送请求的过程,设得太长易被 Slowloris 类攻击拖垮 worker 进程,太短又会误杀弱网用户或大 Header 场景。
- client_header_timeout:等待完整请求行 + 所有请求头的最大时间。例如含 JWT、多 Cookie 或自定义鉴权头的服务,建议设为 15–20s;纯静态小页面可压到 10s
-
client_body_timeout:请求头收完后,两次上传数据包之间的最大空等间隔(不是总上传时长)。表单提交设 10–15s 即可;文件上传服务需配合
client_max_body_size,设为 60–120s,并确保后端应用层也同步调高超时
send_timeout:控制响应下发的耐心程度
它只作用于 Nginx 已开始向客户端发送响应后的“写停顿”,比如流式接口、大文件下载或跨境网络延迟场景。
- 默认 60s,但多数业务设 10–30s 更稳妥;超过 60s 容易导致连接长期挂起,占用 worker 连接数
- 注意:该超时不触发重试,超时即断连,客户端可能收到截断响应,所以对关键业务要评估容忍度
keepalive_timeout 与 keepalive_requests:双杀机制管长连接
这是真正决定 Keep-Alive 连接生命周期的组合指令——任一条件先满足就断开,避免连接驻留过久。
- keepalive_timeout:连接空闲无新请求的最长时间。公网 API 推荐 20–30s;静态资源站可设 45–60s;若设为 0 则彻底禁用 Keep-Alive
- keepalive_requests:单个连接最多处理多少次请求。默认 100 太保守,现代服务建议 500–1000;SPA 应用(如 React/Vue)推荐 1000;网关类服务可设 800
- 示例:
keepalive_timeout 30s 30s;(第二个值用于响应头Keep-Alive: timeout=30,供部分浏览器参考)
配置位置与生效要点
这些参数可直接写在 server{} 块内,优先级高于 http{} 中的全局设置,适合差异化服务(如 API 域名 vs 静态资源域名)。
- 修改后必须执行
nginx -t && nginx -s reload才能生效 - 不建议在
location块中覆盖keepalive_timeout,因它属于连接级控制,location 级覆盖无意义 - 若同时用了反向代理,记得同步调整
proxy_read_timeout等代理侧参数,否则容易出现 504 错误


















