Como posso eliminar a resolução / carregamento lento de localhost / virtualhost (um atraso de 2-3 segundos) no Mac OS X Lion?


97

Desde que configurei meus ambientes de desenvolvimento no Mac OS X Lion (novo macbook air adquirido em janeiro de 2012), percebi que resolver para um host virtual é muito lento (cerca de 3 segundos) na primeira vez, mas depois disso é rápido, contanto que Eu continuo carregando regularmente.

Se eu deixá-lo intocado por alguns minutos e recarregar novamente, a primeira recarga será (novamente) dolorosamente lenta; parece que algo está sendo armazenado em cache.

Como pode ser visto abaixo, não estou usando o TLD .local.

Minha configuração: Apache 2 - MySQL - PHP instalado e habilitado - adicionei alguns hosts virtuais, um dos quais criei para localhost

Meu / 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

Minha configuração de host virtual em 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>

Encontrei este stackoverflow.com/questions/19313546/… . E funciona para mim!!!
Clark yu

2
Eu relatei isso como um bug para apple rdar: // 24237290 e recebi esta resposta hilária:> A engenharia forneceu o seguinte feedback em relação a esse problema:> Este é o comportamento esperado desde o no máximo. de aliases no arquivo / etc / hosts permitido é 10. Ter mais de 10 aliases no arquivo / etc / hosts não parece ser prático. Eu agradeceria se mais pessoas relatassem esse bug e dissessem que essa resposta é completamente ridícula (e não documentada em nenhum lugar também).
dwt de

Há algo de ruim em usar o TLD .local?
Yaakov Ainspan

Funciona bem para mim em mojave ... :)
rogerdpack

Respostas:


169

Eu tive exatamente o mesmo problema e isso estava me deixando louco!

Coloque todas as entradas do arquivo hosts para localhost em uma linha, assim:

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

Caiu como uma luva para mim. Parece um bug no Lion.


Isso funciona e acho que @adam-gries deve marcar como resposta. Obrigado Jeremy!
zysoft

5
Isso corrigido funcionou para mim, mas eu alcancei um limite de 11 sites, após o qual começou a funcionar ainda mais lento! Por enquanto, dividi as coisas em duas entradas de hosts (com o mesmo endereço IP) e parece que está indo bem.
Alex Ghiculescu,

Mesmo problema e solução que @AlexGhiculescu, mas no OS X 10.8 Mountain Lion.
chrishiestand

2
OS X 10.9, ainda é um problema e está me deixando louco por horas agora! Brilhante, obrigado pela ótima resposta!
robertp

2
Isso só funciona porque você está inserindo as entradas de host ANTES do outro roteamento de dispositivo de host local. Se o seu servidor web está olhando 127.0.0.1, esses hosts precisam estar no HEAD do arquivo / etc / hosts para pesquisas rápidas. Tenho várias dezenas de linhas 127.0.0.1, apenas quando as movi para o PARTE SUPERIOR do arquivo / etc / hosts é que elas resolvem rapidamente para mim.
Joey T

70

Há outro problema de 10.7. * A 10.8.4 para sites que terminam em ".local" que causa pesquisas de cinco segundos. Detalhes e solução cortesia de Bram (nos) Van Damme no seguinte link:

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

"Por padrão, qualquer nome de host terminado em .local é tratado como um host Bonjour, em vez de consultar as entradas do servidor DNS nas preferências de Rede.

Para corrigir este problema (sem ter que renomear cada vhost), você precisa adicionar entradas IPv6 para cada um de seus vhosts em seu arquivo / etc / hosts: "

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

Isso também afeta os sistemas Windows. A solução também funciona como um encanto.
ToBe

Continuei tendo esse problema ao apontar hosts para uma VM local. Deixei meu arquivo de hosts formatado bem (entradas em suas próprias linhas etc.) e adicionei entradas adicionais, usando o endereço IPV6 da VM, e todos os meus problemas de atraso foram embora. Parecia que só corria para isso com sites terminando em .local, e adicionar as duas entradas IPV4 / 6 corrigiu tudo para mim (OS X 10.9)
Justin

