Come posso eliminare la risoluzione / caricamento lento di localhost / virtualhost (un ritardo di 2-3 secondi) su Mac OS X Lion?


97

Da quando ho impostato i miei ambienti di sviluppo su Mac OS X Lion (nuovissimo macbook air acquistato a gennaio 2012), ho notato che la risoluzione su un host virtuale è molto lenta (circa 3 secondi) la prima volta, ma dopo è veloce finché Continuo a caricarlo regolarmente.

Se lo lascio intatto per un paio di minuti e poi lo ricarico di nuovo, la prima ricarica è (di nuovo) dolorosamente lenta; sembra che qualcosa sia stato memorizzato nella cache.

Come si può vedere di seguito, non sto usando il TLD .local.

La mia configurazione: Apache 2 - MySQL - PHP installato e abilitato - aggiunto un paio di host virtuali uno dei quali ho creato per localhost

Il mio / 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

Configurazione del mio host virtuale in 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>

Ho trovato questo stackoverflow.com/questions/19313546/… . e funziona per me !!!
clark yu

2
Ho segnalato questo come un bug a apple rdar: // 24237290 e ho ricevuto questa esilarante risposta:> Engineering ha fornito il seguente feedback in merito a questo problema:> Questo è un comportamento previsto dal numero massimo. di alias nel file / etc / hosts consentiti è 10. Avere più di 10 alias nel file / etc / hosts non sembra essere pratico. Sarei lieto se più persone segnalassero questo bug e dicessero loro che questa risposta è completamente ridicola (e non documentata da nessuna parte).
dwt

C'è qualcosa di brutto nell'usare il TLD .local?
Yaakov Ainspan

Funziona bene per me in mojave ... :)
rogerdpack

Risposte:


169

Ho avuto lo stesso identico problema e mi stava facendo impazzire!

Metti tutte le voci del tuo file hosts per localhost in una riga in questo modo:

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

Ha funzionato benissimo per me. Sembra un bug in Lion.


Questo funziona e penso che @ adam-gries dovrebbe contrassegnarlo come risposta. Grazie Jeremy!
zysoft

5
Questa correzione ha funzionato per me, ma ho raggiunto un limite di 11 siti, dopodiché ha iniziato a funzionare ancora più lentamente! Per ora, ho diviso le cose in due voci host (con lo stesso indirizzo IP) e sembra che stia andando bene.
Alex Ghiculescu

Stesso problema e soluzione di @AlexGhiculescu, ma in OS X 10.8 Mountain Lion.
Chrishiestand

2
OS X 10.9, ancora un problema e mi sta facendo impazzire per ore ormai! Fantastico, grazie per l'ottima risposta!
robertp

2
Funziona solo perché stai inserendo le voci dell'host PRIMA del routing dell'altro dispositivo localhost. Se il tuo server web sta guardando 127.0.0.1, quegli host devono trovarsi a HEAD del file / etc / hosts per ricerche veloci. Ho diverse dozzine di righe 127.0.0.1, solo quando le ho spostate nella parte superiore del file / etc / hosts si sono risolte velocemente per me.
Joey T

70

C'è un altro problema da 10.7. * A 10.8.4 per i siti che terminano con ".local" che causa ricerche di cinque secondi. Dettagli e soluzione per gentile concessione di Bram (us) Van Damme al seguente link:

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

"Per impostazione predefinita, qualsiasi nome host che termina con .local viene considerato come un host Bonjour anziché interrogare le voci del server DNS nelle preferenze di rete.

Per risolvere questo problema (senza dover rinominare ogni vhost) è necessario aggiungere voci IPv6 per ciascuno dei tuoi vhost nel tuo file / etc / hosts: "

::1 mysite.local
fe80::1%lo0 mysite.local
127.0.0.1 mysite.local

Ciò influisce anche sui sistemi Windows. La soluzione funziona come un fascino anche lì.
ToBe

Ho continuato ad avere questo problema mentre indicavo gli host a una VM locale. Ho lasciato il mio file hosts ben formattato (voci sulle proprie righe, ecc.) E ho aggiunto ulteriori voci, utilizzando l'indirizzo IPV6 dalla VM, e tutti i miei problemi di ritardo sono scomparsi. Mi è sembrato di imbattermi in questo solo con siti che terminano con .local, e l'aggiunta di entrambe le voci IPV4 / 6 ha risolto tutto per me (OS X 10.9)
Justin

