配置 Nginx 和 Gunicorn 后未设置环境变量(Ubuntu 机器上的 Django 应用程序)

Environment variables not being set after configuring Nginx and Gunicorn (Django app on Ubuntu machine)

我刚刚为 Django 网络应用程序设置了带有 Nginx(反向代理)的 Gunicorn。该组合似乎按照 gunicorn.log 正确启动。请注意,我没有使用主管。

但奇怪的是,我的 环境变量 (在 .profile 中设置)根本没有被提取! printenv 表明它们存在。我尝试过的一些事情是将环境变量放入 /etc/default/nginx 并在 etc/environment.profilenginx.confgunicorn.conf 等中重新启动 nginx . 就是不行!

顺便说一下,在安装和配置 nginx 之前它工作得很好,即当我只是 运行: gunicorn --bind 0.0.0.0:8080 --env DJANGO_SETTINGS_MODULE=myproject.settings myproject.wsgi:application.

现在好像是nginx:

removes all environment variables inherited from its parent process except the TZ variable

来源:http://nginx.org/en/docs/ngx_core_module.html#env 这可能是我尝试的任何事情都无法奏效的原因吗?但如果是这样,我想这些添加到 nginx.conf 的变量应该已经被拾取了。然而,使用 echo $envvar 会在命令行上产生正确的值,这告诉我也许变量已设置,但 被绕过或忽略 。请注意,USER env 变量也显示为 None,而 print TERM 打印 linux.


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.conf,如下所示:

exec /home/myuser/.virtualenvs/myvirtualenv/bin/gunicorn --chdir=/home/myuser/directory/ --workers 3 --bind unix:/home/myuser/directory/myproject/myproject.sock -e var1=value1 -e var2=value2 myproject.wsgi:application

到目前为止,这对我很有帮助。如果我 运行 遇到任何问题,我会更新这个答案。