如何在nginx.conf中引用OS环境变量

时间:2011-09-16 02:23:48

标签: nginx

在nginx.conf中。

set $name value设置变量后, 我可以像$name

一样引用它

但是当我导出OS环境变量时 按env name_from_env, 像https://nginx.org/en/docs/ngx_core_module.html#env所说的, 我确定name_from_env有效 定义了nginx的父进程。

但是,我的朋友们,如何参考呢? $ name_from_env或$ {name_from_env}或 %name_from_env%不起我以前尝试过的效果。

2 个答案:

答案 0 :(得分:0)

nginx目前还没有在配置中引用其环境变量的内置功能。然而,最简单的解决方案是来自ngx_http_perl_moduleperl_set指令,这是nginx的额外模块。官方nginx打包builds the Perl module dynamically因此确保您安装额外的nginx-module-perl包(或配置您的nginx自定义版本,如果这是您正在做的事情) )。

配置如下所示:

# Make environment variable available
env NAME_FROM_ENV;
# Load dynamic module (if built with Perl as dynamic module; omit if static)
load_module modules/ngx_http_perl_module.so;

http {
    server {
        location / {
            # Use Lua to get get and set the variable
            perl_set $name_from_env 'sub { return $ENV{"NAME_FROM_ENV"}; }';
            ...
        }
    }
}

另请参阅https://docs.apitools.com/blog/2014/07/02/using-environment-variables-in-nginx-conf.html了解如何使用Lua实现相同的目标。 Lua支持需要第三方模块,并且不附带nginx的默认软件包。

答案 1 :(得分:-1)

它应该是$ name_from_env,就像任何其他Nginx变量一样。

请注意,env只能用于配置的主要部分,而不能用于http,服务器或位置块。

我猜想在任何情况下,env都不是你真正需要的。如果您尝试将变量传递给应用程序,则应使用proxy_param或fastcgi_param(取决于您与上游的对话方式):

fastcgi_param MYVAR foo;