Nginx

使用 nginx 和 uWSGI 服務 django

  • January 17, 2014

我跟著這篇文章為我的 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:8002and socket = :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 嗎?

使用upstream serverUnix 域套接字的必須聲明如下:

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

是的,我想你可以以 root 身份執行 uWSGI,但你絕對不應該這樣做。這就是安全 101。uWSGI 項目甚至稱其為常識

常識:不要以 root 身份執行 uWSGI 實例。您可以以 root 身份啟動 uWSGI,但請務必使用uidgid選項刪除權限。


順便說一句,您的server塊可以使用root指令。這將使您擺脫location靜態資產的那些無意義的冗餘 s。

   root /home/deploy/vc;

引用自:https://serverfault.com/questions/567898