При использовании 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.