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.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *