Apache ist auf anderen Computern im lokalen Netzwerk langsamer als auf localhost

2

Ich habe nur wenige Computer mit dem Netzwerk verbunden. Es gibt einen Server in diesem Netzwerk, der WAMP hostet (Windows + Apache + PHP + MySQL). Es ist Windows 7 x32 Pro installiert. Ich kann diesen Server von meinem drahtlos verbundenen Server aus anpingen. Alle Pings sind 1 ms lang. Was interessant ist, wenn ich meine Webanwendung auf dem Server selbst durchsuche, wird sie im Handumdrehen geladen. Ich kann auf Unterseiten surfen, als wären es Bilder, die ich gerade wechsle.

Auf den anderen Computern arbeitet es jedoch langsamer. Es ist nicht tragisch, aber merklich langsamer. In einigen Fällen wird im Browser "Warten auf ..." angezeigt, was ein oder zwei Sekunden dauert. Dies ist am schmerzhaftesten.

Ich habe herausgefunden, dass es viel schneller ist, Anwendungen auf dem Server zu verwenden, während ich über einen Remotedesktop verbunden bin, als auf jedem anderen Computer. Das wäre fantastisch, wenn ich den gleichen Effekt auf sie bekommen könnte.

Wenn ich mir die Entwicklerkonsole in Chrom ansehe, sehe ich Folgendes: Der DOMContentLoaded entspricht 400-600 ms auf dem Server und 1400 ms auf jedem anderen Computer.

Was kann ich in dieser Situation tun?

Dawid
quelle
Haben Sie Apache so konfiguriert, dass es auf alles hört (anstatt auf localhost)? Haben Sie einen Proxy-Server oder Proxy-Einstellungen in Ihrem LAN?
Kinnectus
Tut Apache DNS, möglicherweise für die Protokollierung?
David Schwartz
WAMP ist verkabelt oder kabellos? Und die anderen Computer?
Edumgui
Wie machen Sie Ihre Messungen genau? Aber es ist logisch, dass loalhost schneller wäre.
Ramhound
OK - Sie verstehen hoffentlich, dass es nicht über ein Netzwerk geht, wenn Sie es von dem Server ausführen, auf dem es gehostet wird. Wenn Sie von einem anderen Computer aus zugreifen, gehen Sie über ein Netzwerk und sind daher von der Netzwerkgeschwindigkeit / - kapazität / usw. betroffen.
Debra

Antworten:

1

Stellen Sie sicher, dass HostnameLookups Offin Apache auf gesetzt ist.

Sie sagen, dass der Server Apache über ein WAMP-Setup (Windows-Äquivalent zu LAMP) ausführt, richtig? Nun, wenn das der Fall ist, öffne httpd.confoder apache2.conf(alles hängt davon ab, wie es in deinem Setup installiert wurde; beide Dateien sind im Grunde genommen gleich) und suche eine Konfigurationszeile mit HostnameLookupsdarin. Die Standardeinstellung HostnameLookupslautet Offwie im Kommentar erläutert und sollte sich direkt über der HostnameLookupsEinstellung in dieser Datei befinden. kühne Betonung liegt bei mir:

HostnameLookups: Protokollieren Sie die Namen der Clients oder nur deren IP-Adressen, z. B. www.apache.org (ein) oder 204.62.129.132 (aus). Die Standardeinstellung ist deaktiviert, da dies für das Netz insgesamt besser wäre, wenn die Benutzer diese Funktion wissentlich aktivieren müssten, da die Aktivierung bedeutet, dass jede Clientanforderung MINDESTENS eine Suchanforderung an den Nameserver ergibt.

Und die offizielle Apache-Dokumentation geht auch tiefer ins Detail. wieder kühne Betonung liegt bei mir:

Die Standardeinstellung ist "Aus", um den Netzwerkverkehr für diejenigen Sites zu speichern, für die die Reverse-Lookups nicht wirklich erforderlich sind. Dies ist auch für die Endbenutzer besser, da sie nicht die zusätzliche Latenz erleiden müssen, die eine Suche mit sich bringt. Bei stark ausgelasteten Sites sollte diese Anweisung deaktiviert bleiben, da DNS-Suchvorgänge viel Zeit in Anspruch nehmen können.

Verwenden Sie keine Hostnamen für Allow from/ Deny fromDirektiven.

Haben Sie auch Verzeichnisse oder Direktiven, die Apache Basic Auth verwenden? Welchen einfachen Passwortschutz kann man in Apache einstellen? Ich erinnere mich, dass es in einigen Fällen zu Verzögerungen bei der Suche nach Hostnamen kam, die mit Allow fromFeldern wie z Allow from localhost. Wenn Sie dies auskommentieren Allow from localhostoder auf "" setzen Allow from 127.0.0.1 ::1und Apache dann neu starten, wird dies behoben.

Wie in der offiziellen Apache - Dokumentation auch mit HostnameLookupsSet Offmit voller Host - Namen in Allow from/ Deny fromRichtlinien eine ganze Kette von DNS - Lookups auslösen , die nach unten Zugriff verlangsamen; kühne Betonung liegt bei mir:

