Nginx
使用 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:8002
andsocket = :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) ***
我不能以 root 身份執行 uWSGI 嗎?
使用
upstream
server
Unix 域套接字的必須聲明如下:upstream django { server unix:/tmp/vc.sock;
是的,我想你可以以 root 身份執行 uWSGI,但你絕對不應該這樣做。這就是安全 101。uWSGI 項目甚至稱其為常識:
常識:不要以 root 身份執行 uWSGI 實例。您可以以 root 身份啟動 uWSGI,但請務必使用
uid
和gid
選項刪除權限。順便說一句,您的
server
塊可以使用root
指令。這將使您擺脫location
靜態資產的那些無意義的冗餘 s。root /home/deploy/vc;