client_header_timeout 是 Nginx 控制客户端发送请求头超时时间的指令,从接收首字节起计算,超时返回 408;仅作用于请求头读取阶段,不影响请求体传输,可在 http/server/location 块中配置,需 reload 生效。

client_header_timeout 是 Nginx 在 http 块(也可在 server 或 location 块中)中用于控制客户端发送 HTTP 请求头的超时时间。它不是针对整个请求,而是专指从 Nginx 接收到请求的第一字节开始,到完整接收到请求行(如 GET / HTTP/1.1)和所有请求头(headers)之间允许等待的最大秒数。
作用范围与生效时机
该指令只影响请求头的读取阶段,不涉及请求体(body)传输(那是 client_body_timeout 的职责)。一旦请求头接收完成,Nginx 就会立即开始处理(比如匹配 location、执行 rewrite 等),后续流程不再受此值约束。
- 若客户端在设定时间内未发完请求头(例如网络卡顿、恶意慢速攻击、客户端异常中断),Nginx 返回
408 Request Timeout - 该超时独立于
keepalive_timeout,后者控制空闲长连接的保持时间 - 在
http块中设置为全局默认值;可在server块中覆盖,实现不同虚拟主机差异化配置
典型配置示例
推荐根据实际业务场景设为合理值,避免过短误杀正常用户,也避免过长助长资源占用:
http {
# 全局默认:客户端需在 60 秒内发完全部请求头
client_header_timeout 60;
<pre class="brush:php;toolbar:false;">server {
listen 80;
server_name example.com;
# 针对该域名缩短为 30 秒(如面向内网或高可信环境)
client_header_timeout 30;
location /api/ {
# API 接口更严格,仅允许 10 秒
client_header_timeout 10;
}
}}
调试与验证方法
可通过日志和抓包确认是否触发超时:
- 启用
error_log并设为info级别,超时时会记录类似:
*1023 client timed out (110: Connection timed out) while reading client request headers - 用
curl -v模拟慢速请求头(需借助工具如slowhttptest或自写脚本延迟发送) - Nginx 状态页(需启用
ngx_http_stub_status_module)不直接显示该超时统计,需依赖 error log 分析
常见误区提醒
注意不要混淆相似指令:
-
client_header_timeout≠client_max_body_size(限制请求体大小) -
client_header_timeout≠send_timeout(控制响应发送给客户端的超时) - 修改后必须
nginx -t && nginx -s reload才生效,热重载不支持语法错误跳过 - 若使用了反向代理(如前端有 SLB、CDN),真实超时可能由中间层先触发,此时 Nginx 的设置可能未被触及

















