nginx需配对调整client_header_buffer_size与large_client_header_buffers:前者设初始缓冲(如1k/2k/4k),后者提供独立大缓冲格子(如4 8k),且单个buffer大小不得小于前者;还需配置client_header_timeout、underscores_in_headers等加固项。

在 Nginx 主配置文件 nginx.conf 的 http 块内,通过 client_header_buffer_size 和 large_client_header_buffers 两个指令协同设置全局客户端请求头缓冲区大小。单独调大其中一个容易导致 400 错误或安全风险,必须配对调整。
client_header_buffer_size:设好第一道门槛
这是每个请求最先分配的头部缓冲区,默认仅 1k,只够存基础请求行和少量常规 Header(如 Host、User-Agent)。若业务涉及 JWT Token、多域 Cookie 或前端埋点字段,建议设为 2k 或 4k:
- 普通静态站或轻量 API:保持默认
1k即可 - 带认证 Token 的 Web 应用:设为
2k(约覆盖 2KB 的 Bearer Token + 基础头) - 微服务网关或全链路透传场景:设为
4k或8k,但需同步强化large_client_header_buffers
large_client_header_buffers:定义扩容能力与边界
它不叠加使用,而是提供若干个“独立大格子”,单个请求头必须完整装进其中某一个格子。语法是 large_client_header_buffers 数量 大小,关键规则:
- 单个 buffer 大小 ≥
client_header_buffer_size,否则扩容逻辑不触发,直接报错 - 常见稳妥组合:
large_client_header_buffers 4 8k(支持单请求头最大 8KB) - 避免设成
1 64k或1 1m:攻击者可构造单行超长 Header 耗尽 worker 内存 - 若真需更大容量(如 16KB),推荐
8 16k,并收紧client_header_timeout到 5–8 秒防慢速攻击
配套加固不可少
光调缓冲区不够,还需加几道防护:
-
client_header_timeout 5s:限制请求头上传时间,防慢速头攻击 -
underscores_in_headers off:禁用下划线,避免某些后端解析歧义 - 不要在 server 或 location 块里覆盖 http 级配置,除非有明确差异化需求
- 修改后执行
nginx -t校验语法,再nginx -s reload生效
配置写在 http { ... } 块内即可生效,无需每台 server 重复写。数值不是越大越安全,而是让合法请求顺畅通过、恶意请求被快速拦截。











