Я установил свое приложение 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;
}