2016-10-30 7 views
2

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

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 значение в качестве значения распознавателя и она отлично работает. Что стоит за этим?

ответ

3

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

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

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

+0

Спасибо @ Терра, я использую динамическое имя DNS (ELB), поэтому мне нужно отслеживать изменения IP-адресов. Использует ли значение имя сервера /etc/resolv.conf правильное решение? – guyyug

+0

Да, вы можете использовать любые DNS-серверы, включая перечисленные в файле resolve.conf –

+0

Ну, а не «все», не используйте общедоступный DNS. Возникают некоторые проблемы с безопасностью. Лучше использовать локальный DNS-преобразователь. –

2

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

Nginx resolver explained and how to deal with changing IPs

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

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; 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^