Comment puis-je éliminer la résolution / le chargement lent de localhost / virtualhost (un décalage de 2-3 secondes) sur Mac OS X Lion?

97

Depuis la configuration de mes environnements de développement sur Mac OS X Lion (tout nouveau macbook air acheté en janvier 2012), j'ai remarqué que la résolution vers un hôte virtuel est très lente (environ 3 secondes) la première fois, mais après cela est rapide tant que Je continue à le charger régulièrement.

Si je le laisse intact pendant quelques minutes et que je le recharge à nouveau, le premier rechargement est (encore) extrêmement lent; semble que quelque chose est mis en cache.

Comme on peut le voir ci-dessous, je n'utilise pas le TLD .local.

Ma configuration: Apache 2 - MySQL - PHP installé et activé - a ajouté quelques hôtes virtuels dont l'un j'ai créé pour localhost

Mon / etc / hosts:

127.0.0.1       localhost
255.255.255.255 broadcasthost
::1             localhost
fe80::1%lo0     localhost
127.0.0.1       myproject.dev
::1             myproject.dev
fe80::1%lo0     myproject.dev

Ma configuration d'hôte virtuel dans username.conf:

NameVirtualHost *:80

<Directory "/Users/myusername/Sites/">
    Options Indexes MultiViews
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

<VirtualHost *:80>
    ServerName localhost
    DocumentRoot /Users/myusername/Dropbox/dev_envs/
</VirtualHost>
<VirtualHost *:80>
    ServerName myproject.dev
    DocumentRoot /Users/myusername/Dropbox/dev_envs/myprojectname
</VirtualHost>
Adam Gries
la source
J'ai trouvé ce stackoverflow.com/questions/19313546/… . Et ça fonctionne pour moi!!!
clark yu
2
J'ai signalé cela comme un bogue à apple rdar: // 24237290 et j'ai obtenu cette réponse hilarante:> L'ingénierie a fourni les commentaires suivants concernant ce problème:> Il s'agit d'un comportement attendu depuis le max. Le nombre d'alias autorisés dans le fichier / etc / hosts est de 10. Avoir plus de 10 alias dans le fichier / etc / hosts ne semble pas pratique. Je serais heureux que plus de gens signalent ce bogue et leur disent que cette réponse est complètement ridicule (et n'est documentée nulle part aussi).
dwt
Y a-t-il quelque chose de mauvais à utiliser le .local TLD?
Yaakov Ainspan
Fonctionne bien pour moi dans mojave ... :)
rogerdpack

Réponses:

169

J'avais exactement le même problème et ça me rendait fou!

Mettez toutes vos entrées de fichier hosts pour localhost sur une seule ligne comme ceci:

127.0.0.1 localhost myproject.dev myotherproject.dev
::1 localhost
fe80::1%lo0 localhost

A fonctionné à merveille pour moi. On dirait un bug dans Lion.

Jeremy Dunn
la source
Cela fonctionne et je pense que @ adam-gries devrait le marquer comme réponse. Merci Jeremy!
zysoft
5
Ce correctif a fonctionné pour moi mais j'ai atteint une limite de 11 sites, après quoi il a commencé à fonctionner encore plus lentement! Pour l'instant, j'ai divisé les choses en deux entrées d'hôtes (avec la même adresse IP) et cela semble bien se passer.
Alex Ghiculescu
Même problème et solution que @AlexGhiculescu, mais sous OS X 10.8 Mountain Lion.
chrishiestand
2
OS X 10.9, toujours un problème et ça me rend fou depuis des heures maintenant! Génial, merci pour la bonne réponse!
robertp
2
Cela fonctionne uniquement parce que vous entrez les entrées d'hôte AVANT le routage de l'autre périphérique localhost. Si votre serveur Web recherche 127.0.0.1, ces hôtes doivent être à la tête du fichier / etc / hosts pour des recherches rapides. J'ai plusieurs dizaines de lignes 127.0.0.1, ce n'est que lorsque je les ai déplacées vers le haut du fichier / etc / hosts qu'elles ont été résolues rapidement pour moi.
Joey T
70

