Apache und Nginx. Verbunden durch eine Kette

Wie die Apache- und Nginx-Kombination in Timeweb implementiert wird

Für viele Unternehmen ist Nginx + Apache + PHP eine sehr typische und gängige Kombination, und Timeweb bildet da keine Ausnahme. Es kann jedoch interessant und nützlich sein, genau zu verstehen, wie es umgesetzt wird.

Apache und Nginx. Verbunden durch eine Kette

Der Einsatz einer solchen Kombination richtet sich natürlich nach den Bedürfnissen unserer Kunden. Sowohl Nginx als auch Apache spielen eine besondere Rolle, jeder löst ein spezifisches Problem.

Die Grundkonfiguration Apache werden in den Konfigurationsdateien von Apache selbst durchgeführt und Einstellungen für Client-Sites erfolgen über .htaccess-Datei. .htaccess ist eine Konfigurationsdatei, in der der Client die Regeln und das Verhalten des Webservers selbstständig konfigurieren kann. Diese Einstellung gilt speziell für seine Website. Dank der Apache-Funktionalität können Benutzer beispielsweise den Betriebsmodus innerhalb derselben PHP-Version von mod_php auf mod_cgi ändern; Sie können Weiterleitungen, SEO-Optimierung, praktische URLs und einige Einschränkungen für PHP einrichten.

Nginx Wird als Proxyserver zur Umleitung des Datenverkehrs an Apache und als Webserver zur Bereitstellung statischer Inhalte verwendet. Wir haben auch Sicherheitsmodule für Nginx entwickelt, die es uns ermöglichen, die Daten unserer Benutzer zu schützen, beispielsweise um Zugriffsrechte zu trennen.

Stellen wir uns vor, ein Benutzer besucht die Website unseres Kunden. Zunächst gelangt der Benutzer zu Nginx, das statische Inhalte bereitstellt. Es passiert sofort. Wenn es dann darum geht, PHP zu laden, leitet Nginx die Anfrage an Apache weiter. Und Apache generiert zusammen mit PHP bereits dynamische Inhalte.

Funktionen des Apache- und Nginx-Bundles in Timeweb

Unser virtuelles Hosting implementiert zwei Hauptbetriebsschemata für Apache und Nginx: Geteilt und engagiert.

Geteiltes Schema

Dieses Schema wird von den meisten Benutzern verwendet. Es zeichnet sich durch seine Einfachheit und Ressourcenintensität aus: Das Shared-System verbraucht weniger Ressourcen, weshalb sein Tarif günstiger ist. Nach diesem Schema läuft auf dem Server ein Nginx, der es ihm ermöglicht, alle Benutzeranfragen zu bedienen, und mehrere Instanzen von Apache.

Das Shared-System hat sich seit langem verbessert: Nach und nach haben wir die Mängel behoben. Praktischerweise kann dies erfolgen, ohne dass der Quellcode geändert werden muss.

Apache und Nginx. Verbunden durch eine Kette
Geteiltes Schema

Spezielles Schema

Dedicated benötigt mehr Ressourcen, daher ist der Tarif für Kunden teurer. Im dedizierten Schema erhält jeder Client seinen eigenen separaten Apache. Ressourcen sind hier für den Kunden reserviert, sie werden exklusiv zugewiesen. So funktioniert es: Auf dem Server sind mehrere PHP-Versionen vorhanden. Wir unterstützen die Versionen 5.3, 5.4, 5.6, 7.1, 7.2, 7.3, 7.4. Daher wird für jede PHP-Version ein eigener Apache gestartet.

Apache und Nginx. Verbunden durch eine Kette
Spezielles Schema

Sicherheitszone. Zonen in Nginx einrichten

Bisher haben wir für Nginx viele gemeinsame Speicherzonen (Zonen) verwendet – einen Serverblock pro Domäne. Dieses Setup erfordert viele Ressourcen, da für jede Site eine separate Zone erstellt wird. In den Nginx-Einstellungen sind die meisten Sites jedoch vom gleichen Typ, sodass sie dank der Verwendung von Kartenanweisungen im Modul in einer Zone platziert werden können ngx_http_map_module, mit denen Sie Korrespondenzen angeben können. Wir haben zum Beispiel eine Zonenvorlage, in der wir Variablen angeben müssen: Pfad zur Site, PHP-Version, Benutzer. Dadurch wurde das erneute Auslesen der Nginx-Konfiguration, also das Neuladen, beschleunigt.

Diese Konfiguration sparte erheblich RAM-Ressourcen und beschleunigte Nginx.

Neuladen funktioniert nicht!

Im Shared-Schema entfällt die Notwendigkeit, Apache beim Ändern der Website-Einstellungen neu zu laden. Wenn ein Kunde bisher eine Domain hinzufügen oder die PHP-Version ändern wollte, war ein obligatorisches Neuladen von Apache erforderlich, was zu Verzögerungen bei den Antworten führte und sich negativ auf die Leistung der Website auswirkte.

Wir haben das Nachladen vermieden, indem wir dynamische Konfigurationen erstellt haben. Dank an mpm-itk (Apache-Modul) läuft jeder Prozess als separater Benutzer, was das Sicherheitsniveau erhöht. Mit dieser Methode können Sie Daten über den Benutzer und sein document_root von Nginx an Apache2 übertragen. Somit enthält Apache keine Site-Konfigurationen, er empfängt sie dynamisch und ein erneutes Laden ist nicht mehr erforderlich.

Apache und Nginx. Verbunden durch eine Kette
Gemeinsame Schemakonfiguration

Was ist mit Docker?

Viele Unternehmen sind auf ein Container-basiertes System umgestiegen. Timeweb erwägt derzeit die Möglichkeit eines solchen Übergangs. Natürlich hat jede Entscheidung Vor- und Nachteile.

Neben unbestreitbaren Vorteilen bietet das Containersystem dem Benutzer weniger Ressourcen. In Timeweb hat der Benutzer dank des beschriebenen Hosting-Schemas keine Einschränkungen hinsichtlich des Arbeitsspeichers. Es erhält mehr Ressourcen als im Container. Darüber hinaus hat der Benutzer möglicherweise weitere Apache-Module geladen.

Timeweb betreibt etwa 500 Websites. Wir übernehmen große Verantwortung und nehmen keine sofortigen, ungerechtfertigten Änderungen an komplexer Architektur vor. Die Kombination aus Apache und Nginx ist zuverlässig und bewährt. Wir wiederum versuchen, durch einzigartige Konfigurationen maximale Leistung zu erreichen.

Für einen qualitativ hochwertigen und schnellen Betrieb einer großen Anzahl von Websites müssen Sie eine Vorlage und eine dynamische Konfiguration von Apache und Nginx verwenden. Damit können Sie eine große Anzahl gleichartiger Server einfach und schnell verwalten.

Source: habr.com

Kommentar hinzufügen