Я последовал за эта почта для обслуживания моего проекта 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. Как мне это исправить?
Вот журнал ошибок nginx при запуске /etc/init.d/nginx restart
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) ***
Не могу ли я запустить uWSGI как root?
An upstream
server
который использует сокет домена Unix, должен быть объявлен как таковой:
upstream django {
server unix:/tmp/vc.sock;
И да, я полагаю, ты мог запустите uWSGI как root, но Вы совершенно точно не должны. Это безопасность 101. Проект uWSGI зашел так далеко, что назовите это здравым смыслом:
Здравый смысл: не запускайте экземпляры uWSGI от имени пользователя root. Вы можете запустить свой uWSGI от имени пользователя root, но не забудьте сбросить привилегии с помощью
uid
иgid
параметры.
Кстати, ваш server
блок может использовать root
директива. Это позволит вам избавиться от бессмысленной избыточности location
s для ваших статических ресурсов.
root /home/deploy/vc;