合理配置Nginx客户端等待策略需分清“谁在等谁”,控制空闲连接生命周期并防慢连接拖垮worker:client_header_timeout设10–20秒、client_body_timeout设15–30秒、send_timeout设20–60秒、keepalive_timeout设60–75秒、keepalive_requests设100–1000,且按路径差异化配置。

合理配置 Nginx 代理中的客户端等待策略,核心是分清“谁在等谁”、控制空闲连接生命周期,并防止慢连接拖垮 worker 进程。不能只调 proxy_* 参数,客户端侧的等待行为必须同步约束。
客户端请求头和体的等待时间
这是用户发起请求时,Nginx 等待完整 HTTP 请求到达的第一道关卡:
- client_header_timeout:建议设为 10–20 秒。它只管请求行和头(如 GET /api HTTP/1.1),超时返回 408。公网环境默认 60 秒太松,易被慢速攻击占用连接。
-
client_body_timeout:建议设为 15–30 秒。注意它不是整个上传耗时上限,而是“两次接收数据包之间的静默间隔”。大文件上传路径可单独提升,但需配合
client_max_body_size使用。
响应下发阶段的写超时
Nginx 把后端响应发给浏览器时,也要防止单次写操作长期挂起:
-
send_timeout:建议设为 20–60 秒。从发送第一个字节开始计时,两次 write() 调用之间不能超过该值。若业务含大文件下载或流式响应(如 SSE),应在对应
location中单独加大,避免影响普通接口。
长连接复用与空闲保活
keepalive 不是“永远不断”,而是有明确的空闲容忍窗口:
- keepalive_timeout:推荐设为 60–75 秒,略高于典型业务 RTT,兼顾复用收益与连接回收。不宜超过后端服务的 keepalive 回收时间,否则可能被后端先断连。
- keepalive_requests:可设为 100–1000,限制单连接最大请求数,防止老化连接累积状态或内存泄漏。
按路径差异化收紧或放宽
统一值容易误伤——短接口怕被拖慢,长任务怕被误杀:
- 高频 API(如
/login、/healthz):在 location 中设client_header_timeout 5s; send_timeout 10s; - 导出类路径(如
/report/export):单独 location,提升client_body_timeout和send_timeout至 300s,但不放大keepalive_timeout。 - 所有客户端侧 timeout 应统一写在
http块中,与 proxy 参数并列管理,避免遗漏。