Tive que lutar com isso um pouco porque meu nome de host no painel de preferências "Compartilhamento" não correspondia ao que eu estava inserindo em / etc / hosts, apenas no caso de ajudar alguém ...
abhishekmukherg

Uau. Eu entendo que ::1é o atalho IPv6 equivalente a 127.0.0.1. Mas o que isso fe80::1%lo0significa? - ah, respondido em superuser.com/questions/241642/…
AlexChaffee

no macOS Sierra isso funcionou, mas tive que remover a primeira linha.
Bryce York

24

Eu tive o mesmo problema, também no Lion.

Estranhamente, minha solução foi oposta à de Jeremy. Eu tinha um monte de entradas someproject.dev em uma linha em / etc / hosts. Carregar um site em qualquer um deles pela primeira vez demorou uma eternidade, cerca de um minuto. Se eu o usasse novamente em 5 segundos ou mais, era muito rápido, mas muito mais tempo e demoraria novamente um minuto. Eu suspeitava de todos os tipos de coisas, conexões mysql, versões Ruby, bugs do Rails, Apache, Phusion Passenger. Até que finalmente olhei para o console e percebi que pesquisas DNS estavam sendo tentadas.

Então, coloquei todos eles em linhas separadas:

127.0.0.1 localhost

127.0.0.1 myproject.dev

127.0.0.1 myotherproject.dev

E de repente tudo estava agitado novamente. O mesmo em ambas as minhas máquinas.


Tentei qualquer coisa aqui no stackoverflow, mas isso e a postagem do user902664 ajudaram. Todas as linhas IPv4 e IPv6 devem estar em uma linha. Se usar entradas IPv4 apenas, mas em linhas separadas, diminuiu de 30 segundos para ~ 1, usando junto com as configurações de IPv6 em linhas separadas diminuiu para ~ 0,5 segundos.
tomis de

Este parece ser um bug maluco. Eu tinha uma entrada para um endereço, 192.168.56.3 com 14 aliases. Remova um alias e você pode resolver os hosts em <1s. Com o 14º alias, leva cerca de 30s para resolver as primeiras entradas da lista ...
Brian M. Carr

Este é um bug exclusivo do OSX? Alguém pode criar um link para um relatório de bug?
pje

Passei horas aprendendo mais sobre configuração de rede do que jamais desejei. Eu estava prestes a mergulhar e configurar um servidor DNS local e então isso consertou. Obrigado. Mavericks 10.9.5 aqui.
desajeitados de

13

Especificar o mesmo host para IPv6 :: 1 me ajudou.

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

Sim, e um domínio por linha.
warvariuc

1
Isso resolveu o problema para mim. No meu caso, pelo menos, não havia necessidade de apenas um domínio por linha.
jeff-h

9

Certifique-se de colocar as entradas de IP v6 que não estão em linha com o localhost

::1 localhost

as entradas IP v6 vão em uma linha separada

fe80::1%lo0 here and_here

Às vezes é muito rápido agora, mas há raras exceções em que os velhos atrasos voltam. No entanto, eles podem ser baseados em outras razões.


1
Isso funcionou para mim no OS X 10.11.6 - assim que dupliquei a entrada IPv4 localhost (linha única para 127.0.0.1) para uma linha :: 1 com os mesmos aliases, as pesquisas passaram de 4-5 segundos para instantâneas. Eu também tinha uma entrada 127.0.0.2 que dupliquei como :: 2. Tenho uma única linha por endereço. Obrigado!
RichVel

7

No OSX El Capitan, o que funcionou para mim foi fazer uma entrada IPv6 duplicada logo acima da entrada IPv4, assim

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

Combinado, funciona com entrada IPv6 acima ou abaixo de IPv4 desde que tenha a mesma lista de aliases.
RichVel

Isso é absurdo, mas corrigiu o problema que eu tive com o Chrome sendo muito lento para resolver os links do localhost para meus contêineres do docker do laradock (Safari sempre foi bom)
jeff-h

Funciona para High Sierra também - Firefox, Safari funcionam com ou sem ele
Chris Athanasiadis

3

