Категорії
Misc, staff, other WWW

[nginx] proxy_pass DNS name

При использовании proxy_pass, особенно если в качестве upstream’ов используется DNS name есть один нюанс, который хоть и описан в документации, но требует пояснения. Ниже цитата из рассылки nginx:

Ошибка “no resolver defined” как бы говорит нам, что у вас 
конфигурация требует динамического резолвинга адресов (то есть имя 
используется вместе с переменными в proxy_pass). При динамичеком 
резолвинге невозможно использовать системный резолвер, и 
соответственно не используется файл /etc/hosts. Вместо этого надо 
либо использовать IP-адреса непосредственно в конфиге nginx’а, 
либо поднять DNS-сервер и указать его с помощью директивы 
resolver.

Цитата из документации (http://nginx.org/r/proxy_pass/ru):

: В значении параметра можно использовать переменные. В этом случае, если адрес
: указан в виде доменного имени, имя ищется среди описанных групп серверов и если
: не найдено, то определяется с помощью resolver’а.

По умолчанию resolver не определён, и при динамическом резолвинге 
будут работать только IP-адреса, имена upstream’ов и имена, 
используемые в других частях конфига статически (так как для них 
создаются неявные upstream’ы).

Если кратко резюмировать, то

  • в DNS именах upstrem’ов нельзя использовать значения, прописанные в файле hosts (nginx просто не смотрит в этот файл)
  • при использовании DNS имён в upstrem’aх обязательно прописывайте опцию resolver
  • если нужно подменять DNS имя, то единственный способ добавление соответствующей записи в DNS.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Домашняя страничка Andy
Записки молодого админа
Самостоятельная подготовка к Cisco CCNA
Самостоятельная подготовка к Cisco CCNP
Powered by Muff