我跟着这个post来服务我的Django项目。 该项目与manage.py runserver
运行服务器运行良好,我想设置为生产。 这是我的设置文件:
nginx.conf
:
upstream django { server /tmp/vc.sock; #server 10.9.1.137:8002; } server { listen 8001; server_name 10.9.1.137; charset utf-8; client_max_body_size 25M; location /media { alias /home/deploy/vc/media; } location /static { alias /home/deploy/vc/static; } location / { uwsgi_pass django; include /etc/nginx/uwsgi_params; } }
uwsgi.ini
:
[uwsgi] chdir = /home/deploy/vc wsgi-file = vc/wsgi.py master = true processes = 2 #socket = :8002 socket = /tmp/vc.sock chmod-socket = 666 vacuum = true
如果我使用TCP端口套接字( server 10.9.1.137:8002
和socket = :8002
),它会没事的。 但是,如果我注释掉它们并使用Unix套接字( server /tmp/vc.sock
和socket = /tmp/vc.sock
),服务器将返回502错误。 我应该如何解决它?
EDIT
下面是运行/etc/init.d/nginx restart
时的nginx错误日志
nginx: [emerg] invalid host in upstream "/tmp/vc.sock" in /etc/nginx/conf.d/vc.conf:2 nginx: configuration file /etc/nginx/nginx.conf test failed
这是我运行uwsgi --ini vc/uwsgi.ini
时的警告:
*** WARNING: you are running uWSGI as root !!! (use the --uid flag) ***
我不能以root身份运行uWSGI吗?
罗伯托的评论应该是一个答案!
nginx中unix套接字路径的语法是错误的,你需要用unix前缀:
检查你的nginx错误日志,很可能是告诉你它没有权限的套接字。 Unix套接字支持文件系统权限,所以nginx必须具有套接字文件的写权限。 简短的回答:664是不够的,你需要666