В этой конфигурации:
upstream some_upstream {
server some-elb.us-east-1.elb.amazonaws.com:80;
}
Если some-elb.us-east-1.elb.amazonaws.com отображается на 2 IP-адреса, как nginx будет распределять запросы между ними? По-круговой? (Скажем, для версии 1.1.19, если поведение в какой-то момент изменилось.)
Также я читал Вот что nginx кэширует результаты DNS при запуске. Если вы используете переменную, она обновит их, но только если вы настроили преобразователь DNS. Итак, если я не настроил преобразователь DNS, что произойдет, если один из IP-адресов some-elb.us-east-1.elb.amazonaws.com изменится? Будет ли nginx продолжать отправлять трафик на тот же набор IP-адресов, который он нашел при запуске?
Обратите внимание, что nginx 1.1.19
это версия для разработки, которая вышла 3+ года назад. Как хороший системный администратор, ничего подобного не должно происходить в вашем бизнесе. Теперь давайте сосредоточимся на вашем актуальном вопросе.
Как поясняется в документации:
Доменное имя, которое разрешается в несколько IP-адресов, определяет сразу несколько серверов.
По умолчанию запросы распределяются между серверами с использованием метода взвешенной циклической балансировки.
Для части распознавателя: да, nginx выполнит поиск доменного имени для server
записи при запуске, затем кешируйте любой результат до его перезапуска, если вы используете статические доменные имена в своей конфигурации.
Ваша ссылка указывает на сообщение об обратном проксировании и, в частности, об обработке доменных имен в proxy_pass
директива. Это другой случай, когда вам нужно использовать переменные в значении директивы, чтобы заставить nginx обновлять свой кеш DNS: с помощью resolver
директивы для этого конкретного случая недостаточно.
Теперь вернемся к server
директива. Используя resolver
директива и добавление resolve
параметр позволит мониторинг изменений записей DNS и автоматическая перезагрузка нового списка серверов:
resolve monitors changes of the IP addresses that correspond to a domain name of the server, and automatically modifies the upstream configuration without the need of restarting nginx (1.5.12). In order for this parameter to work, the resolver directive must be specified in the http block.