web-dev-qa-db-fra.com

Que fait le paramètre Resolver dans nginx?

J'utilise nginx comme serveur reverse_proxy avec ELB. Je recherche des explications concernant la valeur du résolveur que j'ai définie dans le fichier nginx.conf. Mon 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; 

    ...
   }
   ...    
}  

J'ai suivi ceci - https://www.Ruby-forum.com/topic/6816375#1166569 et défini la valeur /etc/resolv.conf comme valeur de résolution et cela fonctionne très bien. Qu'est-ce qui se cache derrière cela?

8
guyyug

La directive de résolution nginx est requise car le résolveur système se bloque. Nginx est un serveur de multiplexage (plusieurs connexions dans un processus OS), donc chaque appel du résolveur système arrêtera de traiter toutes les connexions jusqu'à ce que la réponse du résolveur soit reçue. C'est pourquoi Nginx a implémenté son propre résolveur interne non bloquant.

Si votre fichier de configuration a des noms DNS statiques (non générés) et que vous ne vous souciez pas de suivre les modifications IP sans recharger nginx, vous n'avez pas besoin du résolveur de nginx. Dans ce cas, tous les noms DNS seront résolus au démarrage.

resolver de Nginx doit être utilisé, si vous voulez résoudre le nom de domaine en runtime sans recharger nginx.

8
Dmitry MiksIr

La directive du résolveur Nginx est essentielle à tout environnement AWS qui s'appuie sur ELB et proxy_pass. Voici le post que j'ai écrit récemment décrivant le problème et les solutions à la mise en cache DNS statique par opensource nginx:

Le résolveur Nginx expliqué et comment gérer les IP changeantes

Fondamentalement, cela se résumera à la configuration suivante pour un cas simple:

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