Il y a un autre problème 10.7. * À 10.8.4 pour les sites se terminant par ".local" qui provoque des recherches de cinq secondes. Détails et solution fournis par Bram (us) Van Damme au lien suivant:

http://www.bram.us/2011/12/12/mamp-pro-slow-name-resolving-with-local-vhosts-in-lion-fix/

"Par défaut, tout nom d'hôte se terminant par .local est traité comme un hôte Bonjour plutôt qu'en interrogeant les entrées du serveur DNS dans les préférences Réseau.

Pour résoudre ce problème (sans avoir à renommer chaque hôte virtuel), vous devez ajouter des entrées IPv6 pour chacun de vos hôtes virtuels dans votre fichier / etc / hosts: "

::1 mysite.local
fe80::1%lo0 mysite.local
127.0.0.1 mysite.local
Cleverlemming
la source
Cela affecte également les systèmes Windows. La solution fonctionne comme un charme là aussi.
ToBe
J'ai continué à avoir ce problème en pointant les hôtes vers une machine virtuelle locale. J'ai laissé mon fichier d'hôtes bien formaté (entrées sur leurs propres lignes, etc.) et ajouté des entrées supplémentaires, en utilisant l'adresse IPV6 de la VM, et tous mes problèmes de retard ont disparu. Je n'ai semblé rencontrer cela qu'avec les sites se terminant par .local, et l'ajout des deux entrées IPV4 / 6 a tout résolu pour moi (OS X 10.9)
Justin le
J'ai dû me battre un peu avec cela parce que mon nom d'hôte dans le volet de préférences "Partage" ne correspondait pas à celui que je saisissais dans / etc / hosts, juste au cas où cela aiderait quelqu'un ...
abhishekmukherg
Sensationnel. Je comprends que ::1c'est l'équivalent du raccourci IPv6 de 127.0.0.1. Mais qu'est-ce que ça fe80::1%lo0veut dire? - ah, répondu à superuser.com/questions/241642/…
AlexChaffee
sur macOS Sierra, cela a fonctionné mais j'ai dû supprimer la première ligne.
Bryce York
24

J'ai eu le même problème, également sur Lion.

Étrangement, ma solution était à l'opposé de celle de Jeremy. J'avais tout un tas d'entrées someproject.dev sur une seule ligne dans / etc / hosts. Le chargement d'un site sur l'un d'entre eux la première fois a pris une éternité, comme une minute ou deux. Si je l'utilisais à nouveau dans les 5 secondes environ, c'était très rapide, mais beaucoup plus long et cela prendrait à nouveau une minute. J'avais suspecté toutes sortes de choses, connexions mysql, versions Ruby, bugs Rails, Apache, Phusion Passenger. Jusqu'à ce que je regarde enfin la console et que je réalise que des recherches DNS étaient en cours.

Alors, je les mets tous sur des lignes séparées:

127.0.0.1 localhost

127.0.0.1 myproject.dev

127.0.0.1 myotherproject.dev

Et tout à coup, tout redevint vif. Idem sur mes deux machines.

Flemming Funch
la source
J'ai tout essayé ici dans stackoverflow, mais cela et le message de user902664 ont aidé. Toutes les lignes IPv4 et IPv6 doivent être sur une seule ligne. Si vous utilisez des entrées IPv4 uniquement mais sur des lignes séparées, réduit de 30 secondes à ~ 1, l'utilisation avec les paramètres IPv6 sur des lignes séparées a diminué à ~ 0,5 seconde.
tomis
Cela semble être un bug fou. J'avais une entrée pour une adresse, 192.168.56.3 avec 14 alias. Supprimez un alias et vous pouvez résoudre les hôtes en <1s. Avec le 14e alias, il faut ~ 30 s pour résoudre les premières entrées de la liste ...
Brian M. Carr
Est-ce un bug exclusif à OSX? Quelqu'un peut-il créer un lien vers un rapport de bogue?
pje
Je viens de passer des heures à en apprendre plus sur la configuration du réseau que je ne l'aurais jamais voulu. J'étais sur le point de franchir le pas et de configurer un serveur DNS local, puis cela a résolu le problème. Je vous remercie. Mavericks 10.9.5 ici.
clumsyfingers
13

