Récemment, cet aspect est devenu nécessaire dans mon travail : l’amont est complètement dynamique, spécifié par le client, il y a quelques erreurs au début, et enfin le service DNS est spécifié via le résolveur, le processus spécifique est le suivant.
1. Commencez à marcher sur la fosse
La configuration de nginx est la suivante :
Quand j’envoie ce genre de demande :
L’erreur suivante a été signalée :
access.log: 127.0.0.1 - - [14/sept/2017:23:37:10 +0800] « GET / HTTP/1.1 » 502 179 « - » « curl/7.29.0 »
error.log: 2017/09/14 23:38:31 [erreur] 25307#25307 : *48 aucun résolveur défini pour résoudrewww.baidu.com, client : 127.0.0.1, serveur : localhost, requête : « GET / HTTP/1.1 », host : « 127.0.0.1:8001 » Il est clair que ce problème indique que ne pas spécifier un résolveur provoque des upstreamwww.baidu.com personnalisés.
2. Utiliser Resolver pour définir la résolution des noms de domaine
La configuration nginx modifiée est la suivante :
Maintenant, les demandes sont normales de 200 :
req: curl « 127.0.0.1:8001/ » -H « hôte en amont :www.baidu.com« -voa curl « 127.0.0.1:8001/ » -H « hôte en amont :www.qq.com« -voa
access.log: 127.0.0.1 - - [14/sept/2017:23:44:01 +0800] « GET / HTTP/1.1 » 200 2381 « - » « curl/7.29.0 » 127.0.0.1 - - [14/sept/2017:23:44:07 +0800] « GET / HTTP/1.1 » 200 244182 « - » « curl/7.29.0 » 3. Instructions du résolveur
La syntaxe du résolveur est la suivante :
Syntax: resolver address ... [valid=time] [ipv6=on|off];
Default: —
Context: http, server, location Vous pouvez configurer plusieurs services DNS : nginx utilisera le polling pour accéder aux services DNS, nginx mettra en cache les résultats de la résolution de noms de domaine DNS, le temps de cache est spécifié par valid, et IPv6 sert à afficher IPv6 activé ou désactivé.
resolver_timeout sert à spécifier le délai d’expiration de la résolution DNS.
|