Назад | Перейти на главную страницу

Как nginx распределяет трафик между IP-адресами, связанными с восходящим DNS-именем?

В этой конфигурации:

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.