Ответ 1
Если значение proxy_pass
не содержит переменных, nginx будет разрешать имена доменов для IP-адресов при загрузке конфигурации и кешировать их до перезагрузки/перезагрузки. Это вполне понятно с точки зрения производительности.
Но в случае изменения динамической записи DNS это может быть нежелательно. Таким образом, два варианта доступны в зависимости от лицензии, которой вы владеете или нет.
Коммерческая версия (Nginx +)
В этом случае используйте восходящий блок и укажите, какое доменное имя необходимо разрешить периодически, используя определенный преобразователь. Записи TTL можно переопределить с помощью параметра valid=time
. Параметр resolve
директивы server
заставит DN периодически разрешать.
http {
resolver X.X.X.X valid=5s;
upstream dynamic {
server foo.dnsalias.net resolve;
}
server {
server_name www.example.com;
location / {
proxy_pass http://dynamic;
...
}
}
}
Эта функция была добавлена в Nginx + 1.5.12.
Версия сообщества (Nginx)
В этом случае вам также понадобится настраиваемый преобразователь, как в предыдущем решении. Но для решения проблемы недоступного восходящего решения вам необходимо использовать переменную в вашей директиве proxy_pass
. Таким образом, nginx также будет использовать резольвер, соблюдая время кэширования, указанное параметром valid
. Например, имя домена можно использовать как переменную:
http {
resolver X.X.X.X valid=5s;
server {
server_name www.example.com;
set $dn "foo.dnsalias.net";
location / {
proxy_pass http://$dn;
...
}
}
}
Затем вам, вероятно, потребуется добавить директиву proxy_redirect
для обработки перенаправления.