Hosts, deren Namen mit dieser Zeichenfolge übereinstimmen oder auf dieser Zeichenfolge enden, ist der Zugriff gestattet. Es werden nur vollständige Komponenten abgeglichen, sodass das obige Beispiel mit foo.apache.org übereinstimmt, jedoch nicht mit fooapache.org. Diese Konfiguration veranlasst Apache, unabhängig von der Einstellung der HostnameLookups-Direktive eine doppelte Reverse-DNS-Suche für die Client-IP-Adresse durchzuführen. Es wird ein Reverse-DNS-Lookup für die IP-Adresse durchgeführt, um den zugehörigen Hostnamen zu ermitteln. Anschließend wird ein Forward-Lookup für den Hostnamen durchgeführt, um sicherzustellen, dass er mit der ursprünglichen IP-Adresse übereinstimmt. Nur wenn Forward- und Reverse-DNS konsistent sind und die Hostnamen übereinstimmen, wird der Zugriff zugelassen.

In diesem Blog-Beitrag wird es auch gut erklärt, wenn Sie mehr darüber erfahren möchten, wie Allow from/ Deny fromEinträge mit einem Hostnamen - anstelle einer unformatierten IP-Adresse - den Apache-Zugriff aufgrund mehrerer DNS-Lookups verlangsamen können:

Vor kurzem bin ich jedoch auf eine Situation gestoßen, in der wir versehentlich das Gleiche getan haben, ohne HostnameLookups explizit zu aktivieren. Wie? Durch Einschränkung des Zugriffs basierend auf dem Remote-Hostnamen! Lesen Sie die Dokumentation zur Allow-Direktive im Abschnitt "A (partial) domain-name":

Diese Konfiguration veranlasst Apache, unabhängig von der Einstellung der HostnameLookups-Direktive eine doppelte Reverse-DNS-Suche für die Client-IP-Adresse durchzuführen. Es wird ein Reverse-DNS-Lookup für die IP-Adresse durchgeführt, um den zugehörigen Hostnamen zu ermitteln. Anschließend wird ein Forward-Lookup für den Hostnamen durchgeführt, um sicherzustellen, dass er mit der ursprünglichen IP-Adresse übereinstimmt. Nur wenn Forward- und Reverse-DNS konsistent sind und die Hostnamen übereinstimmen, wird der Zugriff zugelassen. Dies macht durchaus Sinn, ist aber eine ziemlich große, wahrscheinlich unerwartete Nebenwirkung bei der Verwendung von:

Allow from .example.com

In unserem Fall war es ein noch weniger offensichtlicher Fall, der uns überhaupt nicht an Hostnamen denken ließ:

Allow from localhost

Hier wurde localhost geschrieben, um vielleicht etwas Aufwand zu sparen oder die Übersichtlichkeit zu erhöhen, anstatt 127.0.0.1 (IPv4) und :: 1 (IPv6) auszuschreiben. Mental ist es so einfach, "localhost" als direkten Alias ​​für 127.0.0.1 und :: 1 anzuzeigen, dass wir vergessen können, dass der Name "localhost" nur eine Konvention ist und eine Suche wie jeder andere Name erfordert. Diejenigen, die mit der MySQL-Datenbank vertraut sind, wissen möglicherweise, dass sie dem Wort "localhost" eine verwirrende Bedeutung zuweist, um eine UNIX-Socket-Verbindung anstelle einer TCP-Verbindung zu 127.0.0.1 oder einem beliebigen auf dem System definierten "localhost" herzustellen!

Möglicherweise denken Sie auch, dass das Nachschlagen von 127.0.0.1 schnell ist, da dies normalerweise "localhost" in / etc / hosts zugeordnet ist. Richtig, aber jeder andere Besucher, der sich nicht in / etc / hosts befindet, erhält stattdessen die langsame DNS-PTR-Suche! Und je nach Betriebssystem sehen Sie möglicherweise "ip6-localhost" oder "ip6-loopback" (Debian 7, Ubuntu 12.04), "localhost6" (RHEL 5/6, Fedora 19) in / etc / hosts oder etwas anderem . Deshalb ist es wichtig, die Adressen zu buchstabieren:

Allow from 127.0.0.1
Allow from ::1

Dadurch wird das implizite Verhalten von HostnameLookups sofort beendet und die Website beschleunigt. In diesem Fall war dies kein Problem, da es sich um eine private, interne Website handelte, die von niemandem besucht werden konnte, der zuvor keine Firewall durchlaufen hatte, sodass das Verkehrsaufkommen relativ gering war. Diese Zugangskontrolle ist Teil dessen, warum localhost überhaupt zugelassen werden musste. In einem öffentlichen Produktionssystem wäre dies jedoch aufgrund der Verlangsamung des Verkehrsaufkommens sehr schlecht gewesen.

JakeGould
quelle