Прошу прощения за вопрос очень новичка.
У меня проблемы с пониманием параметра nginx 'resolver' и того, как он работает. Я прочитал документацию, выполнил поиск руководств и сообщений (используя такие ключевые слова, как resolver, nginx и dns), и я все еще не уверен, как применить преобразователь.
http://nginx.org/en/docs/http/ngx_http_core_module.html#resolver
«Настраивает серверы имен, используемые для преобразования имен вышестоящих серверов в адреса ....»
resolver ns1.myhost.com ns2.myhost.com; Но примеры указывают на
внутренний / частный IP-адрес.«Адрес может быть указан как доменное имя или IP-адрес, а также необязательный порт ....»
resolver example.com
www.example.com; (или resolver 12.34.56.78;), но, опять же, я не вижу таких примеров в документации.В качестве практического примера скажем - чисто гипотетически :) - что я создаю простой веб-сервер с парой серверных блоков на нем.
Могу ли я установить «резольвер» на IP-адрес самого сервера? Или внутренний IP в локальной сети сервера? В документации, кажется, предлагается внутренний IP-адрес (127.x.x.x или 10.x.x.x), но как установить / определить, что это за IP-адрес?

Разрешить означает, к какому DNS-серверу должен обращаться nginx, когда ему нужно разрешить внешний URL-адрес. Если у вас есть конфигурация, как показано ниже
location / {
proxy_pass http://www.example.com/abc/def;
}
Теперь по умолчанию nginx выберет ваш преобразователь с хоста /etc/resolv.conf, и это может быть не то, что вам нужно. Возможно, вы захотите использовать DNS-преобразователь Google для этого случая. Затем вы обновите свою конфигурацию nginx до ниже
location / {
resolver 8.8.8.8;
proxy_pass http://www.example.com/abc/def;
}
Возможно, вы используете локальный DNS-преобразователь для маршрутизации в вашей локальной сети, тогда вы можете использовать что-то вроде ниже
location / {
resolver 192.168.11.10;
proxy_pass http://machineabc/abc/def;
}
Параметр «Resolver» определяет расположение DNS-сервера, который nginx должен использовать для разрешения IP-адреса URL-адреса, переданного в proxy_pass;
Как объяснил Тарун, по умолчанию nginx выбирает ваш преобразователь с хоста /etc/resolv.conf и после разрешения кеширует IP. Резолвер в основном используется в двух случаях:
1. Либо в частной сети, чтобы разрешить IP-адреса, существующие в вашей сети.
2. Или используется там, где IP-адрес вашего proxy_pass или вышестоящего местоположения очень часто меняется, и вы не можете полагаться на кэшированный IP-адрес nginx.
В указанном вами примере преобразователем будет IP-адрес DNS-сервера, который может определить ваше местоположение. Это может быть одно из:
1) 127.0.0.1: если сам веб-сервер является DNS-сервером, для этого вам необходимо настроить DNS-сервер на 53-й порт (по умолчанию) этого сервера.
2) x.x.x.x: IP-адрес DNS-сервера, размещенного в вашей частной сети или на любом общедоступном DNS-сервере, если ваши URL-адреса общедоступны. Можно использовать 8.8.8.8 (публичный DNS-сервер Google).
3) Вы указали 10.x.x.x: при условии, что вы ссылались на документацию AWS. Если нет, как правило, 10.x.x.x снова должен быть IP-адресом DNS-сервера, который в случае AWS - 10.0.0.2. AWS резервирует несколько IP-адресов своего VPC, а второй IP-адрес x.x.x.2 зарезервирован для DNS-сервера. Обратите внимание, что если ваш VPC не 10.0.0.0/16, этот IP-адрес изменится соответствующим образом. Например: Допустим, ваш VPC - 10.192.0.0/16, тогда вы будете использовать 10.192.0.2 в качестве преобразователя.
Для ссылки выше на https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Subnets.html
https://www.jethrocarr.com/2013/11/02/nginx-reverse-proxies-and-dns-resolution/
Есть другой способ сделать это, если вы хотите установить разрешение вручную, без использования внешних инструментов, таких как bind9 или dnsmasq.
location / {
set $upstream 12.34.56.78; # desired IP resolution
proxy_pass http://$upstream:8080; # desired port
proxy_set_header Host example.com; # desired host
}
Это не имеет отношения к заданному вопросу, и лучше сделать это с помощью upstream backend { server 12.34.56.78; }, поскольку известно, что директивы модуля перезаписи (set) вызывают неожиданное поведение в более сложных случаях.
Примечание: если хост-часть
proxy_passопределена статически (то есть хост не нужно искать в переменной), как в примереproxy_pass http://machineabc/abc/def, то хост будет разрешен однажды, и это время будет во время запуска / перезагрузки NGNIX. . См. Ответы на "Как заставить nginx разрешать DNS (динамического имени хоста) каждый раз при выполнении proxy_pass?" о сбое сервера для получения более подробной информации.