2014-02-18 209 views
10

我有以下情况:我有一个env变量$SOME_IP定义,并希望在nginx块中使用它。谈到nginx documentation我用env指令在nginx.conf文件类似如下:nginx:使用环境变量

user www-data; 
worker_processes 4; 
pid /run/nginx.pid; 

env SOME_IP; 

现在我想用变量的proxy_pass。我试了一下像下面这样:

location/{ 
    proxy_pass http://$SOME_IP:8000; 
} 

但我结束了此错误消息:nginx: [emerg] unknown "some_ip" variable

回答

4

正确的用法是$SOME_IP_from_env,但是从nginx.conf设置环境变量不能在服务器上,位置上使用或http块。

如果使用包含Lua的openresty bundle,则可以使用环境变量。

+0

谢谢!但是没有选择使用在服务器块中'nginx.conf'中定义的变量吗? – schickling

+0

在服务器块中,您使用语法'set $ var“value”;',然后在整个配置中引用$ var。但是你不能使用env变量。 –

+0

为人们节省了一些时间(以上需要自定义构建),您可以使用模板和名为envsubst的工具http://serverfault.com/a/755541/116508为docker做了这个工作,并且它可以工作,只需指定env变量或者你可能会无意中清除nginx中的变量,例如'''$ host''' – Louis

18

你可以通过模块访问变量 - 我找到了用Lua和Perl做的选项。

写了关于它在我公司的博客:

https://docs.apitools.com/blog/2014/07/02/using-environment-variables-in-nginx-conf.html

的TL; DR:

env API_KEY; 

然后:

http { 
... 
    server { 
    location/{ 
     # set var using Lua 
     set_by_lua $api_key 'return os.getenv("API_KEY")'; 

     # set var using perl 
     perl_set $api_key 'sub { return $ENV{"API_KEY"}; }'; 
     ... 
    } 
    } 
} 
+0

@ S.Kirby谢谢,已更新! – kikito