client_header_timeout用于限制Nginx等待客户端发送完整请求头的最长时间,超时返回408错误并释放连接;默认60秒易导致worker进程被慢客户端长期占用,推荐设为5–15秒以提升吞吐效率。

client_header_timeout 的作用很明确:它限制 Nginx 等待客户端发完请求头(比如 GET /index.html HTTP/1.1 及其所有 Host:、User-Agent: 等头字段)的最长时间。超时未完成,Nginx 直接返回 408 Request Timed Out,并立即释放连接和内存。
为什么调小 client_header_timeout 能提升吞吐效率
过长的默认值(60 秒)会让 Nginx 长时间挂起一个 worker 进程等待慢或异常的客户端。这些“卡住”的连接不处理数据,却占用连接槽位、内存和 CPU 上下文,尤其在遭遇扫描器、畸形请求或网络丢包时,容易堆积大量半开连接,拖慢整体响应能力。
推荐设置范围与依据
多数生产场景下,完整请求头应在毫秒级内送达。合理值不是拍脑袋定的:
- 常规 Web 服务(含 HTTPS):设为 5–15 秒 即可。现代浏览器和主流 SDK 都能远快于此完成;
- 内网 API 网关或可信客户端环境:可进一步收紧至 3–5 秒;
- 面向公网且需兼容老旧设备或弱网终端:不建议低于 10 秒,避免误杀正常但延迟略高的请求。
配置位置与写法示例
该指令支持 http、server、location 三个上下文,建议优先放在 http 块做全局统一,必要时再在特定 server 中覆盖:
http {
# 其他配置...
client_header_timeout 10; # 单位:秒
<pre class="brush:php;toolbar:false;">server {
listen 443 ssl;
server_name api.example.com;
# 此处可单独设为 5 秒(如确认客户端全部可控)
client_header_timeout 5;
...
}}
配合其他 timeout 使用效果更佳
单独调 client_header_timeout 效果有限,应与同类机制协同:
- client_body_timeout:控制请求体(如 POST 数据)上传时限,也建议同步设为 10–15 秒;
- send_timeout:控制响应发送给客户端的间隔超时,设为 10 秒可防止慢客户端拖住响应流;
- keepalive_timeout:保持空闲连接的时间,建议 15–30 秒,与 client_header_timeout 形成完整生命周期管理。


















