gunicorn 工作与 uwsgi 超时

gunicorn 工作与 uwsgi 超时

我已经在 vmware 机器上安装了我的 Python / Django 应用程序,其中安装了 CentOS、uwsgi 和 gunicorn 以及所有应用程序依赖项。

使用以下命令通过 gunicorn 运行我的应用程序后:

gunicorn --workers=4 --bind=0.0.0.0:8081 wsgi:application

该应用程序运行良好,一切顺利。但是,我尝试使用 uwsgi 运行它,以比较两者的性能(请求数/秒)。因此,我运行了以下命令:

sudo uwsgi --chdir=/var/www/pyapp/ --module=wsgi:application --env DJANGO_SETTINGS_MODULE=settings --socket=127.0.0.1:8081 --processes=5  --harakiri=20  --max-requests=5000  --vacuum --master --pidfile=/tmp/pyapp-master.pid

我在运行此程序时遇到的第一个问题是以下错误:

invalid request block size: 21573 (max 4096)...skip

添加 -b 25000 使缓冲区大于最大值后,我开始遇到:

timeout. skip request.

我无法怀疑我的应用程序出了问题,因为它与 gunicorn 一起运行时没有出现这样的问题。

有人能帮忙指出我在这里做什么吗?

谢谢

答案1

添加 --protocol=http 解决了该问题。默认情况下,uwsgi 使用不接受 http 请求的 wsgi 协议。

另外,不能使用反向代理,而要使用 uwsgi 模式

upstream myapp {
    server 127.0.0.1:8081;
}
server {
    listen 80;
    server_name apps.myapp.com apps-backend.myapp.com;

    root /www/python/apps/myapp/;

    access_log /var/log/nginx/apps.myapp.com.access.log;
    error_log /var/log/nginx/apps.myapp.com.error.log;

    # https://docs.djangoproject.com/en/dev/howto/static-files/#serving-static-files-in-production
    location /static/ {
        alias /www/python/apps/myapp/static/;
        expires 30d;
    }

    location /media/ {
        alias /www/python/apps/myapp/media/;
        expires 30d;
    }

    location / {
        uwsgi_pass myapp;
        include uwsgi_params;
#        proxy_pass_header Server;
#        proxy_set_header Host $http_host;
#        proxy_redirect off;
#        proxy_set_header X-Real-IP $remote_addr;
#        proxy_set_header X-Scheme $scheme;
#        proxy_connect_timeout 50;
#        proxy_read_timeout 50;
#        proxy_pass http://localhost:8081/;
    }

    # what to serve if upstream is not available or crashes
    #error_page 500 502 503 504 /media/50x.html;
}

相关内容