client_header_buffer_size必须与large_client_header_buffers协同配置才能生效,它仅控制单行请求头(如Cookie、Authorization)的初始缓冲大小,默认1k易致400错误;单独调大无效,且须满足前者≤后者单缓冲区大小,推荐按实测最大单行长度向上取整并置于http或server块顶层。

调大 client_header_buffer_size 本身不能单独解决超长 Header 问题,它必须和 large_client_header_buffers 协同生效——前者是初始缓冲“小门”,后者才是扩容“备用房间”。设错、配错或放错位置,400 或 414 错误照常出现。
它到底管什么?别被名字带偏
client_header_buffer_size 只控制每行请求头的初始内存空间,比如整条 Cookie: 或 Authorization: 字段。它不控制整个请求头总长度,也不管请求体(那是 client_max_body_size 的事)。默认 1k 对现代应用明显不够:一个紧凑 JWT 就约 1.2–2.5KB,含多域追踪 ID 的 Cookie 常超 4KB。
- 它限制的是单行长度,不是总长;Nginx 不会把一行拆到多个 buffer 拼接
- 若某行(如 Cookie)超出该值,Nginx 就尝试启用
large_client_header_buffers中的缓冲区 - 若后者单块大小 ≤ 前者,扩容逻辑直接跳过,立刻返回 400
必须同步配对的两个参数
只改 client_header_buffer_size 是无效甚至危险的操作。以下组合必须同时设置且满足约束:
-
client_header_buffer_size的值 ≤large_client_header_buffers的第二个参数(单块大小),否则 Nginx 启动或 reload 失败 - 例如:
client_header_buffer_size 4k;必须搭配large_client_header_buffers 2 8k;(不能是2 4k) - 若实测最大单行 Header 达 12KB,
large_client_header_buffers单块至少设为 16k,数量按并发容忍度定(如4 16k)
按场景选最小够用值
盲目堆大(如设成 64k 或 1m)会放大 slowloris 类攻击风险,也浪费 worker 内存。应基于真实流量测量后向上取整:
- 纯静态站 / 无认证接口:保持
1k即可 - 含 JWT 鉴权服务:推荐
client_header_buffer_size 4k;+large_client_header_buffers 2 8k; - 反向代理或多层网关(X-Forwarded-* 叠加严重):用
8k+4 16k - SSR 页面或超长 query 缓存键:可设
384k+4 512k,但需确认单行不超 512k
配置位置与配套动作
这两个指令必须放在 http { } 块顶层,或至少在 server { } 块内、所有 location 外;放在 location 内不生效。
- 修改后执行
nginx -t校验语法,重点确认大小关系是否合规 - 用
nginx -s reload平滑重载,避免中断连接 - 开启
error_log ... warn,盯住日志中是否还有client sent too large header提示 - 对高风险路径(如
/api/)可单独强化,公开健康检查接口(如/health)保持默认1k,缩小攻击面


















