nginx als Alternative zu Apache 2: Effektiver Webserver mit hoher Geschwindigkeit

Autor:   |  12.09.2019


nginx WebserverEin Webserver hat die Aufgabe, die Kommunikation zwischen einem Server (Host) und einer Verbindung von außen (Client) zu übernehmen und als Schnittstelle zwischen beiden zu dienen. Er nimmt die Anfrage entgegen, leitet sie an das eigene System weiter und sendet die Antwort an den verbundenen Computer zurück. Bei der Software nginx handelt es sich um einen sehr flexiblen, effizienten und stabilen Webserver, der auf die Bedürfnisse von großen Webseiten mit zahlreichen parallelen Verbindungen und eine parallele Verarbeitung der Informationen zugeschnitten ist. Bei der Geschwindigkeit zeigt er große Vorteile gegenüber dem Marktführer Apache 2, da er ein anderes Konzept bei der Verwaltung und der Bearbeitung der einzelnen Prozesse verwendet. Beide Systeme haben wir bereits in diesem Artikel mit einander verglichen.

 

Inhalt:

Der Webserver nginx als Antwort auf Nachteile von Apache 2
Ein spezieller Webserver für Internetseiten mit extrem hohen Besucherzahlen
Die technische Funktionsweise von nginx als Webserver
Gemeinsamkeiten zwischen nginx und Apache 2 - ein modularer Aufbau

Der Webserver nginx als Antwort auf Nachteile von Apache 2

Um die Besonderheiten und die speziellen Vorteile von nginx zu verstehen, hilft es, seinen Hintergrund und seine Entstehung zu betrachten. Der Webserver wurde in seiner ersten Version im Oktober 2004 veröffentlicht und stammt von dem russischen Programmierer Igor Sysoev, der zehn Jahre zuvor sein Studium der Informatik an der Staatlichen Technischen Universität Moskau erfolgreich abgeschlossen hatte. Sysoev schnitt seinen Webserver nginx auf die Bedürfnisse der russischen Suchmaschine Rambler zu, für dessen Situation Apache 2, das bislang quasi ein Monopol innehatte, ungeeignet war.

Der Grund liegt in der Art und Weise, in der Apache 2 eingehende Verbindungen verwaltet: Der Webserver startet für jeden verbundenen Client einen eigenen Prozess, der seinerseits sowohl Speicherplatz wie Rechenperformance in Anspruch nimmt und diese exklusiv für sich reserviert. Bei einer geringen bis mittleren Anzahl von Anfragen stellt dies kein Problem dar, bei sehr vielen parallelen Verbindungen sinkt die Effizienz und damit die Geschwindigkeit wegen des steigenden Aufwands für die Verwaltung der Prozesse jedoch stetig. Konkret bedeutet dies: Je mehr Besucher gleichzeitig eine Webseite mit Apache 2 als Webserver aufrufen, desto mehr Ressourcen benötigt das System für jeden einzelnen Besucher.

Ein spezieller Webserver für Internetseiten mit extrem hohen Besucherzahlen

Für eine Webseite mit einem extrem hohen Aufkommen an Besuchern und gleichzeitig mit relativ kurzer Verweildauer - Bedingungen, die nahezu perfekt auf eine Suchmaschine zutreffen - ist das Konzept von Apache 2 denkbar schlecht geeignet. Um deren Anforderungen zu erfüllen, muss ein Webserver vor allem folgende Bedingungen erfüllen:

  • Sehr hohe Effizienz in der Speicherverwaltung
  • Parallele Bearbeitung von zahlreichen Verbindungen
  • Hohe Geschwindigkeit bei der Übergabe von Informationen
  • Flexibles Design für Differenzierung von Anfragen z. B. nach Herkunft
  • Hohe Performance der Software
  • Möglichkeit zur Erweiterung um zusätzliche Funktionen
  • Unterstützung für Verteilung der Last auf mehrere Server
  • Kompatibilität mit unterschiedlichen Skriptsprachen
  • Hohe Stabilität selbst unter kritischen Bedingungen und bei knappen Ressourcen

Aus diesen Anforderungen entstand nginx als modularer Webserver, der auch bei hohen Lasten und simultanen Anfragen von weit über 10.000 oder 100.000 Clients diese effizient verwaltet und mit hoher Geschwindigkeit bearbeitet.

Die technische Funktionsweise von nginx als Webserver

Ein wesentlicher Unterschied zwischen nginx und Apache 2 besteht in der Verwaltung der Prozesse, die die Verbindung zu den Clients aufrechterhalten, bis die Kommunikation von einer Seite beendet wird. Apache 2 startet für jeden Client einen eigenen Kindprozess, um ihn von den anderen zu isolieren und dadurch Stabilität zu schaffen. Im Gegensatz dazu bündelt der Webserver nginx die Anfragen in einer Instanz und ist in der Lage, mehrere Tausend von ihnen durch einen einzigen Kindprozess zu verarbeiten. Dadurch beseitigt es einen der größten Nachteile von Apache 2 - den mit Zunahme der Besucher exponentiell wachsenden Rechenaufwand, der ausschließlich für die Ressourcenverwaltung benötigt wird und den Webserver bei Geschwindigkeit und Effizienz immer stärker einschränkt.

Gemeinsamkeiten zwischen nginx und Apache 2 - ein modularer Aufbau

Um die Performance der Software zu optimieren, muss ein Webserver in seiner Basis möglichst schlank sein und sparsam mit den vorhandenen Ressourcen umgehen. Gleichzeitig sollte er sich an unterschiedliche Umgebungen und Aufgaben anpassen können, um die notwendige Flexibilität für wechselnde Bedingungen und Herausforderungen zu gewährleisten. Dies erreichen sowohl Apache 2 wie auch nginx durch einen modularen Aufbau, bei dem das Hauptprogramm je nach Bedarf durch unterschiedliche Erweiterungen individualisiert und um unterschiedliche Funktionen und Fähigkeiten ergänzt werden kann. Diese Module umfassen zahlreiche unterschiedliche Kategorien und dienen speziellen Zwecken wie zum Beispiel:

  • Lokalisierung: Verarbeitung von Anfragen entsprechend dem Standort des Clients
  • Interfaces: Anbindung an externe Interpreter wie Skriptsprachen
  • Kompression: Effizienter Datenverkehr durch Komprimieren der Information
  • Multimedia: Auslieferung von Bildern, Videos oder Streams über spezielle Protokolle
  • Sicherheit: Identifizierung und Authentifizierung von Clients
  • Verschlüsselung: Anwendung von sicherer Kryptografie wie SSL und TLS
  • Monitoring: Überwachung und Logging für den Webserver
  • Um- und Weiterleitung: Interne Transkribierung von Adressen nach definierten Regeln
  • Kommunikation: Erweiterung um Unterstützung für Mail- oder Chatprotokolle

Zahlreiche Module wie etwa die Verschlüsselung entsprechend dem SSL-Standard gehören fest zu der Grundausstattung von nginx, andere müssen auf Wunsch in den Webserver integriert werden. Dabei zeigt sich ein weiterer, deutlicher Unterschied zwischen nginx und Apache 2. Wegen seines statischen Aufbaus unterstützt nginx - von wenigen Ausnahmen abgesehen - nicht das nachträgliche Laden von Modulen als externe Programmteile. Sie müssen bei der Kompilation von nginx bereits fest integriert werden, während Apache 2 diese unabhängig von seinem Kern zu einem beliebigen Zeitpunkt einfügt, aktiviert oder entfernt.

Foto: dlohner pixabay.com