Ho dovuto combattere per un po 'perché il mio nome host nel riquadro delle preferenze "Condivisione" non corrispondeva a quello che stavo inserendo in / etc / hosts, nel caso in cui aiutasse qualcuno ...
abhishekmukherg

Wow. Capisco che ::1sia l'equivalente del collegamento IPv6 di 127.0.0.1. Ma cosa vuol fe80::1%lo0dire? - ah, ha risposto a superuser.com/questions/241642/…
AlexChaffee

su macOS Sierra ha funzionato ma ho dovuto rimuovere la prima riga.
Bryce York

24

Ho avuto lo stesso problema, anche su Lion.

Stranamente, la mia soluzione era l'opposto di quella di Jeremy. Avevo un sacco di voci someproject.dev su una riga in / etc / hosts. Il caricamento di un sito su uno di essi la prima volta ha richiesto un'eternità, circa un minuto. Se lo usassi di nuovo entro 5 secondi o giù di lì, sarebbe stato molto veloce, ma molto più a lungo e ci sarebbe voluto ancora un minuto. Avevo sospettato ogni genere di cose, connessioni mysql, versioni di Ruby, bug di Rails, Apache, Phusion Passenger. Finché non ho finalmente guardato la console e mi sono reso conto che si stavano tentando ricerche DNS.

Quindi, li metto tutti su linee separate:

127.0.0.1 localhost

127.0.0.1 myproject.dev

127.0.0.1 myotherproject.dev

E all'improvviso tutto era di nuovo scattante. Lo stesso su entrambe le mie macchine.


Ho provato qualcosa qui in stackoverflow ma questo e il post di user902664 hanno aiutato. Tutte le linee IPv4 e IPv6 devono essere su una riga. Se si utilizzano solo voci IPv4 ma su linee separate, diminuito da 30 secondi a ~ 1, l'utilizzo insieme alle impostazioni IPv6 su linee separate è diminuito a ~ 0,5 secondi.
tomis

Questo sembra essere un bug folle. Avevo una voce per un indirizzo, 192.168.56.3 con 14 alias. Rimuovi un alias e puoi risolvere gli host in <1s. Con il 14 ° alias, ci vogliono ~ 30 secondi per risolvere le prime voci nell'elenco ...
Brian M. Carr

È un bug esclusivo di OSX? Qualcuno può collegarsi a una segnalazione di bug?
pje

Ho passato ore a imparare di più sulla configurazione di rete di quanto avessi mai voluto. Stavo per fare il grande passo e configurare un server DNS locale e poi questo lo ha risolto. Grazie. Mavericks 10.9.5 qui.
Dita goffi

13

La specifica dello stesso host per IPv6 :: 1 mi ha aiutato.

127.0.0.1 something.local.mydomain.org
::1 something.local.mydomain.org

Sì, e un dominio per riga.
warvariuc

1
Questo ha risolto il problema per me. Almeno nel mio caso, non c'era bisogno di un solo dominio per riga.
jeff-h

9

Assicurati di mettere le voci IP v6 non nella riga con localhost

::1 localhost

le voci IP v6 vanno in una riga separata

fe80::1%lo0 here and_here

A volte è molto veloce adesso, ma ci sono rare eccezioni in cui i vecchi ritardi tornano. Potrebbero tuttavia essere basati su altri motivi.


1
Questo ha funzionato per me su OS X 10.11.6: non appena ho duplicato la voce IPv4 localhost (riga singola per 127.0.0.1) su una riga :: 1 con gli stessi alias, le ricerche sono passate da 4-5 secondi a istantanee. Avevo anche una voce 127.0.0.2 che ho duplicato come :: 2. Ho una sola riga per indirizzo. Grazie!
RichVel

7

Su OSX El Capitan ciò che ha funzionato per me è stato creare una voce IPv6 duplicata proprio sopra la voce IPv4 in questo modo

fe80::1%lo0 demo.test.dev
127.0.0.1   demo.test.dev

D'accordo, funziona con la voce IPv6 sopra o sotto IPv4 purché abbia lo stesso elenco di alias.
RichVel

Questo è assurdo, ma ha risolto il problema che ho avuto con Chrome che è stato molto lento nel risolvere i collegamenti localhost ai miei contenitori docker laradock (Safari è sempre andato bene)
jeff-h

