Nginx 解决 Request Header Or Cookie Too Large
来源:本站原创
点击数: 次
发布时间:2026年07月14日
报错状态码一般是 400 / 494,根源:请求头、cookie 超出 nginx header buffer 缓冲区大小。
两个核心指令:
client_header_buffer_size:普通请求头初始缓冲区
large_client_header_buffers:超大请求头专用缓冲区
1、修改 nginx.conf(http 全局段,不是 server 块)
打开主配置 nginx.conf,在 http { } 里面添加 / 修改,不要写到 server {} 里面:
nginx
http {
# 默认一般4k,调大到16k
client_header_buffer_size 16k;
# 格式:数量 单块大小;4块,每块16k,总上限64k
large_client_header_buffers 4 16k;
# 下面原有配置保留……
include mime.types;
default_type application/octet-stream;
......
}参数参考:
普通业务:
client_header_buffer_size 16k; large_client_header_buffers 4 16k;如果 JWT、cookie 特别大,可以调到
32k:nginx
client_header_buffer_size 32k; large_client_header_buffers 4 32k;
2、校验配置 + 重载 nginx(重要,避免配置写错导致服务挂掉)
# 检查配置语法是否正确 nginx -t # 语法ok之后,平滑重载,不中断业务 nginx -s reload
3、注意坑点
❗这两个参数必须写在 http {} 层级,写在 server/location 不生效!
nginx 不会无限制放大,不建议盲目开到上百 k,缓冲区越大内存消耗越高。
如果调大缓冲区依然报错:
根本问题是 cookie/header 本身太大,优先业务侧优化:减少 cookie 内容、长 jwt 放请求 body,不要塞 header。
如果是反向代理到后端 tomcat/springboot:后端也要同步调大 header 上限,只改 nginx,后端依旧会报 400。
4、排查验证
浏览器 F12-Network,看请求头总大小;
nginx 错误日志 error.log 会打印类似:client sent too big header while reading client request headers,确认就是这个问题。
