将 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 日志显示

upstream timed out (110: Connection timed out) while reading response header from upstream,

顺便说一句,我可以访问 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。我在 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。

要修复它,您必须更改您的 uwsgi 启动命令以使用 --socket 而不是 --http(这是推荐的方式,但您将无法检查 uWSGI 是否正常运行通过直接在浏览器中输入 127.0.0.8001,但这没关系:如果使用 --http 的命令运行正常,则使用 --socket) 或使用 proxy_pass 不会有任何区别uwsgi_pass 在您的 nginx 配置中。

在 link 上有描述提到你,对 here