Spécifier le même hôte pour IPv6 :: 1 m'a aidé.

127.0.0.1 something.local.mydomain.org
::1 something.local.mydomain.org
Aram
la source
Oui, et un domaine par ligne.
warvariuc
1
Cela a résolu le problème pour moi. Dans mon cas au moins, il n'y avait pas besoin d'un seul domaine par ligne.
jeff-h
9

Assurez-vous de mettre les entrées IP v6 pas dans la ligne avec localhost

::1 localhost

les entrées IP v6 vont dans une ligne séparée

fe80::1%lo0 here and_here

C'est parfois très rapide maintenant, mais il y a de rares exceptions où les anciens retards reviennent. Ils pourraient cependant être fondés sur d'autres raisons.

utilisateur902664
la source
1
Cela a fonctionné pour moi sur OS X 10.11.6 - dès que j'ai dupliqué l'entrée IPv4 localhost (une seule ligne pour 127.0.0.1) sur une ligne :: 1 avec les mêmes alias, les recherches sont passées de 4 à 5 secondes à l'instant. J'ai également eu une entrée 127.0.0.2 que j'ai dupliquée comme :: 2. J'ai une seule ligne par adresse. Merci!
RichVel
7

Sur OSX El Capitan, ce qui a fonctionné pour moi était de créer une entrée IPv6 en double juste au-dessus de l'entrée IPv4 comme ceci

fe80::1%lo0 demo.test.dev
127.0.0.1   demo.test.dev
concept47
la source
D'accord, fonctionne avec l'entrée IPv6 au-dessus ou en dessous d'IPv4 tant qu'il a la même liste d'alias.
RichVel
C'est absurde, mais a corrigé le problème que j'ai eu avec Chrome étant vraiment lent à résoudre les liens localhost vers mes conteneurs de docker laradock (Safari a toujours été bien)
jeff-h
Fonctionne également pour High Sierra - Firefox, Safari fonctionnent avec ou sans lui
Chris Athanasiadis
3

S'assurer que les noms d'hôte sont définis au début du fichier a fait la différence pour moi. Par défaut, la ligne 127.0.0.1 localhost est déjà au début, ajoutez simplement vos entrées sur la même ligne.

Erik
la source
C'est la vraie solution, j'ai essayé tout le reste et cela n'a rien à voir avec des références sur une seule ligne ou liées à la route IPv6 (à moins que ce soit peut-être votre route principale dans apache conf ...) merci @Erik!
Joey T
De plus, c'était beaucoup plus de 2 ou 3 secondes pour moi, plus de 10 à 20 secondes. J'ai eu beaucoup d'entrées 127.0.0.1 mais toutes répertoriées APRÈS la configuration par défaut de l'hôte local par OS X. Je suis également sur Lion, pas ML, si cela compte.
Joey T
Malheureusement, cela ne fonctionne plus avec Mavericks - laissant mon vote positif ici pour Lion, bien que cela ait fonctionné bien jusqu'à ce que je passe à Mavs il y a quelques mois.
Joey T
1

J'ai eu le même problème et j'ai trouvé qu'il était causé par l'activation d'IPv6 sur mon LAN, mais par le fait que l'IPv6 n'était pas configuré correctement entre mon réseau et mon FAI. Apparemment, le serveur DNS IPv6 a la priorité sur le DNS IPv4 lorsque le client reçoit les deux. Il a fallu quelques secondes (à chaque tentative) au client pour trouver que le DNS IPv6 était inaccessible ou manquant, puis il est revenu au DNS IPv4.

