client_header_timeout控制请求头接收超时,send_timeout控制响应发送空闲间隔;前者默认60秒,建议网页设10–15秒、弱网接口设60秒;后者默认60秒,大文件响应需调大至300秒,轻量接口保持20–30秒。

在 server 块中直接配置请求头超时和响应发送超时,只需使用两个核心指令:client_header_timeout 和 send_timeout。它们作用明确、层级灵活,且无需额外模块。
client_header_timeout 控制请求头接收时间
这个值决定 Nginx 等待客户端发完 HTTP 请求头(比如 GET /api/user HTTP/1.1 及其所有 headers)的最长时间。超时未完成就返回 408 Request Time-out。
- 默认是 60 秒,但多数业务场景下可适当调低或调高
- 普通网页服务建议设为 10–15s:足够应对正常 TLS 握手和 header 传输
- 移动端或弱网接口建议设为 60s:避免因中间代理重传或首包延迟触发误超时
- 不能设得过长(如 300s),否则易被 Slowloris 类攻击长期占用工作者连接
send_timeout 控制响应发送过程的空闲间隔
它不是整个响应的总耗时限制,而是指 Nginx 向客户端**写响应数据时,两次成功 write 操作之间允许的最大空闲时间**。一旦超过,连接会被立即关闭。
- 默认也是 60 秒,适用于大多数静态资源或快速 API
- 如果后端生成大文件或流式响应(如导出 CSV、SSE),需结合
proxy_buffering off并将该值设大(例如 300s) - 若只做轻量 JSON 接口,保持 20–30s 即可,防止慢客户端拖慢 worker
- 注意:该超时不影响已建立的 keepalive 连接本身,只约束单次响应发送阶段
实际 server 配置示例
以下是一个典型配置片段,放在 server { ... } 块内即可生效:
server {
listen 443 ssl;
server_name api.example.com;
client_header_timeout 60s;
send_timeout 30s;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
}
}
这两个参数都支持 http、server、location 三级作用域,优先级从高到低。在 server 块中设置,能覆盖全局默认,又比写在每个 location 里更简洁。











