2014-02-18 243 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