配置 nginx(反向代理)和 gunicorn 後,不再檢測到 env 變數(Ubuntu 上的 Django 應用程序)
在託管我的 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=1和secret=abc123。我已經嘗試過將
export awake=1
andexport secret=abc123
, in/etc/default/nginx
, ingunicorn.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
:那應該對你有用。