我正在学习使用uWSGI和nginx设置Django和Web服务器的教程。
我设置了uwsgi来为我的Django项目提供以下行。
mydjangoproj $ uwsgi --http 0.0.0.0:8002 --module wsgi --harakiri 5
当我在浏览器中去那里时,这是有效的,到42.42.42.42:8002
。
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
请注意,如果您在同一台机器上运行nginx
和uwsgi
,最好使用unix套接字