配置 nginx(反向代理)和 gunicorn 后,环境变量不再被检测到(Ubuntu 上的 Django 应用程序)

配置 nginx(反向代理)和 gunicorn 后,环境变量不再被检测到(Ubuntu 上的 Django 应用程序)

在托管我的 Django 应用程序(带有 postgres 后端)的 ubuntu 机器上,当我使用以下命令启动 gunicorn 作为我唯一的 Web 服务器时,我的环境变量被完美地检测到gunicorn --bind 0.0.0.0:8080 --env DJANGO_SETTINGS_MODULE=myproject.settings myproject.wsgi:application

接下来,我安装了 nginx,并将其配置为使用 gunicorn 的反向代理(使用 digital ocean指南在这里)。没有主管。这个新的 Web 服务器配置正确启动,但现在它根本检测不到环境变量。

想象一下我的环境变量是醒着=1秘密=abc123。我已经尝试将export awake=1和放入export secret=abc123、、 中/etc/default/nginx(将它们设置为全局变量)。我还尝试将它们作为和添加到 nginx.conf 中。gunicorn.conf/etc/environmentenv 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;
    }
}

注:如有需要请询问更多信息

答案1

我建议在运行 gunicorn 的地方设置环境变量,如下所示:gunicorn --bind0.0.0.0:8080 -e var1=value1 -e var2=value2 myproject.wsgi:application。这应该对你有用。

相关内容