При использовании proxy_pass можно использовать /etc/hosts для разрешения имен доменов вместо "resolver"?
Можно использовать /etc/hosts вместо resolver при использовании proxy_pass?
Мне нужно выполнить proxy_pass на той же машине nginx. Есть ли способ разрешить домены, используя файл machine/etc/hosts, вместо указания DNS-сервера через свойство "resolver"?
Это избавит меня от дополнительных прыжков, необходимых для достижения одного и того же сервера. Я попытался настроить внутренний IP, сопоставленный с DNS в файле /etc/hosts, но nginx все еще читает с DNS-сервера, установленного в свойстве resolver. Или есть способ заставить модуль HTTPProxy учитывать параметры файла /etc/hosts?
Спасибо за любые советы, которые вы могли бы поделиться.
Это тот же вопрос, который я разместил на форуме nginx:
http://forum.nginx.org/read.php?11,218997
Ответы
Ответ 1
Вы можете обойти это, установив dnsmasq
и установив свой преобразователь на 127.0.0.1
. В основном это использует ваш локальный DNS в качестве преобразователя, но он только решает, что он знает (в том числе и ваш /etc/hosts
), и перенаправляет остальное на ваш DNS по умолчанию.
Ответ 2
Обходной путь заключается в использовании карты Nginx, чтобы скопировать содержимое /etc/hosts
.
map $wanted_host $wanted_host_ip
{
default 127.0.0.1;
b.dev.local X.X.X.X;
a.dev.local X.X.X.X;
}
server
{
listen 80;
server_name ~^(?P<wanted_port>[0-9]+?)-(?P<wanted_host>.+?)\.HOSTNAME$;
location /
{
proxy_pass http://$wanted_host_ip:$wanted_port;
}
}
Это отобразит wanted_host
в wanted_host_ip
, как распознаватель.