Apache ist auf anderen Computern im lokalen Netzwerk langsamer als auf dem lokalen Host

Apache ist auf anderen Computern im lokalen Netzwerk langsamer als auf dem lokalen Host

Ich habe mehrere Computer an das Netzwerk angeschlossen. Innerhalb dieses Netzwerks gibt es einen Server, der WAMP (Windows + Apache + PHP + MySQL) hostet. Darauf ist Windows 7 x32 Pro installiert. Ich kann diesen Server von meinem drahtlos verbundenen Server aus anpingen, alle Pings sind 1 ms. Interessant ist, dass meine Webanwendung, wenn ich auf dem Server selbst surfe, im Handumdrehen geladen wird. Ich kann durch Unterseiten surfen, als wären sie Bilder, die ich gerade wechsle.

Auf den anderen Computern läuft es jedoch langsamer. Das ist nicht schlimm, aber merklich langsamer. In manchen Fällen zeigt der Browser „Warten auf…“ an, was ein bis zwei Sekunden dauert, und das ist am ärgerlichsten.

Ich habe herausgefunden, dass es viel schneller ist, Anwendungen auf dem Server zu verwenden, während ich über Remote Desktop verbunden bin, als auf jedem anderen Computer. Es wäre großartig, wenn ich den gleichen Effekt auf ihnen erzielen könnte.

Wenn ich in der Entwicklerkonsole in Chrome nachschaue, kann ich Folgendes sehen: DOMContentLoaded beträgt auf dem Server etwa 400–600 ms und auf jedem anderen Computer 1400 ms.

Was kann ich in dieser Situation tun?

Antwort1

Stellen Sie sicher, dass HostnameLookups in Apache eingestellt ist Off.

Sie sagen, der Server führt Apache über ein WAMP-Setup (Windows-Äquivalent von LAMP) aus, richtig? Nun, wenn das der Fall ist, öffnen Sie httpd.confoder apache2.conf(alles hängt davon ab, wie es in Ihrem Setup installiert wurde; beide Dateien sind im Grunde gleich) und suchen Sie nach einer Konfigurationszeile darin HostnameLookups. Standardmäßig HostnameLookupsist es so eingestellt, Offwie im Kommentar erklärt, der direkt über der Einstellung in dieser Datei stehen sollte HostnameLookups; fette Hervorhebung ist von mir:

HostnameLookups: Protokollieren Sie die Namen der Clients oder nur ihre IP-Adressen, z. B. www.apache.org (ein) oder 204.62.129.132 (aus).Die Standardeinstellung ist deaktiviert, da es für das Internet insgesamt besser wäre, wenn die Benutzer diese Funktion bewusst aktivieren müssten. Denn wenn sie aktiviert werden, führt jede Client-Anforderung MINDESTENS zu einer Suchanfrage an den Nameserver.

Und dasoffizielle Apache-Dokumentationgeht auch hier tiefer ins Detail; die fette Hervorhebung stammt wiederum von mir:

Die Standardeinstellung ist „Aus“, um den Netzwerkverkehr für die Sites zu sparen, bei denen die umgekehrte Suche nicht unbedingt erforderlich ist.Dies ist auch für die Endbenutzer von Vorteil, da sie nicht mit der zusätzlichen Latenzzeit konfrontiert werden, die eine Suche mit sich bringt.Bei stark ausgelasteten Sites sollte diese Anweisung deaktiviert bleiben, da DNS-Lookups viel Zeit in Anspruch nehmen können.

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

Haben Sie außerdem Verzeichnisse oder Anweisungen, die Apache Basic Auth verwenden? Welches ist der einfachste Passwortschutz, den man in Apache einrichten kann? Ich erinnere mich, dass es in einigen Fällen zu Verlangsamungen im Zusammenhang mit Hostnamen-Lookups kam, die mit Allow fromFeldern wie einem verbunden waren Allow from localhost. Das Auskommentieren Allow from localhostoder Festlegen auf Allow from 127.0.0.1 ::1und anschließendes Neustarten von Apache würde das Problem beheben.

Wie indie offizielle Apache-Dokumentationselbst wenn die Verwendung vollständiger Hostnamen in / -Direktiven HostnameLookupseingestellt ist, wird eine ganze Kette von DNS-Lookups ausgelöst, die den Zugriff verlangsamen können; die fette Hervorhebung stammt von mir:OffAllow fromDeny from

