Назад | Перейти на главную страницу

Обслуживание django с помощью nginx и uWSGI

Я последовал за эта почта для обслуживания моего проекта 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 директива. Это позволит вам избавиться от бессмысленной избыточности locations для ваших статических ресурсов.

    root /home/deploy/vc;