上传大文件 Flask Nginx Uwsgi

3
我有一个在远程Ubuntu服务器上运行的Flask应用,使用Nginx和Uwsgi。 我无法上传大于约200KB的文件。
为了制作我的应用程序,我遵循了这个教程: https://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-uswgi-and-nginx-on-ubuntu-18-04 起初我遇到了错误413,通过在/etc/nginx/nginx.conf中添加client_max_body_size 5M;来解决了问题。
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
        worker_connections 768;
        # multi_accept on;
}

http {

        ##
        # Basic Settings
        ##

        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;
        client_max_body_size 5M;
        # server_tokens off;

        # server_names_hash_bucket_size 64;
        # server_name_in_redirect off;

        include /etc/nginx/mime.types;
        default_type application/octet-stream;

        ##
        # SSL Settings
        ##

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
        ssl_prefer_server_ciphers on;

        ##
        # Logging Settings
        ##

        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;

        ##
        # Gzip Settings
        ##

        gzip on;

        # gzip_vary on;
        # gzip_proxied any;
        # gzip_comp_level 6;
        # gzip_buffers 16 8k;
        # gzip_http_version 1.1;
        # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

        ##
        # Virtual Host Configs
        ##

        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;
}

现在我没有任何错误,但是我仍然无法上传较大的文件。我还更改了我的应用程序uwsgi配置文件:
[uwsgi]
module = wsgi:app

master = true
processes = 10

limit-post = 20000000
ignore-sigpipe=true
ignore-write-errors=true
disable-write-exception=true


socket = main.sock
chmod-socket = 660
vacuum = true

die-on-term = true

logto= /var/log/uwsgi/%n.log

我还能做些什么来修复它?

2个回答

2

感谢Frank的回答,自从我发布这个帖子以来已经过了一段时间。如果我记得正确,错误有点微妙:Flask默认没有内置“重试”逻辑。这与我为测试找到的最便宜的服务器相结合,导致了一些最昂贵的请求失败。使用retry装饰器实现“重试”逻辑解决了我的问题。


2

看起来你已经正确设置了变量。也许你在Flask应用程序中设置了配置项MAX_CONTENT_LENGTH?它应该像这样:

app.config['MAX_CONTENT_LENGTH'] = 50 * 1024 * 1024 # 50 MB

默认情况下,Flask不应该对大量请求抱怨,但如果设置了此变量,则在请求超过指定值时会抛出413错误。请查看此处获取更多信息。

最后,请确保使用以下命令重新加载Nginx和uWSGI服务:

> sudo systemctl restart nginx.service
> sudo systemctl restart <yourservice>.service
.service 后缀是可选的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接