在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的父进程。
答案 0 :(得分:0)
nginx目前还没有在配置中引用其环境变量的内置功能。然而,最简单的解决方案是来自ngx_http_perl_module的perl_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;