2014-02-18 3 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-блоки.

Вы можете использовать переменные окружения, если используете openresty bundle, который включает в себя Lua.

+0

Спасибо! Но нет ли возможности использовать переменные, определенные в 'nginx.conf' в серверных блоках? – schickling

+0

В серверном блоке вы используете синтаксис 'set $ var 'value"; ', а затем ссылаетесь на $ var в вашей конфигурации. Но вы не можете использовать env vars. –

+0

Сохранение людей в определенное время (для этого требуется специальная сборка), вы можете использовать шаблон, а инструмент под названием envsubst http://serverfault.com/a/755541/116508 сделал это для докера, и он работает, просто укажите env vars или вы можете случайно стереть vars в nginx, например, '' '$ host''' – Louis

18

Вы можете получить доступ к переменным через модули - я нашел варианты для этого с Lua и Perl.

писал об этом в блоге моей компании:

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

ТЛ; 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

Смежные вопросы