如何在Django中增大请求头最大值?解决431请求头过大报错
解决Django请求头过大导致431错误的方案
因为OAuth2-Proxy会在请求头中携带所有用户组信息,导致请求头体积超标,Django因此返回431(Request Header Fields Too Large)错误,报错内容如下:
Request Header Fields Too Large
Error parsing headers: 'limit request headers fields size'
以下是调整请求头最大值的具体方案:
1. 针对Gunicorn部署的情况
如果你的Django用Gunicorn运行,启动时需要增加两个参数来放宽请求头限制:
--limit-request-fields:控制请求头字段的最大数量,默认是100,根据实际用户组数量调大,比如设为200--limit-request-field-size:控制单个请求头字段的最大字节数,默认8190字节,可调整为16384字节(16KB)
示例启动命令:
gunicorn your_project.wsgi:application --limit-request-fields 200 --limit-request-field-size 16384
如果用Gunicorn配置文件管理参数,在配置文件(如gunicorn.conf.py)中添加:
limit_request_fields = 200 limit_request_field_size = 16384
2. 针对前端有Nginx反向代理的情况
如果Django前面搭了Nginx做反向代理,必须调整Nginx的请求头缓冲区配置,修改Nginx配置文件中的large_client_header_buffers参数:
large_client_header_buffers 4 16k;
这里的4是缓冲区个数,16k是每个缓冲区的大小,总容量为64KB,可根据实际需求进一步调大。
修改完成后重启Nginx生效:
sudo systemctl restart nginx
3. Django自身检查
Django本身没有直接限制请求头大小的配置,但要确认你没有在自定义中间件中额外添加请求头大小的校验逻辑,如果有,需要对应调整或移除限制。
内容的提问来源于stack exchange,提问作者Lukas
相关产品推荐
相关产品推荐

