Ubuntu

配置 nginx(反向代理)和 gunicorn 後,不再檢測到 env 變數(Ubuntu 上的 Django 應用程序)

  • December 25, 2015

在託管我的 Django 應用程序(帶有 postgres 後端)的 ubuntu 機器上,當我使用命令啟動 gunicorn 作為我唯一的網路伺服器時,我的環境變數被完美檢測到gunicorn --bind 0.0.0.0:8080 --env DJANGO_SETTINGS_MODULE=myproject.settings myproject.wsgi:application

接下來,我安裝了 nginx 並將其配置為使用 gunicorn 充當反向代理(在此處使用數字海洋指南)。沒有主管。這個新的 web 伺服器配置正確啟動,但現在它根本沒有檢測到 env 變數。

想像一下我的環境變數是awake=1secret=abc123。我已經嘗試過將export awake=1and export secret=abc123, in /etc/default/nginx, in gunicorn.conf, in /etc/environment(全域設置)。我還嘗試將它們添加到 nginx.confenv awake=1;env secret=abc123;.

沒有任何效果。

現在看來,nginx

刪除從其父程序繼承的所有環境變數,除了 TZ 變數

資料來源:http ://nginx.org/en/docs/ngx_core_module.html#env這可能是我嘗試的任何東西都沒有接近工作的原因嗎?儘管如此,echo $awake在命令行上產生 1,這告訴我變數可能已設置,但被繞過或忽略了。

它變得非常令人沮喪。誰能幫我解決這個問題?提前致謝。


wsgi.py:

import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings")
from django.core.wsgi import get_wsgi_application
from dj_static import Cling
application = Cling(get_wsgi_application())

gunicorn.conf:

description "Gunicorn application server handling myproject"

start on runlevel [2345]
stop on runlevel [!2345]

respawn
setuid myuser
setgid www-data
chdir /home/myuser/directory/myproject/

exec /home/myuser/.virtualenvs/myvirtualenv/bin/gunicorn --chdir=/home/myuser/directory/ --workers 3 --bind unix:/home/myuser/directory/myproject/myproject.sock --env DJANGO_SETTINGS_MODULE=myproject.settings myproject.wsgi:application

/etc/nginx/sites-available/myproject:

server {
   listen 80;
   server_name myapp.cloudapp.net;

   location = /favicon.ico { access_log off; log_not_found off; }
   location /static/ {
       root /home/myuser/directory/myproject;
   }

   location / {
       include proxy_params;
       proxy_pass http://unix:/home/myuser/directory/myproject/myproject.sock;
   }
}

注意:如果您需要,請詢問更多資訊

我建議在執行 gunicorn 的位置設置環境變數,如下所示gunicorn --bind0.0.0.0:8080 -e var1=value1 -e var2=value2 myproject.wsgi:application:那應該對你有用。

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