使用 nginx 和 uWSGI 为 django 提供服务

使用 nginx 和 uWSGI 为 django 提供服务

我跟着这个帖子为我的 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:8002socket = :8002),那就没问题了。但是,如果我将它们注释掉并使用 Unix 套接字(server /tmp/vc.socksocket = /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) *** 

我不能以 root 身份运行 uWSGI 吗?

答案1

一个upstream server使用 Unix 域套接字必须声明如下:

upstream django {
    server unix:/tmp/vc.sock;

是的,我想你可以以 root 身份运行 uWSGI,但是你绝对不应该。这是安全 101。uWSGI 项目甚至称之为常识

常识:不要以 root 身份运行 uWSGI 实例。你可以以 root 身份启动 uWSGI,但一定要使用uidgid选项放弃权限。


顺便说一句,您的server块可以使用root指令。这样您就可以摆脱location静态资产中那些毫无意义的冗余。

    root /home/deploy/vc;

相关内容