Wie die Verbindung von Apache & Nginx bei Timeweb umgesetzt ist
Für viele Unternehmen ist die Kombination Nginx + Apache + PHP eine sehr gängige und verbreitete Verbindung, und Timeweb bildet da keine Ausnahme. Es kann jedoch interessant und nützlich sein zu verstehen, wie genau sie umgesetzt ist.

Die Verwendung einer solchen Kombination wird natürlich durch die Bedürfnisse unserer Kunden bestimmt. Sowohl Nginx als auch Apache spielen eine spezielle Rolle, jeder erfüllt eine bestimmte Aufgabe.
Die grundlegenden Einstellungen Apache werden in den Konfigurationsdateien von Apache selbst vorgenommen, während die Einstellungen für die Kundenseiten über die .htaccess-Datei. .htaccess ist eine Konfigurationsdatei, in der der Kunde selbst Regeln und das Verhalten des Webservers einstellen kann. Diese Einstellungen beziehen sich spezifisch auf seine Website. Zum Beispiel können Benutzer dank der Funktionalität von Apache den Modus innerhalb einer PHP-Version von mod_php auf mod_cgi ändern; Weiterleitungen, SEO-Optimierung, benutzerfreundliche URLs und bestimmte PHP-Limits können eingestellt werden.
Nginx wird als Proxy-Server verwendet, um den Verkehr zu Apache weiterzuleiten, und als einen Webserver um statische Inhalte bereitzustellen. Außerdem haben wir für Nginx Sicherheitsmodule entwickelt, die es ermöglichen, die Daten unserer Benutzer zu schützen, zum Beispiel durch die Trennung von Zugriffsrechten.
Stellen wir uns vor, ein Benutzer besucht die Website unseres Kunden. Zuerst gelangt der Benutzer zu Nginx, der statische Inhalte ausliefert. Das geschieht sofort. Wenn es dann um das Laden von PHP geht, leitet Nginx die Anfrage an Apache weiter. Und Apache generiert zusammen mit PHP den dynamischen Inhalt.
Besonderheiten der Kombination von Apache & Nginx bei Timeweb
In unserem virtuellen Hosting haben wir zwei Hauptbetriebsmodelle von Apache & Nginx umgesetzt: Shared und Dedicated.
Das Shared-Modell
Dieses Modell wird von den meisten Benutzern verwendet. Es zeichnet sich durch Einfachheit und Ressourcenschonung aus: Das Shared-Modell verwendet weniger Ressourcen, weshalb auch sein Tarif günstiger ist. Nach diesem Modell ist auf dem Server ein Nginx aktiv, der alle Benutzeranfragen bedient, sowie mehrere Instanzen von Apache.
Das Shared-Modell wurde lange Zeit verbessert: Schritt für Schritt haben wir Mängel behoben. Es ist bequem, dass es ohne Anpassungen des Quellcodes umgesetzt werden kann.

Shared-Modell
Dedicated-Modell
Dedicated erfordert mehr Ressourcen, daher ist ihr Tarif für Kunden teurer. Im Dedicated-Schema wird für jeden Kunden ein eigener, separater Apache gestartet. Die Ressourcen werden hier für den Kunden reserviert und ausschließlich zugewiesen. So funktioniert es: Auf dem Server gibt es mehrere PHP-Versionen. Wir unterstützen die Versionen 5.3, 5.4, 5.6, 7.1, 7.2, 7.3, 7.4. Für jede PHP-Version wird ein eigener Apache gestartet.

Dedicated-Schema
Sichere Zone. Zonen in Nginx konfigurieren
Früher haben wir für Nginx viele Zonen des geteilten Speichers (zone) verwendet – ein Block server für eine Domain. Eine solche Konfiguration erfordert viele Ressourcen, da für jede Website eine separate Zone erstellt wird. Da jedoch die meisten Websites in den Nginx-Einstellungen ähnlich sind, gelingt es, sie aufgrund der Verwendung der Directives map im Modul in eine Zone zu integrieren. ngx_http_map_module, die es ermöglichen, Zuordnungen zu definieren. Zum Beispiel haben wir eine Vorlagenzone, in die wir Variablen eingeben müssen: den Pfad zur Website, die PHP-Version, den Benutzer. So wurde das Lesen der Nginx-Konfiguration beschleunigt, also der Reload.
Eine solche Konfiguration hat die Ressourcen des Arbeitsspeichers erheblich gespart und die Leistung von Nginx verbessert.
Reload wird nicht funktionieren!
Im Shared-Schema haben wir die Notwendigkeit von Reloads für Apache bei Änderungen an den Website-Einstellungen beseitigt. Früher, wenn ein Kunde eine Domain hinzufügen oder die PHP-Version ändern wollte, war ein obligatorischer Reload von Apache erforderlich, was zu Verzögerungen bei den Antworten führte und sich negativ auf die Website-Leistung auswirkte.
Wir haben Reloads dadurch vermieden, dass wir dynamische Konfigurationen erstellt haben. Dank des (Apache-Modul) wird jeder Prozess von einem separaten Benutzer ausgeführt, was die Sicherheitsstufe erhöht. Diese Methode ermöglicht es, Benutzerdaten und document_root von Nginx an Apache2 zu übergeben. So enthält Apache keine Konfigurationen für Websites, sondern erhält sie dynamisch, und Reloads sind nicht mehr erforderlich.

Konfiguration des Shared-Schemas
Und wie sieht es mit Docker aus?
Viele Unternehmen sind auf ein containerbasiertes System umgestiegen. Timeweb prüft derzeit die Möglichkeit eines solchen Wechsels. Sicherlich gibt es in jeder Lösung Vor- und Nachteile.
Neben unbestreitbaren Vorteilen bietet das Containersystem dem Benutzer weniger Ressourcen. Bei Timeweb gibt es aufgrund des beschriebenen Hostingschemas keine Einschränkung beim Arbeitsspeicher. Der Benutzer erhält mehr Ressourcen als im Container. Darüber hinaus können Benutzer mehr Apache-Module laden.
Timeweb betreibt etwa 500.000 Websites. Wir tragen eine große Verantwortung und führen keine sofortigen, ungerechtfertigten Änderungen an der komplexen Architektur durch. Die Kombination Apache & Nginx ist zuverlässig und hat sich bewährt. Unsererseits streben wir die maximale Leistung durch einzigartige Konfigurationen an.
Für die qualitativ hochwertige und schnelle Verwaltung einer großen Anzahl von Websites ist die Verwendung einer typisierten und dynamischen Konfiguration von Apache und Nginx erforderlich. Dies ermöglicht eine einfache und schnelle Verwaltung einer großen Anzahl einheitlicher Server.
Quelle: habr.com
