MyTetra Share
Делитесь знаниями!
Динамический резолв имён в proxy_pass в Nginx
19.09.2018
13:07
Автор: br0ke
Текстовые метки: nginx, web, http, https, proxy, proxy_pass, resolver, dynamic, dynamically, resolve, resolver, dns, variable
Раздел: Информационные технологии - Linux - nginx

По умолчанию Nginx разрешает имена из конфигов единожды в момент запуска. Это подходит для имён, которые не изменяются месяцами/годами, но если вдруг имя стало разрешаться в другой адрес, то потребуется перезапуск Nginx.


Но если имя сохранить в переменную и потом использовать эту переменную в конфиге, то резолв будет происходить каждый раз при выполнении команды, т.к. Nginx иначе обрабатывает переменные.


Для того, чтобы это работало необходимо в конфиге указать директиву resolver.


Пример:


server {

...

resolver 127.0.0.1;

set $backend "http://dynamic.example.com:80";

proxy_pass $backend;

...

}


В таком случае Nginx запомнит IP-адрес на TTL секунд (возьмёт из ответа DNS-сервера, обычно это примерно сутки). Можно принудительно уменьшить этот интервал:


resolver 127.0.0.1 [::1]:5353 valid=30s;


Можно отключить резолв имен в IPv6-адреса:


resolver 169.254.169.250 valid=5s ipv6=off;



 
MyTetra Share v.0.52
Яндекс индекс цитирования