Funziona anche per High Sierra - Firefox, Safari funziona con o senza di esso
Chris Athanasiadis,

3

Garantire che i nomi host siano definiti all'inizio del file ha fatto la differenza per me. Per impostazione predefinita, la riga 127.0.0.1 localhost è già all'inizio, basta aggiungere le voci sulla stessa riga.


Questa è la vera soluzione, ho provato tutto il resto e non ha nulla a che fare con i riferimenti tutti su una riga o collegati alla route IPv6 (a meno che non sia la tua route principale in apache conf ...) grazie @Erik!
Joey T

Anche questo per me era molto più di 2 o 3 secondi, più come 10-20 secondi. Avevo molte voci 127.0.0.1 ma tutte elencate DOPO la configurazione di localhost predefinita da OS X. Sono anche su Lion, non su ML, se questo è importante.
Joey T

Purtroppo, questo non funziona più con Mavericks, lasciando il mio voto qui per Lion, anche se ha funzionato bene fino a quando non sono passato a Mavs alcuni mesi fa.
Joey T

1

Ho avuto lo stesso problema e ho scoperto che era causato dall'abilitazione di IPv6 sulla mia LAN, ma non avendo IPv6 configurato correttamente tra la mia rete e il mio ISP. Apparentemente il server DNS IPv6 ha la precedenza sul DNS IPv4 quando al client vengono forniti entrambi. Ci sono voluti un paio di secondi (a ogni tentativo) perché il client scoprisse che il DNS IPv6 era irraggiungibile o mancante, e poi tornasse al DNS IPv4.


1

Nota: sto usando Windows e XAMPP, tuttavia durante la ricerca del problema molte persone hanno avuto lo stesso problema su Windows e Mac. Rispondi come riferimento per chiunque trovi questa domanda poiché ho passato ore a cercare una soluzione che funzioni per me:

Ho provato molte soluzioni per lo stesso problema, tra cui mettere tutti gli host su una riga, rimuovere host ridondanti e host virtuali e includere anche le linee IPv6 - nessuno di questi da solo ha avuto successo.

L'unica soluzione che finora sembra funzionare per me è una combinazione di tutte le soluzioni:

  • Cambiando il dominio che sto usando da mysite. da locale a mysite. dev . Ispirato dalla risposta di @ Cleverlemming.
  • Comprese le linee IPv6.
  • Rimozione di host virtuali e host ridondanti (li ho commentati).

Nel mio file hosts i miei host sono attualmente su righe separate e finora il problema sembra essere stato risolto.

Buona fortuna a chiunque tenti di risolvere questo problema e se qualcuno ha delle informazioni da aggiungere, fallo - questo sembra essere un problema che interessa molte persone senza una singola causa o soluzione nota.


1

Ho avuto lo stesso problema e alla fine ho capito che avevo la stessa voce host due volte sulla stessa riga:

per esempio

127.0.0.1 localhost host1 host2 host3 host4 host5 host1 host6

Ho rimosso la seconda istanza dello stesso host (nell'esempio sopra - host1) - e le cose si sono subito velocizzate.

Mi sono sentito un po 'sciocco quando l'ho scoperto, ma quando hai 10 nomi host lunghi sulla stessa riga e aggiungi / rimuovi spesso, può essere ignorato.


0

Il trucco che ha fatto per me è stato aggiungere

127.0.0.1 locahost

sulla prima riga del file host.

Da tutti i miei host virtuali, solo quelli che utilizzavano un database erano lenti. Credo che sia perché il processo di ricerca di "localhost" per la connessione al database ha rallentato le cose, poiché ho aggiunto solo gli indirizzi per i miei host virtuali e non anche "localhost". Ora è di nuovo tutto scattante. :)


Avevo due definizioni di localhost lì dentro; uno sembra migliore.
Aaron Brick

0

Mi sono imbattuto anche in questo un sacco. Ho un sacco di vhost definiti su due righe, una per IPv4 e una per IPv6. Spostare l'host che stavo cercando di risolvere per essere il primo della lista lo ha velocizzato.

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

0

Un problema stupido che mi ha portato a perdere molto tempo: dopo aver applicato la risposta di @ Cleverlemming , ho scoperto che c'erano voci duplicate nel file hosts. Qualcosa di simile a:

::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

Quindi la risoluzione dell'IP per site3.local e site4.local richiede questi 5 secondi di morte.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.