You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Nginx+Gunicorn部署项目遇大POST请求400错误求助

解决Nginx+Gunicorn环境下大POST请求返回400的问题

这种大请求触发400错误的情况我之前排查过好几次,除了你已经设置的Nginx client_max_body_size,还有几个容易被忽略的关键点,咱们一步步来确认:

1. 确保Nginx配置真正生效

你已经设置了client_max_body_size 100M,但首先要确认这个配置是否被正确加载:

  • 先检查配置语法是否合法:执行sudo nginx -t,如果提示test is successful才说明语法没问题
  • 重载Nginx使配置生效:执行sudo systemctl reload nginx(或者sudo service nginx reload,取决于你的系统)
  • 另外要注意:client_max_body_size需要放在正确的配置块里——如果你的请求是指向某个特定的location,最好把这个配置加到对应的location块中,而不是只放在http或server块(虽然全局块也生效,但局部块的配置会覆盖全局,避免被其他规则影响)

2. 检查Gunicorn的请求体大小限制

Gunicorn默认有请求体大小限制,默认值是1MB(也就是1048576字节),你的5MB请求已经超过了这个阈值,这很可能是导致400的核心原因:

  • 启动Gunicorn时直接添加参数调整限制:比如设置为100MB,命令如下:
    gunicorn --limit-request-body 104857600 your_app:app
    
  • 如果用配置文件管理Gunicorn,在配置文件中添加:
    limit_request_body = 104857600  # 100MB
    

修改后记得重启Gunicorn服务。

3. 验证请求序列化与Content-Type是否正常

你用了requests.post(..., json=data),requests会自动序列化数据并设置Content-Type: application/json,但大数据量下可能出现序列化异常或者请求头被意外覆盖的情况:

  • 手动序列化数据并指定请求头试试,排除自动处理的问题:
    import json
    # 确保headers里没有冲突的Content-Type设置
    headers["Content-Type"] = "application/json"
    serialized_data = json.dumps(data)
    r = requests.post(url, data=serialized_data, timeout=180, cookies=cookies, headers=headers)
    
  • 可以开启requests的调试模式,查看实际发送的请求细节,比如:
    import logging
    logging.basicConfig(level=logging.DEBUG)
    r = requests.post(url, json=data, timeout=180, cookies=cookies, headers=headers)
    
    这样能看到请求头、请求体的具体内容,确认是否有格式错误。

4. 排查后端框架的请求限制

如果你用了Django、Flask这类Web框架,框架本身也可能有请求大小限制:

  • Flask:检查是否设置了MAX_CONTENT_LENGTH,如果有,调整到合适大小:
    app.config['MAX_CONTENT_LENGTH'] = 100 * 1024 * 1024  # 100MB
    
  • Django:检查settings.py中的DATA_UPLOAD_MAX_MEMORY_SIZE(默认2.5MB)和FILE_UPLOAD_MAX_MEMORY_SIZE,修改为:
    DATA_UPLOAD_MAX_MEMORY_SIZE = 100 * 1024 * 1024
    FILE_UPLOAD_MAX_MEMORY_SIZE = 100 * 1024 * 1024
    

修改后重启后端服务。

先从Gunicorn的限制开始排查吧,这是最常见的大请求400原因,我之前碰到好几次都是这个问题。

内容的提问来源于stack exchange,提问作者mohammad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:56:45