large_client_header_buffers是nginx处理超长请求头的备用缓冲区配置,解决因cookie、jwt token或长url等导致请求头超出默认1k初始缓冲而触发400/414错误的问题;其语法为large_client_header_buffers number size,默认4 8k,要求单个请求头必须能完整放入一个buffer(不可拼接),需与client_header_buffer_size协同调整。

这个配置是 Nginx 处理 HTTP 请求头时的“备用登记簿”,专门应对那些比常规请求头更长的特殊情况。
它解决什么问题
当客户端发来的请求头(比如超长 URL、一堆 Cookie、JWT Token 或自定义埋点 Header)超过初始缓冲区(client_header_buffer_size,默认 1k)时,Nginx 就需要更大的空间来完整接收和解析。否则会直接拒收,返回 400 或 414 错误。
- GET 请求中 URL 过长 → 触发 414(URI Too Long)
- Cookie 或自定义 Header 总长度超标 → 触发 400(Bad Request)
- 错误日志里常出现 “client sent too large header” 提示
它的实际工作方式
它不是把多个缓冲区拼起来用,而是提供一组“同规格”的独立缓冲区,每个都能单独装下整个请求头。关键限制是:单个请求头必须能放进其中一个 buffer 里。
- 语法:large_client_header_buffers
- 默认值:4 8k,即最多可用 4 个缓冲区,每个最大 8KB
- 注意:哪怕总容量有 32KB,但若某次请求头长达 9KB,仍会失败——因为单个 buffer 不够大
怎么调才合理
不能只看“够不够大”,还要兼顾内存开销和安全性。盲目设成 8 64k 会浪费资源,也增加 DoS 风险。
- 普通 Web 站点:保持默认 4 8k 即可
- 带 OAuth2 / SSO 的应用:建议调为 4 16k,并同步把 client_header_buffer_size 改成 4k
- 微服务网关或需透传大量 Header 的场景:可设为 8 16k,但务必配合业务侧精简 Header
- 调整后必须运行 nginx -t 校验,并 reload 生效
和其他参数的关系
它和 client_header_buffer_size 是协作关系,不是替代关系:
- client_header_buffer_size 是第一道门,处理 95% 的常规请求
- large_client_header_buffers 是后备通道,只在第一道门塞不下时启用
- 两者都设得过大,会增加每个连接的内存占用;都设得太小,会导致合法请求被拦截