Garantir que os nomes do host sejam definidos no início do arquivo fez a diferença para mim. Por padrão, a linha 127.0.0.1 localhost já está no início, basta adicionar suas entradas na mesma linha.


Esta é a solução real, tentei todo o resto e não tem nada a ver com referências todas em uma linha ou vinculadas à rota IPv6 (a menos que essa seja sua rota primária no apache conf ...) obrigado @Erik!
Joey T

Além disso, isso foi muito mais do que 2 ou 3 segundos para mim, mais como 10 a 20 segundos. Eu tinha muitas entradas 127.0.0.1, mas todas listadas DEPOIS da configuração localhost padrão pelo OS X. Também estou no Lion, não no ML, se isso importa.
Joey T

Infelizmente, isso não funciona mais com Mavericks - deixando meu upvote aqui para o Lion, embora funcionasse bem até que eu atualizei para Mavs alguns meses atrás.
Joey T

1

Eu tive o mesmo problema e descobri que ele era causado ao habilitar o IPv6 em minha LAN, mas não ter o IPv6 configurado corretamente entre minha rede e meu ISP. Aparentemente, o servidor DNS IPv6 tem precedência sobre o DNS IPv4 quando o cliente recebe ambos. Demorou alguns segundos (em cada tentativa) para o cliente descobrir que o DNS IPv6 estava inacessível ou ausente e, em seguida, voltar ao DNS IPv4.


1

Observação: estou usando o Windows e o XAMPP, no entanto, ao pesquisar o problema, muitas pessoas tiveram o mesmo problema no Windows e no Mac. Resposta para referência para qualquer pessoa que encontre esta pergunta, pois passei horas tentando encontrar uma solução que funcione para mim:

Tentei muitas soluções para o mesmo problema, incluindo colocar todos os hosts em uma linha, remover hosts e hosts virtuais redundantes e também incluir as linhas IPv6 - nenhum deles sozinho teve sucesso.

A única solução que até agora parece funcionar para mim é uma combinação de todas as soluções:

  • Alterando o domínio que estou usando em meu site. local para meu site. dev . Inspirado na resposta de @Cleverlemming.
  • Incluindo as linhas IPv6.
  • Removendo hosts virtuais e hosts redundantes (eu os comentei).

No meu arquivo de hosts, meus hosts estão atualmente em linhas separadas e, até agora, o problema parece ter sido corrigido.

Boa sorte para todos que estão tentando resolver este problema e se alguém tiver alguma informação a acrescentar, faça-o - este parece ser um problema que afetou muitas pessoas sem uma causa ou solução única conhecida.


1

Tive o mesmo problema e finalmente percebi que tinha a mesma entrada de host duas vezes na mesma linha:

por exemplo

127.0.0.1 localhost host1 host2 host3 host4 host5 host1 host6

Removi a segunda instância do mesmo host (no exemplo acima - host1) - e as coisas aceleraram imediatamente.

Pareceu um pouco bobo quando descobri isso, mas quando você tem 10 nomes de host longos na mesma linha e está frequentemente adicionando / removendo, isso pode ser facilmente esquecido.


0

O truque que funcionou para mim foi adicionar

127.0.0.1 locahost

na primeira linha do arquivo host.

De todos os meus hosts virtuais, apenas aqueles que usam um banco de dados eram lentos. Acredito que seja porque o processo de pesquisar "localhost" para a conexão do banco de dados tornou as coisas mais lentas, já que só adicionei os endereços dos meus hosts virtuais e não "localhost" também. Agora está tudo rápido novamente. :)


Eu tinha duas definições de localhost lá; um parece melhor.
Aaron Brick

0

Já me deparei com isso também. Eu tenho um monte de vhosts definidos em duas linhas, uma para IPv4 e outra para IPv6. Mover o host que eu estava tentando resolver para ser o primeiro na lista acelerou o processo.

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

Um problema estúpido que me levou a perder um tempo considerável: depois de aplicar a resposta de @Cleverlemming , descobri que havia entradas duplicadas no arquivo hosts. Algo como:

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

Então, a resolução de IP para site3.local e site4.local leva esses 5 segundos de morte.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.