Nginx 通过 client_header_buffer_size 和 large_client_header_buffers 控制请求头缓冲区:前者设初始大小(默认1k),后者定义超限时的缓冲区数量与单个大小(如4 8k),单请求头不得超过单个large缓冲区大小,否则返回414或400。

在 Nginx 的 http 块中全局调整客户端请求头部缓冲区大小,主要通过 client_header_buffer_size 和 large_client_header_buffers 两个指令控制。它们共同决定 Nginx 如何接收和解析 HTTP 请求头,对处理含长 URL、大量 Cookie 或自定义 Header 的请求至关重要。
client_header_buffer_size:基础缓冲区大小
该指令设置 Nginx 为每个请求分配的初始头部缓冲区大小,默认值通常为 1k(1024 字节)。若请求头未超出此大小,Nginx 直接使用该缓冲区解析;一旦超限,就会启用 large_client_header_buffers 中定义的更大缓冲区。
建议根据实际业务调整,例如:
- 普通网站(无复杂 Header):保持默认
1k即可 - 含长 Token、多段 Cookie 或前端埋点 Header 的应用:可设为
2k或4k - 微服务网关或需透传大量自定义头的场景:设为
8k并配合增大 large 缓冲区
large_client_header_buffers:应对超大请求头
当请求头超过 client_header_buffer_size 时,Nginx 会尝试从这里分配缓冲区。语法为:large_client_header_buffers number size,其中 number 是缓冲区个数(如 4),size 是每个缓冲区大小(如 8k)。
注意点:
- 总可用缓冲空间 =
number × size,但 Nginx 不会拼接多个缓冲区;单个请求头必须能放进一个 buffer 中 - 若请求头长度仍超过单个
size,返回414 URI Too Long(对 GET)或400 Bad Request - 典型配置如
large_client_header_buffers 4 8k,表示最多用 4 个 8k 缓冲区,即单个请求头最长支持 8k
关联配置与常见问题
仅调大缓冲区还不够,还需注意:
-
client_max_body_size控制请求体,不影响请求头,勿混淆 -
client_header_timeout应同步检查,避免因缓冲区扩容导致等待时间过长而超时 - 若频繁出现
400且日志提示"client sent too large request"或"excess request headers",优先检查这两个 header 缓冲指令 - 修改后务必
nginx -t测试配置,并nginx -s reload生效
合理设置这两个参数,既能兼容特殊客户端请求,又避免过度分配内存。不复杂但容易忽略。










