Назад | Перейти на главную страницу

Gunicorn работает против тайм-аута uwsgi

Я установил свое приложение Python / Django на машине vmware с 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.

Может ли кто-нибудь помочь указать, что я здесь делаю?

Спасибо

Добавление --protocol = http решило проблему. По умолчанию uwsgi работает с протоколом wsgi, который не принимает HTTP-запросы.

Кроме того, вместо использования обратного прокси необходимо использовать режим 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;
}