5 votes

Long délai pour contacter le service sur localhost en utilisant l'entrée /etc/hosts

J'ai un serveur web qui tourne sur ma machine locale et lorsque j'effectue une requête cURL sur ce serveur à l'aide de la commande localhost adresse il s'exécute très rapidement. Cependant, lorsque j'ajoute un /etc/hosts comme

127.0.0.1 test.local

et ensuite effectuer la même requête cURL :

curl -I http://test.local:3002/images/logo.png

il y a un retard de 2-3 secondes. En changeant la requête cURL en localhost ne produit à nouveau aucun retard.

Ceci est reproductible à chaque fois.

J'ai essayé d'exécuter la requête lente sous dtruss pour voir si je peux trouver un appel système qui cause le retard. Rien d'inhabituel n'apparaît.

J'ai essayé de créer un service factice par l'intermédiaire de netcat qui renvoie juste HTTP/1.0 200 OK Je peux donc garantir que le problème n'est pas vraiment dû à mon serveur web. Encore une fois, aucune différence : localhost est rapide, comme on peut s'y attendre, et test.local délais.

A ce stade, je pense qu'il y a un problème de DNS. C'est-à-dire, /etc/hosts n'est PAS consulté en premier, c'est-à-dire que mon DNS amont est vérifié, ce qui échoue, puis /etc/hosts est consulté, ce qui fonctionne enfin.

Est-ce possible ? Est-ce que OS X Lion en consultant en quelque sorte mon /etc/hosts plus tard dans la chaîne des résolveurs ?

6voto

Jose Luis Points 11

Ok, j'ai compris. J'ai trouvé ce commentaire sur un post de blog :

Le problème est que Lion traite le TLD .local différemment parce qu'il est réservé à certaines fonctionnalités de Multicast DNS (utilisées par Bonjour). Le seul moyen moyen que j'ai trouvé pour résoudre ce problème est d'utiliser un TLD différent pour les pour les hôtes de développement (par exemple : .dev). Cela fonctionne bien pour moi, j'espère que cela sera utile à d'autres !

Changement de mon domaine de développement pour terminer en .dev fonctionne bien.

tl;dr - ne pas utiliser .local pour les domaines de développement du Lion.

1voto

bubu Points 9693

OSX lion a ce bug connu. Il consulte d'abord le serveur DNS avant d'utiliser les entrées du fichier /etc/hosts. Ce comportement n'est présent que dans OSX lion et n'est pas présent dans snow leopard, ni même dans tiger.

Options possibles :

  • Installer DNSMasq
  • Attendez le patch de macosx
  • Utilisez Snow Leopard pour l'instant

Voir aussi http://www.justincarmony.com/blog/2011/07/27/mac-os-x-lion-etc-hosts-bugs-and-dns-resolution/ pour plus de détails. C'est bien couvert là-bas.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X