O Apache é mais lento em outros computadores na rede local do que no localhost

O Apache é mais lento em outros computadores na rede local do que no localhost

Tenho poucos computadores conectados à rede. Existe um servidor dentro dessa rede que hospeda o WAMP (Windows + Apache + PHP + MySQL). Há o Windows 7 x32 Pro instalado nele. Posso fazer ping nesse servidor a partir do meu servidor conectado sem fio, todos os pings duram 1 ms. O que é interessante é que quando navego em meu aplicativo da web no próprio servidor, ele carrega em um piscar de olhos. Posso navegar em subpáginas como se fossem imagens que estou apenas trocando.

No entanto, nos outros computadores funciona mais lentamente. Não é trágico, mas visivelmente mais lento. Em alguns casos, o navegador mostra “Aguardando…”, o que leva um ou dois segundos e é o mais doloroso.

Descobri que é muito mais rápido usar o aplicativo no servidor enquanto estou conectado via área de trabalho remota do que em qualquer outro computador. Seria incrível se eu conseguisse o mesmo efeito sobre eles.

Quando olho para o console do desenvolvedor no Chrome, posso ver que: o DOMContentLoaded é de 400 a 600 ms no servidor e de 1400 ms em todos os outros computadores.

O que posso fazer nessa situação?

Responder1

Certifique-se de que HostnameLookups esteja configurado Offno Apache.

Você diz que o servidor está executando o Apache por meio de uma configuração WAMP (equivalente ao LAMP no Windows), correto? Bem, se for esse o caso, abra httpd.confou apache2.conf(tudo depende de como foi instalado no seu setup; ambos os arquivos são basicamente iguais) e procure uma linha de configuração nele HostnameLookups. Por padrão HostnameLookupsé definido Offconforme explicado no comentário que deve estar logo acima da HostnameLookupsconfiguração nesse arquivo; a ênfase ousada é minha:

HostnameLookups: Registre os nomes dos clientes ou apenas seus endereços IP, por exemplo, www.apache.org (ativado) ou 204.62.129.132 (desativado).O padrão está desativado porque seria melhor para a rede se as pessoas tivessem que ativar esse recurso conscientemente, pois ativá-lo significa que cada solicitação do cliente resultará em PELO MENOS uma solicitação de pesquisa para o servidor de nomes.

E adocumentação oficial do Apachetambém entra em detalhes mais profundos; novamente a ênfase ousada é minha:

O padrão é Desativado para economizar o tráfego de rede para os sites que realmente não precisam de pesquisas reversas.Também é melhor para os usuários finais porque eles não precisam sofrer a latência extra que uma pesquisa acarreta.Sites muito carregados devem deixar esta diretiva desativada, pois as pesquisas de DNS podem levar um tempo considerável.

Não use nomes de host para diretivas Allow from/ .Deny from

Além disso, você tem algum diretório ou diretiva que use o Apache Basic Auth? Qual é a proteção por senha simples que pode ser definida no Apache? Lembro-me que em alguns casos houve lentidão relacionada a pesquisas de nomes de host conectadas a Allow fromcampos como Allow from localhost. Comentar Allow from localhostou definir isso Allow from 127.0.0.1 ::1e reiniciar o Apache esclareceria isso.

Como explicado ema documentação oficial do Apachemesmo com HostnameLookupso Offuso de nomes de host completos nas diretivas Allow from/ Deny fromirá acionar toda uma cadeia de pesquisas de DNS que podem retardar o acesso; a ênfase ousada é minha:

Hosts cujos nomes correspondem ou terminam com esta string têm acesso permitido. Apenas componentes completos são correspondidos, portanto, o exemplo acima corresponderá a foo.apache.org, mas não corresponderá a fooapache.org.Esta configuração fará com que o Apache execute uma pesquisa DNS reversa dupla no endereço IP do cliente, independentemente da configuração da diretiva HostnameLookups. Ele fará uma pesquisa reversa de DNS no endereço IP para encontrar o nome do host associado e, em seguida, fará uma pesquisa direta no nome do host para garantir que ele corresponda ao endereço IP original. Somente se o DNS direto e reverso forem consistentes e as correspondências de nome de host o acesso será permitido.

Essepostagem do blog também explica isso muito bemse você quiser ler mais detalhes sobre como entradas Allow from/ Deny fromque possuem um nome de host - em vez de um endereço IP bruto - podem retardar o acesso do Apache devido a múltiplas pesquisas de DNS:

No entanto, recentemente me deparei com uma situação em que inadvertidamente estávamos fazendo o equivalente sem ativar explicitamente o HostnameLookups. Como? Limitando o acesso com base no nome do host remoto! Leia a documentação sobre a diretiva Allow, na seção "Um nome de domínio (parcial)":

Esta configuração fará com que o Apache execute uma pesquisa DNS reversa dupla no endereço IP do cliente, independentemente da configuração da diretiva HostnameLookups. Ele fará uma pesquisa reversa de DNS no endereço IP para encontrar o nome do host associado e, em seguida, fará uma pesquisa direta no nome do host para garantir que ele corresponda ao endereço IP original. Somente se o DNS direto e reverso forem consistentes e as correspondências de nome de host o acesso será permitido. Isso faz todo o sentido, mas é um grande efeito colateral inesperado e provável de usar algo como:

Allow from .example.com

No nosso caso, foi um caso ainda menos óbvio que não nos fez pensar em nomes de host:

Allow from localhost

Aqui localhost foi escrito, talvez para economizar algum esforço ou talvez aumentar a clareza em vez de escrever 127.0.0.1 (IPv4) e ::1 (IPv6). Mentalmente é tão fácil ver que "localhost" é um alias direto para 127.0.0.1 e ::1 que podemos esquecer que o nome "localhost" é apenas uma convenção e requer uma pesquisa como qualquer outro nome. Aqueles familiarizados com o banco de dados MySQL podem saber que ele realmente atribui um significado especial e confuso à palavra "localhost" para fazer uma conexão de soquete UNIX em vez de uma conexão TCP para 127.0.0.1 ou qualquer que seja o "localhost" definido no sistema!

Você também pode estar pensando que procurar 127.0.0.1 é rápido porque geralmente é mapeado para "localhost" em /etc/hosts. É verdade, mas todos os outros visitantes que não estão em /etc/hosts obtêm a pesquisa lenta de DNS PTR! E dependendo do sistema operacional, você pode ver "ip6-localhost" ou "ip6-loopback" (Debian 7, Ubuntu 12.04), "localhost6" (RHEL 5/6, Fedora 19) em /etc/hosts, ou qualquer outra coisa . Portanto, é importante explicitar os endereços:

Allow from 127.0.0.1
Allow from ::1

Fazer isso interrompe imediatamente o comportamento implícito de HostnameLookups e acelera o site. Neste caso, não foi um problema, uma vez que se tratava de um site privado e interno que não podia ser visitado por ninguém que não tivesse permissão para passar por um firewall, portanto os níveis de tráfego eram relativamente baixos. Esse controle de acesso é parte do motivo pelo qual o localhost precisava ser permitido em primeiro lugar. Mas teria sido muito ruim num sistema de produção público devido à desaceleração no atendimento ao tráfego.

informação relacionada