client_header_timeout指令用于设置nginx等待客户端发送完整请求头的最长时间,默认60秒,可在http、server、location块中配置,优先级依次为location>server>http;需nginx -t校验后reload生效,超时返回http 408。

直接在 http、server 或 location 块中写入 client_header_timeout 指令即可,单位支持 s(秒)或省略,默认值是 60 秒。它控制的是 Nginx 等待客户端发完全部请求头(比如 GET /path HTTP/1.1 和所有 Host、Authorization、Cookie 等)的最长时间。
配置位置和继承关系
这个指令可以在三个层级设置,优先级从高到低:
-
location块内 —— 最细粒度,只对特定路径生效(如 API 接口) -
server块内 —— 对该域名下所有请求生效 -
http块内 —— 全局默认值,被下级配置覆盖
典型配置示例
以下是一个分层设置的实际写法:
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
http {
client_header_timeout 60s; # 全局兜底
<pre class="brush:php;toolbar:false;">server {
listen 80;
server_name api.example.com;
client_header_timeout 30s; # 该域名缩短为30秒
location /v2/upload {
client_header_timeout 15s; # 上传接口更严格,仅15秒
}
}}
生效与验证要点
修改后必须执行两步才能生效:
- 先运行
nginx -t检查语法是否正确 - 再执行
nginx -s reload热重载配置(不是 restart) - 超时触发时,Nginx 错误日志会记录类似:
*12345 client timed out (110: Connection timed out) while reading client request headers - 客户端收到的是标准 HTTP 408 状态码,不是 502 或 504
设多少才合适
不能一刀切,要结合实际场景:
- 普通网页或轻量 API:10–20 秒足够(公网弱网波动常见,但 header 本身很小)
- 含大量 Cookie、JWT 或自定义鉴权头的服务:建议 15–30 秒
- 内网服务或可信终端(如 App 直连):可降到 10 秒甚至 5 秒,提升抗慢速攻击能力
- 不建议设超过 60 秒,否则易被 Slowloris 类攻击耗尽 worker 进程










