nginx和uWSGI给出了“504网关超时”

我正在学习使用uWSGI和nginx设置Django和Web服务器的教程。

uWSGI正在运行

我设置了uwsgi来为我的Django项目提供以下行。

mydjangoproj $ uwsgi --http 0.0.0.0:8002 --module wsgi --harakiri 5 

当我在浏览器中去那里时,这是有效的,到42.42.42.42:8002

我的nginx设置

nginx作为一个守护进程运行,并访问它的默认站点,端口80,工作。

我使用下面的mydjangoproj_nginx.conf文件将它作为一个站点添加到nginx:

 server { listen 8000; server_name 42.42.42.42; charset utf-8; client_max_body_size 75M; location /static { alias /home/myuser/mydjangoproj/static; } location / { uwsgi_pass 127.0.0.1:8002; include /home/myuser/mydjangoproj/uwsgi_params; } } 

我使用本教程中未修改的uwsgi_params版本:

 uwsgi_param QUERY_STRING $query_string; uwsgi_param REQUEST_METHOD $request_method; uwsgi_param CONTENT_TYPE $content_type; uwsgi_param CONTENT_LENGTH $content_length; uwsgi_param REQUEST_URI $request_uri; uwsgi_param PATH_INFO $document_uri; uwsgi_param DOCUMENT_ROOT $document_root; uwsgi_param SERVER_PROTOCOL $server_protocol; uwsgi_param HTTPS $https if_not_empty; uwsgi_param REMOTE_ADDR $remote_addr; uwsgi_param REMOTE_PORT $remote_port; uwsgi_param SERVER_PORT $server_port; uwsgi_param SERVER_NAME $server_name; 

它确实为静态文件提供服务。

错误

如果我访问42.42.42.42:8000,它会挂起很长时间,直到我猜想nginx超时,我得到504 Gateway Time-out

uWSGI在shell中不写任何东西。 如果直接在浏览器中访问,则会写入关于接收请求的信息。

只有在超时之后,nginx错误日志才会写入:

 2014/12/11 05:31:12 [error] 28895#0: *1 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 66.66.66.66, server: 42.42.42.42, request: "GET / HTTP/1.1", upstream: "uwsgi://42.42.42.42:8002", host: "42.42.42.42:8000" 

如果我closures刚刚从shell运行的uWSGI,我会立即得到一个502 Bad Gateway

当在线search时,人们只是build议设置uWSGI超时低于nginx超时,这就是为什么我用--harakiri 5运行uWSGI。

那么,我的问题在这里呢?

我认为你在http模式下运行--http 0.0.0.0:8002但你已经配置nginx为wsgi代理更改你的uwsgi脚本为:

  uwsgi --socket :8002 --module wsgi --harakiri 5 

请注意,如果您在同一台机器上运行nginxuwsgi ,最好使用unix套接字