Hosts, deren Namen mit dieser Zeichenfolge übereinstimmen oder damit enden, wird der Zugriff gestattet. Es werden nur vollständige Komponenten abgeglichen. Das obige Beispiel wird also mit foo.apache.org übereinstimmen, aber nicht mit fooapache.org.Diese Konfiguration bewirkt, dass Apache eine doppelte Reverse-DNS-Suche nach der Client-IP-Adresse durchführt, unabhängig von der Einstellung der HostnameLookups-Direktive. Es wird eine Reverse-DNS-Suche nach der IP-Adresse durchgeführt, um den zugehörigen Hostnamen zu finden, und dann eine Vorwärtssuche nach dem Hostnamen, um sicherzustellen, dass er mit der ursprünglichen IP-Adresse übereinstimmt. Nur wenn die Vorwärts- und Rückwärts-DNS konsistent sind und der Hostname übereinstimmt, wird der Zugriff zugelassen.

DasBlog-Beitrag erklärt es auch schönwenn Sie weitere Einzelheiten dazu lesen möchten, wie Allow from/ Deny from-Einträge, die einen Hostnamen (anstelle einer reinen IP-Adresse) haben, den Apache-Zugriff aufgrund mehrerer DNS-Lookups verlangsamen können:

Ich bin jedoch kürzlich auf eine Situation gestoßen, in der wir versehentlich das Gleiche getan haben, ohne HostnameLookups explizit zu aktivieren. Wie? Indem wir den Zugriff basierend auf dem Remote-Hostnamen beschränkten! Lesen Sie die Dokumentation zur Allow-Direktive im Abschnitt „Ein (teilweiser) Domänenname“:

Diese Konfiguration führt dazu, dass Apache eine doppelte umgekehrte DNS-Suche nach der Client-IP-Adresse durchführt, unabhängig von der Einstellung der HostnameLookups-Direktive. Es wird eine umgekehrte DNS-Suche nach der IP-Adresse durchgeführt, um den zugehörigen Hostnamen zu finden, und dann eine Vorwärtssuche nach dem Hostnamen, um sicherzustellen, dass er mit der ursprünglichen IP-Adresse übereinstimmt. Nur wenn die Vorwärts- und Rückwärts-DNS konsistent sind und der Hostname übereinstimmt, wird der Zugriff zugelassen. Das ist absolut sinnvoll, aber es ist eine ziemlich große, wahrscheinlich unerwartete Nebenwirkung bei der Verwendung von etwas wie:

Allow from .example.com

In unserem Fall war es ein noch weniger offensichtlicher Fall, bei dem wir überhaupt nicht an Hostnamen dachten:

Allow from localhost

Hier wurde localhost geschrieben, vielleicht um etwas Aufwand zu sparen oder vielleicht die Übersichtlichkeit zu erhöhen, anstatt 127.0.0.1 (IPv4) und ::1 (IPv6) auszuschreiben. Es ist mental so einfach, „localhost“ als direkten Alias ​​für 127.0.0.1 und ::1 zu betrachten, dass wir vergessen können, dass der Name „localhost“ nur eine Konvention ist und wie jeder andere Name nachgeschlagen werden muss. Wer mit der MySQL-Datenbank vertraut ist, weiß vielleicht, dass sie dem Wort „localhost“ tatsächlich eine spezielle, verwirrende Bedeutung zuweist, um eine UNIX-Socket-Verbindung statt einer TCP-Verbindung zu 127.0.0.1 oder was auch immer „localhost“ im System als definiert ist, herzustellen!

Sie denken vielleicht auch, dass die Suche nach 127.0.0.1 schnell geht, weil dies normalerweise „localhost“ in /etc/hosts zugeordnet ist. Stimmt, 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) oder etwas anderes in /etc/hosts. Daher ist es wichtig, die Adressen auszuschreiben:

Allow from 127.0.0.1
Allow from ::1

Dadurch wird das implizite HostnameLookups-Verhalten sofort gestoppt 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 nicht zuerst durch eine Firewall gelassen wurde. Daher war das Verkehrsaufkommen relativ gering. Diese Zugriffskontrolle ist einer der Gründe, warum localhost überhaupt zugelassen werden musste. Auf einem öffentlichen Produktionssystem wäre dies jedoch aufgrund der Verlangsamung des Datenverkehrs sehr schlecht gewesen.

verwandte Informationen