Apache mit nginx

Sie können die Leistung des Webservers, auf dem Kunden-Websites (Apache) gehostet werden, verbessern, indem Sie nginx verwenden. Dies ist ein zusätzlicher Hochleistungswebserver, der in der Regel als Reverse-Proxy-Server genutzt wird. Dieser Webserver ist speziell darauf ausgelegt, statischen Content (z.B. Bilder, Video, CSS, XML usw.) in großem Umfang bereitzustellen. Im Gegensatz zu Apache ist nginx weitaus effizienter bei der Verarbeitung einer großen Anzahl gleichzeitiger Verbindungen. Ein weiterer Vorteil dieses Webservers gegenüber Apache ist, dass nginx pro Clientverbindung einen erheblich geringeren Speicheraufwand hat.

Um die Vorteile von nginx optimal zu nutzen, wird er von Plesk als Reverse-Proxy-Server konfiguriert, der zwischen das Internet und Apache geschaltet ist (siehe nachfolgendes Diagramm). Dies bedeutet, dass nginx zu einem Front-End-Webserver wird, der alle eingehenden Abfragen von Website-Besuchern verarbeitet. Die Anforderungen werden an Apache gesendet, wo eine Unterscheidung zwischen Abfragen von statischem und dynamischem Content getroffen wird. Wenn eine statische Datei angefordert wird (z.B. JPG, CSS, HTML), leitet Apache die Abfrage durch alle registrierten Handler (wendet .htaccess-Konfiguration auf Verzeichnisebene, URL-Rewrite usw. an) und gibt eine Antwort an nginx zurück, die lediglich den Speicherort der angeforderten Datei auf dem Dateisystem enthält. Daraufhin lokalisiert nginx die Datei und sendet sie an den Client. Wenn eine dynamische Datei angefordert wird (wie z.B. ein PHP-Skript), führt Apache die Datei aus und sendet die Antwort an nginx, der die Datei an den Client übermittelt.

image-apache-nginx-combination

Eine solche Kombination aus nginx und Apache bietet die folgenden Vorteile:

  • Höhere maximal zulässige Anzahl gleichzeitiger Verbindungen zu einer Website.
  • Geringerer Verbrauch von Server-CPU und Speicherressourcen. Die maximale Wirkung wird bei Websites erzielt, die statischen Content in großem Umfang enthalten (wie z.B. Fotogalerien, Video-Streaming-Websites usw.).
  • Verbesserte Effizienz bei der Bedienung von Besuchern, deren Verbindung langsam ist, (GPRS, EDGE, 3G usw.). Ein Beispiel: Ein Client mit einer 10-KB/s-Verbindung fordert ein PHP-Skript an, das eine 100-KB-Antwort generiert. Wenn kein nginx auf dem Server vorhanden ist, wird die Antwort von Apache übermittelt. Während der für die Übermittlung der Antwort benötigten 10 Sekunden verbrauchen Apache und PHP weiter die vollen Systemressourcen für diese offene Verbindung. Wenn nginx installiert ist, leitet Apache die Antwort an nginx weiter (die Verbindung von nginx zu Apache ist sehr schnell, da sich beide auf demselben Server befinden) und gibt Systemressourcen frei. Da nginx weniger Speicherbedarf hat, wird die Gesamtbelastung des Systems verringert. Wenn Sie eine große Anzahl solch langsamer Verbindungen haben, wird durch den Einsatz von nginx die Website-Performance beträchtlich erhöht.

Als Nächstes in diesem Abschnitt werden die technischen Einzelheiten dazu beschrieben, wie Plesk mit Unterstützung von nginx HTTP-Abfragen verarbeitet. Informationen zum Aktivieren der Unterstützung für nginx in Plesk finden Sie im Abschnitt Installieren von nginx. Wenn Sie nginx nicht verwenden möchten, machen Sie Apache zu Ihrem Front-End-Webserver, indem Sie nach den Anweisungen im Abschnitt Deaktivieren von nginx vorgehen. Wenn Sie alle HTTP-Anforderungen für Webinhalt über nginx bearbeiten lassen möchten, lesen Sie den Artikel Anpassen der Apache-Webserver-Einstellungen.

Wie Plesk mit nginx HTTP-Abfragen verarbeitet

