Преобразователь nginx - DNS

Прошу прощения за вопрос очень новичка.

У меня проблемы с пониманием параметра 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-адрес?

Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
14
0
26 050
3

Ответы 3

Разрешить означает, к какому 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; 
}

Примечание: если хост-часть proxy_pass определена статически (то есть хост не нужно искать в переменной), как в примере proxy_pass http://machineabc/abc/def, то хост будет разрешен однажды, и это время будет во время запуска / перезагрузки NGNIX. . См. Ответы на "Как заставить nginx разрешать DNS (динамического имени хоста) каждый раз при выполнении proxy_pass?" о сбое сервера для получения более подробной информации.

Anon 08.08.2019 04:50

Параметр «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) вызывают неожиданное поведение в более сложных случаях.

temoto 04.11.2020 13:31

Другие вопросы по теме