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

Flask/Gunicorn大文件上传异常:本地正常服务器部署后失效求助

解决Gunicorn部署后Flask大文件上传失败的问题

这个问题我之前帮朋友排查过,本地跑没问题但Gunicorn部署后传大文件失败,大概率是Gunicorn或者反向代理(比如Nginx)的默认大小限制在搞鬼,咱们一步步来解决:

1. 检查并配置Gunicorn的请求体大小限制

Gunicorn默认的请求体大小限制是1MB,远小于你需要的20MB,必须手动修改:

方式一:启动命令添加参数

如果是直接用命令启动Gunicorn,加上--max-request-body-size参数:

gunicorn --max-request-body-size 20M --workers 3 --bind unix:your_app.sock your_app:app

也可以用字节数精确指定(20MB=20971520字节):

gunicorn --max-request-body-size 20971520 --workers 3 --bind unix:your_app.sock your_app:app

方式二:通过Gunicorn配置文件设置

如果用配置文件(比如gunicorn.conf.py),添加以下内容:

max_request_body_size = 20 * 1024 * 1024  # 20MB

启动时指定配置文件即可:

gunicorn -c gunicorn.conf.py your_app:app

方式三:修改systemd服务配置(如果用systemd管理Gunicorn)

打开你的Gunicorn系统服务文件(通常在/etc/systemd/system/gunicorn.service),在ExecStart行末尾加上--max-request-body-size 20M:

[Service]
User=www-data
Group=www-data
WorkingDirectory=/path/to/your/app
ExecStart=/usr/bin/gunicorn --workers 3 --bind unix:your_app.sock --max-request-body-size 20M your_app:app

修改后重启服务:

sudo systemctl daemon-reload
sudo systemctl restart gunicorn

2. 检查Nginx反向代理的配置(如果用了Nginx)

如果你的应用前面挂了Nginx做反向代理,Nginx默认也有1MB的上传大小限制,必须修改:

打开Nginx的站点配置文件(比如/etc/nginx/sites-available/your_app),在server块内添加client_max_body_size 20M;:

server {
    listen 80;
    server_name your_domain.com;

    # 添加这行设置上传大小限制
    client_max_body_size 20M;

    location / {
        proxy_pass http://unix:/path/to/your_app.sock;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

修改后重启Nginx:

sudo systemctl restart nginx

3. 确认Flask的配置无误

再检查一遍Flask的MAX_CONTENT_LENGTH配置,确保是在创建app实例后设置的:

from flask import Flask

app = Flask(__name__)
app.config['MAX_CONTENT_LENGTH'] = 20 * 1024 * 1024  # 20MB

# 可选:添加413错误的友好提示
@app.errorhandler(413)
def request_too_large(error):
    return "上传文件大小超过限制(最大20MB)", 413

4. 检查上传目录的权限

确保Gunicorn运行的用户(比如www-data)有上传目录的写入权限,比如你的上传目录是static/uploads:

sudo chown -R www-data:www-data /path/to/your/app/static/uploads
sudo chmod -R 755 /path/to/your/app/static/uploads

完成以上步骤后,再测试上传20MB的文件应该就正常了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:49:45