web-dev-qa-db-fra.com

résolveur nginx - dns

Veuillez excuser une question très débutante.

J'ai du mal à comprendre le paramètre "resolver" de nginx et comment il fonctionne. J'ai lu la documentation, recherché des didacticiels et des publications (en utilisant des mots clés comme résolveur, nginx et dns), et je ne sais toujours pas comment appliquer le résolveur.

http://nginx.org/en/docs/http/ngx_http_core_module.html#resolver

"Configure les serveurs de noms utilisés pour résoudre les noms des serveurs en amont en adresses ...."

  • Selon cette définition, il semble simplement faire le travail du serveur de noms. resolver ns1.myhost.com ns2.myhost.com; Mais les exemples pointent vers une adresse IP interne/privée.

"Une adresse peut être spécifiée comme nom de domaine ou adresse IP, et un port optionnel ...."

  • Cela implique que je pourrais resolver example.com www.example.com; (ou resolver 12.34.56.78;) mais encore une fois, je ne vois pas de tels exemples dans la documentation.

À titre d'exemple pratique, disons - purement hypothétique :) - que je construis un simple serveur Web avec quelques blocs serveur dessus.

Dois-je définir "résolveur" sur l'IP du serveur lui-même? Ou une adresse IP interne dans le LAN du serveur? La documentation semble suggérer une IP interne (127.x.x.x ou 10.x.x.x) - mais comment définir/déterminer ce qu'est cette IP?

7
Geekomancer

Résoudre signifie à quel serveur DNS doit se référer nginx lorsqu'il doit résoudre une URL externe. Si vous avez une configuration comme ci-dessous

location / {
    proxy_pass http://www.example.com/abc/def; 
}

Désormais, par défaut, nginx choisira votre résolveur dans l'hôte /etc/resolv.conf et ce n'est peut-être pas ce dont vous avez besoin. Vous souhaitez peut-être utiliser le résolveur DNS de Google pour ce cas uniquement. Ensuite, vous mettrez à jour votre configuration nginx ci-dessous

location / {
    resolver 8.8.8.8;
    proxy_pass http://www.example.com/abc/def; 
}

Peut-être que vous utilisez un résolveur DNS local pour acheminer votre réseau local, vous pouvez utiliser quelque chose comme ci-dessous

location / {
    resolver 192.168.11.10;
    proxy_pass http://machineabc/abc/def; 
}
6
Tarun Lalwani

Le paramètre "Resolver" définit l'emplacement du serveur DNS que nginx doit utiliser pour résoudre l'IP de l'URL passée sous proxy_pass;

Comme expliqué par Tarun, par défaut, nginx choisira votre résolveur dans l'hôte /etc/resolv.conf et une fois résolu, il mettra en cache l'IP. Le résolveur est principalement utilisé dans deux cas:
1. Soit dans un réseau privé, pour résoudre les IP qui existent dans votre réseau.
2. Ou utilisé à un endroit où l'IP de votre proxy_pass ou emplacement en amont change très fréquemment et vous ne pouvez pas compter sur l'IP mise en cache nginx.

Dans l'exemple que vous avez spécifié, le résolveur sera l'IP du serveur DNS qui pourrait résoudre votre emplacement. Cela pourrait être:

1) 127.0.0.1: Si le serveur Web lui-même est un serveur DNS, pour cela, vous devez configurer le serveur DNS sur le port 53 (par défaut) de ce serveur.

2) x.x.x.x: l'adresse IP du serveur DNS hébergé dans, soit sur votre réseau privé, soit sur tout serveur DNS public si vos URL sont accessibles au public. On peut utiliser 8.8.8.8 (serveur DNS public de Google).

3) Vous avez spécifié 10.x.x.x: en supposant que vous faisiez référence à la documentation AWS. Sinon, en général, 10.x.x.x doit à nouveau être une adresse IP de serveur DNS, qui dans le cas d'AWS est 10.0.0.2. AWS réserve quelques IP de ses VPC et le deuxième IP x.x.x.2 est réservé au serveur DNS. Notez que si votre VPC n'est pas 10.0.0.0/16, cette IP changera en conséquence. Par exemple: Supposons que votre VPC soit 10.192.0.0/16, alors vous utiliserez 10.192.0.2 comme résolveur.

Pour la référence ci-dessus https://docs.aws.Amazon.com/AmazonVPC/latest/UserGuide/VPC_Subnets.html

https://www.jethrocarr.com/2013/11/02/nginx-reverse-proxies-and-dns-resolution/

1