Um nginx nahtlos an Apache anzubinden, verwendet Plesk zwei zusätzliche Apache-Module:

  • mod_aclr2 Mit diesem Modul wird ein Handler eingerichtet, der nach den Handlern aller anderen Apache-Module (mod_rewrite, .htaccess-bezogene Module, mod_php usw.) ausgeführt wird. Dadurch geht eine Abfrage für dynamischen Inhalt nie an mod_aclr2, da die Abfrage durch höherstufige Handler von bestimmten Apache-Modulen (mod_php, mod_perl, mod_cgi usw.) verarbeitet wird. Die einzige Ausnahme stellen SSI-Abfragen dar: Sie erreichen mod_aclr2, werden aber von dort an die korrekten Handler umgeleitet. Wenn eine statische Datei angefordert wird, sucht mod_aclr2 nach dem genauen Dateispeicherort auf dem Dateisystem und sendet diesen an nginx.
  • mod_rpaf oder mod_remoteip Für Apache haben alle Clients dieselbe IP-Adresse, nämlich die Adresse des nginx-Servers (siehe Diagramm oben). Dies führt zu Problemen bei Websites und Webanwendungen, die Client-IP-Adressen für die Authentifizierung oder zu Statistikzwecken verwenden. Mit mod_rpaf (in Apache 2.2) oder mod_remoteip (in Apache 2.4) können diese Probleme gelöst werden, indem die IP-Adresse des nginx-Servers in allen Anforderungen durch die Client-IP-Adresse ersetzt wird. Genauer betrachtet, verwendet das Modul den speziellen Header X-Forwarded-For, in den nginx eine IP-Adresse eines Clients einträgt.

Schauen wir uns einmal näher an, wie Plesk Abfragen für statischen und dynamischen Content mithilfe dieser Module verarbeitet.

Die Verarbeitungsreihenfolge einer HTTP-Abfrage für eine statische Datei sieht wie folgt aus (siehe Diagramm):

  1. Ein Client sendet eine Abfrage an einen Webserver.
  2. nginx fügt der Abfrage die Header X-Accel-Internal (von mod_aclr2 verwendet) und X-Forwarded-For (enthält die IP-Adresse des Clients) hinzu und sendet die Abfrage an Apache.
  3. Apache empfängt die Abfrage und beginnt deren Verarbeitung durch die registrierten Handler (wendet .htaccess-Konfiguration, URL-Rewrite usw. an). In diesem Schritt ersetzt mod_rpaf die IP-Adresse des nginx-Servers in der Apache-Variable REMOTE_ADDR durch die Adresse des Clients aus dem Header X-Forwarded-For.
  4. Nach Bearbeitung der Abfrage durch alle registrierten Handler erreicht sie mod_aclr2. Der Handler überprüft, ob der Header X-Accel-Internal vorhanden ist. Wenn der Header vorhanden ist, sendet das Modul eine Antwort mit der Content-Länge Null und dem Header X-Accel-Redirect an nginx. Dieser Header enthält den genauen Speicherort der Datei, wie durch mod_aclr2 ermittelt.
  5. Sobald nginx die Antwort empfangen hat, wird die Datei lokalisiert und an den Client übermittelt.

Das nachfolgende Diagramm zeigt als Beispiel, wie Plesk die Abfrage für eine 2 KB große GIF-Datei verarbeitet.

image-request-for-static-content

Bei der Verarbeitung von Abfragen für dynamischen Content sind die Schritte 1 bis 3 identisch. Dann wird die Abfrage an den Handler des entsprechenden Apache-Moduls (mod_php, mod_perl, mod_cgi usw.) weitergeleitet. Die Abfrage erreicht nie mod_aclr2 (ausgenommen SSI-Anforderungen). Der Handler generiert eine Antwort und sendet sie an nginx, der die Antwort an den Client weitervermittelt. Das nachfolgende Diagramm zeigt, wie Plesk eine Abfrage für eine PHP-Datei verarbeitet.

image-request-for-dynamic-content

Installieren von nginx

Wenn Sie eine komplett neue Installation von Plesk durchführen, wird nginx standardmäßig aktiviert. Wenn Sie ein Upgrade von früheren Versionen durchführen, können Sie die Komponente „Nginx-Webserver“ jederzeit nach dem Upgrade unter Tools & Einstellungen > Updates (unter „Plesk“) > Komponenten hinzufügen hinzufügen. Sobald die Komponente hinzugefügt wurde, sollten Sie den Dienst Reverse-Proxy-Server (nginx) unter Tools & Einstellungen > Service-Verwaltung (unter „Serververwaltung“) starten.

Sie können die Version des installierten nginx-Servers unter Tools & Einstellungen > Serverkomponenten (unter „Serververwaltung“) einsehen.

image-nginx-version

Ausschalten von nginx

Wenn Sie zur Konfiguration mit einem einzigen Apache-Webserver zurückkehren wollen, müssen Sie den Service Reverse-Proxy-Server (nginx) beenden. Diese Aktion ist über Tools & Einstellungen > Service-Verwaltung (unter „Serververwaltung“) möglich.

image-stop-nginx

Um nginx wieder als Front-End-Webserver einzurichten, müssen Sie den Service Reverse Proxy Server (nginx) starten.

Bemerkung

Durch das Starten und Beenden des Services Reverse-Proxy-Server (nginx) wird nicht nur nginx gestartet bzw. beendet, sondern die Webserver-Konfiguration umgestellt (Kombination aus nginx und Apache oder nur Apache als Front-End-Webserver). Der Neustart funktioniert wie bei allen anderen Services: Der Service nginx wird neu gestartet.