Finn Espen Gundersen
la source
1

Remarque: j'utilise Windows et XAMPP, mais lors de la recherche du problème, de nombreuses personnes ont eu le même problème sous Windows et Mac. Réponse pour référence pour quiconque trouve cette question car j'ai passé des heures à essayer de trouver une solution qui fonctionne pour moi:

J'ai essayé de nombreuses solutions pour le même problème, y compris la mise de tous les hôtes sur une seule ligne, la suppression des hôtes redondants et des hôtes virtuels, et également l'inclusion des lignes IPv6 - aucune de ces seules n'a réussi.

La seule solution qui a jusqu'à présent semblé fonctionner pour moi est une combinaison de toutes les solutions:

  • Changer le domaine que j'utilise depuis mysite. local sur mon site. dev . Inspiré de la réponse de @ Cleverlemming.
  • Y compris les lignes IPv6.
  • Suppression des hôtes virtuels et des hôtes redondants (je les ai commentés).

Dans mon fichier d'hôtes, mes hôtes sont actuellement sur des lignes séparées et jusqu'à présent, le problème semble être résolu.

Bonne chance à tous ceux qui tentent de résoudre ce problème et si quelqu'un a des informations à ajouter, veuillez le faire - cela semble être un problème qui affecte beaucoup de gens sans cause ni solution connue.

Robert Deniszczyc
la source
1

J'ai eu ce même problème et j'ai finalement réalisé que j'avais la même entrée d'hôte deux fois sur la même ligne:

par exemple

127.0.0.1 localhost host1 host2 host3 host4 host5 host1 host6

J'ai supprimé la deuxième instance du même hôte (dans l'exemple ci-dessus - host1) - et les choses se sont immédiatement accélérées.

Je me suis senti un peu ridicule quand j'ai découvert cela, mais lorsque vous avez 10 longs noms d'hôtes sur la même ligne et que vous ajoutez / supprimez fréquemment, cela peut être négligé.

Aaron
la source
0

Le truc qui l'a fait pour moi a été d'ajouter

127.0.0.1 locahost

sur la première ligne du fichier hôte.

De tous mes hôtes virtuels, seuls ceux utilisant une base de données étaient lents. Je crois que c'est parce que le processus de recherche de "localhost" pour la connexion à la base de données a ralenti les choses, puisque je n'ai ajouté que les adresses de mes hôtes virtuels et non "localhost" également. Maintenant, tout est à nouveau vif. :)

D. Marti
la source
J'avais deux définitions de localhost là-dedans; on semble mieux.
Aaron Brick
0

J'en ai rencontré un tas aussi. J'ai un tas de vhosts définis sur deux lignes, une pour IPv4 et une pour IPv6. Le déplacement de l'hôte que j'essayais de résoudre pour être le premier de la liste a accéléré le processus.

127.0.0.1 faster.example.dev host1.example.dev host2.example.dev host3.example.dev host4.example.dev host5.example.dev host6.example.dev
::1 faster.example.dev host1.example.dev host2.example.dev host3.example.dev host4.example.dev host5.example.dev host6.example.dev
Alex Dunae
la source
0

Un problème stupide qui m'a conduit à perdre un temps considérable: après avoir appliqué la réponse de @ Cleverlemming , j'ai compris qu'il y avait des entrées dupliquées sur le fichier hosts. Quelque chose comme:

::1          site1.local site2.local site1.local site3.local site4.local
fe80::1%lo0  site1.local site2.local site1.local site3.local site4.local
127.0.0.1    site1.local site2.local site1.local site3.local site4.local

Ensuite, la résolution IP pour site3.local et site4.local prend ces 5 secondes de mort.

nnimis
la source