Что делает параметр Resolver в nginx?

Я использую nginx как сервер reverse_proxy с ELB. Я ищу объяснения относительно значения резолвера, которое я установил в файле nginx.conf. Мой nginx.conf:

http {  
   ...

   resolver x.x.x.x valid=30s;

   ...
}

server {

   ...

   set $elb "example.com";

location / { 
    ...

    rewrite ^/(.*) $1 break;
    proxy_pass http://$elb/$1?$args; 

    ...
   }
   ...    
}  

Я следил за этим - https://www.ruby-forum.com/topic/6816375#1166569 и установите значение /etc/resolv.conf в качестве значения преобразователя, и он отлично работает. Что за этим стоит?


person guyyug    schedule 30.10.2016    source источник


Ответы (2)


Директива преобразователя nginx требуется, поскольку системный преобразователь блокирует. Nginx - это мультиплексирующий сервер (много подключений в одном процессе ОС), поэтому каждый вызов системного преобразователя будет прекращать обработку всех подключений до тех пор, пока не будет получен ответ преобразователя. Вот почему Nginx реализовал собственный внутренний неблокирующий преобразователь.

Если ваш файл конфигурации имеет статические DNS-имена (не сгенерированные), и вы не заботитесь об отслеживании изменений IP без перезагрузки nginx, вам не нужен преобразователь nginx. В этом случае все DNS-имена будут разрешены при запуске.

Если вы хотите разрешить имя домена во время выполнения без перезагрузки nginx, следует использовать resolver от Nginx.

person Dmitry MiksIr    schedule 30.10.2016
comment
Спасибо @Terra, я использую динамическое DNS-имя (ELB), поэтому мне нужно отслеживать изменения IP. Является ли использование значения сервера имен /etc/resolv.conf правильным решением? - person guyyug; 30.10.2016
comment
Да, вы можете использовать любые DNS-серверы, включая перечисленные в resolve.conf - person Dmitry MiksIr; 31.10.2016
comment
Ну, ни в коем случае, не используйте публичный DNS. Есть некоторые проблемы с безопасностью банкомата. Лучше использовать локальный DNS-преобразователь. - person Dmitry MiksIr; 31.10.2016

Директива преобразователя Nginx критически важна для любой среды AWS, использующей ELB и proxy_pass. Вот сообщение, которое я недавно написал, описывая проблему и решения статического кеширования DNS с помощью открытого исходного кода nginx:

Объяснение преобразователя Nginx и способы работы с изменением IP-адресов

В основном это будет сводиться к следующей конфигурации для простого случая:

server {
  listen        80;
  server_name   example.com;

  location / {

    resolver 172.16.0.23;

    set $upstream_endpoint http://service-999999.eu-west-2.elb.amazonaws.com;

    proxy_pass $upstream_endpoint$request_uri;
  }
}
person gansbrest    schedule 19.04.2017
comment
Веб-страница, на которую вы указали ссылку, раздражающе перенаправляет на страницу с рекламой с изображениями Матрицы. - person void.pointer; 03.11.2018
comment
Это всплывающее окно JS на той же странице. В правом верхнем углу текстового поля есть кнопка закрытия. - person NReilingh; 19.07.2019
comment
Удобство использования этой ссылки настолько низкое, что ухудшает качество ответа. Я предлагаю удалить ссылку или заменить ее на что-нибудь читабельное. - person John Snow; 05.09.2019
comment
будет ли какое-либо влияние на производительность при использовании директивы резолвера? Как и сейчас, каждый раз по истечении допустимого времени будет выполняться поиск DNS. - person Atishay Baid; 11.11.2020
comment
Ответ на (раздражающую) опубликованную ссылку, похоже, в основном скопирован с jethrocarr.com/2013/11/02/ (без всплывающих окон) - person George Y.; 04.05.2021