我正在关注教程Setting up Django and your web server with uWSGI and nginx。
我使用以下行设置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
。
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"
如果我关闭刚刚从shell运行的uWSGI,我会立即获得502 Bad Gateway
。
在线搜索时,人们只建议将uWSGI超时设置为低于nginx超时,这就是我使用--harakiri 5
运行uWSGI的原因。
那么,我的问题是什么?
答案 0 :(得分:22)
我认为您在http模式--http 0.0.0.0:8002
中运行uwsgi但是您已将nginx配置为wsgi代理将您的uwsgi脚本更改为:
uwsgi --socket :8002 --module wsgi --harakiri 5
请注意,如果您在同一台计算机上运行nginx
和uwsgi
,最好使用unix sockets