繁体   English   中英

Nginx与django和uwsgi一起使用时出现问题

[英]Trouble with using Nginx with django and uwsgi

我按照http://uwsgi-docs.readthedocs.org/en/latest/tutorials/Django_and_nginx.html中的步骤进行操作,但是当所有步骤完成而没有任何错误时,我访问了127.0.0.1:8000,它的响应超时,我的nginx日志显示

上游超时(110:连接超时),同时从上游读取响应头,

顺便说一下,我可以访问127.0.0.1:8001,其中uwsgi和django运行良好。 而且我也可以访问127.0.0.1:8000/image/1.jpg中的图像,但无法访问127.0.0.1:8000

这是我的nginx.conf

upstream django {
    server 127.0.0.1:8001;
}

server {
    listen 8000;
    server_name 127.0.0.1
    charset utf-8;

    client_max_body_size 75M;

    location /media {
        alias /home/zhaolei/virtualdjango/bin/mysite/media;
    }

    location /image {
        alias /home/zhaolei/virtualdjango/bin/mysite/image;
    }

    location / {
        uwsgi_pass django;
        include /home/zhaolei/virtualdjango/bin/mysite/uwsgi_params;
    }
}

我使用uwsgi --http 127.0.0.1:8001 --chdir=mysite --module=mysite.wsgi运行uwsgi --http 127.0.0.1:8001 --chdir=mysite --module=mysite.wsgi 我在https://github.com/nginx/nginx/blob/master/conf/uwsgi_params中使用uwsgi_params主机

uWSGI有2种协议可与Web服务器通信。 其中之一是普通的HTTP协议,该协议也可用于直接与客户端通信。 但是,还有特殊的uwsgi协议,该协议针对HTTP代理服务器和uWSGI之间的通信进行了优化。

当使用uwsgi_pass指令时,nginx将使用该协议,而在使用--socket参数启动uWSGI服务器时,将由uWSGI使用该协议。

如果您要使用--http参数启动uWSGI,则uWSGI将使用HTTP协议(这就是您正在做的事情),但是如果nginx仍在使用uwsgi_pass则期望在该套接字上使用uWSGI协议,而不是HTTP。

要解决此问题,您必须将--http start命令更改为使用--socket而不是--http (这是推荐的方式,但是您无法通过直接在浏览器中输入127.0.0.8001来检查uWSGI是否正常运行,但这没关系:如果您使用--http的命令正常运行,则在--http使用--socket或使用proxy_pass而不是uwsgi_pass不会有任何区别。

并在您提到的链接上进行了描述,就在这里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM