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