我已经在 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;
}