Back to blog
Tips

Apache vs. Nginx: Welcher ist der bessere Webserver?

Juni 18, 2020

Wenn es um die Bereitstellung von Webseiten für Besucher im Internet geht, gibt es nur wenige Serverprogramme, die Apache und Nginx, den beiden beliebtesten Webservern, das Wasser reichen können. 70 % des Marktes besteht nur aus diesen beiden Open-Source-Konkurrenten, und obwohl sie dieselben Aufgaben erfüllen, sind sie nicht vollständig austauschbar. Jeder von ihnen hat bestimmte Vorteile, wenn es um bestimmte Arbeitslasten und Inhalte geht, so dass die endgültige Wahl meist von diesen Faktoren abhängt. Lange Zeit dominierte der Apache den Markt, doch mit der wachsenden Popularität von Nginx befinden sich die beiden in einer Patt-Situation. Um herauszufinden, welcher Webserver sich in der Debatte zwischen Apache und Nginx durchsetzt, müssen wir zunächst einen kurzen Blick auf den Hintergrund und die Eigenschaften der beiden werfen.

Apache

Dieser 1995 von Robert McCool entwickelte Webserver ist seit 1996 der am häufigsten verwendete Server und Bestandteil des weit verbreiteten LAMP-Stacks. Er wird von der Apache Foundation gewartet, ist gut dokumentiert und wird unterstützt. Er bietet rund 60 offizielle und viele inoffizielle Module, die seine Funktionen ergänzen und verbessern.

Im Laufe der Jahre mussten sich die Entwickler des Apache neue Wege zur Bearbeitung von Webanfragen einfallen lassen. Dank dieser Änderungen verwendet dieser Webserver eine verbesserte Verarbeitungsmethodik und wurde zu einem insgesamt abgerundeten Programm. Er hat drei Haupt-Multi-Processing-Module:

  • Mpm_preforke;
  • Mpm_worker;
  • Mpm_event.

Mit diesen können Sie verschiedene dynamische Verbindungen auswählen und verwalten.

Vorinstallierte Linux-Distributionen

Einer der Gründe für den schnellen Aufstieg von Apache ist die Tatsache, dass die wichtigsten Linux-Distributionen wie Ubuntu, CentOS, Red Hat usw. vorinstalliert sind. Linux ist wahrscheinlich das meistgenutzte Betriebssystem, wenn es um VPS-Hosting im Allgemeinen geht. Daher wird ein Webserver, der Betriebssysteme unterstützt und mit diesen vorinstalliert ist, definitiv den Markt dominieren.

.htaccess

Eine weitere Sache, die Sie bemerken können, wenn Sie tiefer in die Debatte zwischen Apache und Nginx eintauchen, ist, dass Apache .htaccess verwendet, während Nginx es nicht unterstützt. Und da es diese Datei schon so lange gibt, gibt es viele Anleitungen für die Arbeit mit dieser Datei. Im Wesentlichen können Sie einstellen, wie eingehende Anfragen und andere Prozesse behandelt werden sollen, z. B:

  • URL-Umschreibungen;
  • Umleitungsregeln;
  • Speichergrenzen;
  • maximale Dateigrößen beim Hochladen;
  • cookies;
  • Verzeichnisschutz;
  • Abfrage-String-Manipulationen;
  • Kodierung und Cache-Control-Header.

Außerdem können Benutzer für jede Ebene und jedes Verzeichnis im Verzeichnisbaum eigene .htaccess-Dateien erstellen und konfigurieren. Dies bedeutet, dass Sie bestimmte Details in geschlossenen Umgebungen ändern können, ohne die globalen Serverkonfigurationen zu verändern, was besonders für Shared-Hosting-Umgebungen von Vorteil ist.

Der Nachteil dabei ist, dass der Apache für jede einzelne Ressourcenanforderung das gesamte Verzeichnis durchgehen muss, bis er das Stammverzeichnis des Servers erreicht. Nach der Verarbeitung der Dateien muss er sich für jedes Verzeichnis neu konfigurieren, und danach muss PHP noch die entsprechenden Stacks ausführen und MySQL muss die Webseite zusammenstellen. Darunter leidet die Leistung.

Dynamisches Modulsystem

Ein weiterer Punkt, der diesen Webserver in der Frage Apache vs. Nginx hervorhebt, sind die Module. Während beide über diese verfügen, ist der Apache ein wenig anders, da er es den Benutzern erlaubt, sie direkt nach der Installation des Webservers zu installieren und zu aktivieren oder zu deaktivieren. Sie können dies mit zwei einfachen Befehlen (a2enmod & a2dismod) tun, ohne Konfigurationsdateien bearbeiten zu müssen.

Nginx

Dieser Webserver wurde erstmals 2004 von dem russischen Entwickler Igor Sysoev vorgestellt und wurde entwickelt, um die Leistungseinschränkungen von Apache zu beheben. Sie können zwischen zwei Versionen wählen: Nginx Plus, das über zusätzliche Unternehmensfunktionen verfügt, und die Standard-Open-Source-Version mit einer BSD-ähnlichen Lizenz.

Zunächst wurde er hauptsächlich als Load-Balancer, Reverse Proxy oder zur Bereitstellung statischer Dateien zusammen mit Apache verwendet. Aber mit der Weiterentwicklung begannen die Benutzer, Apache durch diesen Webserver zu ersetzen. Er kann Tausende von Verbindungen gleichzeitig verarbeiten und benötigt nicht viele Ressourcen, da er nicht für jede Verbindung zusätzliche Prozesse einrichtet.

Konfiguration

Nginx verwendet kein Konfigurationssystem, was ihn natürlich schneller und effizienter macht. Da es keine Konfigurationen auf Verzeichnisebene gibt, kann jede Anfrage schneller bearbeitet werden, was die Gesamtleistung des Webservers verbessert. Auf der anderen Seite ist es nicht sehr günstig, wenn es um gemeinsam genutzte Hosting-Umgebungen geht. Aus diesem Grund bevorzugen Benutzer, die mit Windows- und Linux-VPS arbeiten, in der Regel Nginx.

Statischer Inhalt

Ein weiterer Aspekt, der in der Debatte zwischen Apache und Nginx hervorsticht, ist, dass Nginx dynamische Inhalte nicht nativ verarbeiten kann. Wenn er Anfragen dafür erhält, leitet der Webserver sie an einen externen Prozessor weiter und erhält nur den gerenderten Inhalt zurück, was beim Laden großer Websites mit vielen dynamischen Inhalten zu erheblichen Verzögerungen führen kann. Andererseits unterstützt er Handler für dynamische Inhalte wie FastCGI und SCGI.

Wie sie sich unterscheiden

Caching

Grundsätzlich ermöglicht das Caching die Wiederverwendung von zuvor abgerufenen Daten, indem diese in einer Hochgeschwindigkeits-Datenspeicherschicht gespeichert werden. Dies ermöglicht schnellere Ladezeiten der Website, da der Server nicht jede wiederholte Webanforderung desselben Browsers für dieselbe Seite verarbeiten muss, da sie bereits vorbereitet ist.

Da Nginx bei der Bereitstellung statischer Inhalte sehr effizient ist, braucht er dafür eigentlich kein Caching. Da aber viele Benutzer diesen Server immer noch zusammen mit dynamischen Inhalten verwenden, verfügt er über FastCGI-Caching, das mit einer Standardinstallation nur für diesen Zweck geliefert wird.

Der Apache verfügt über das Standardmodul mod_cache, das bei Konflikten mit anderen Modulen zu Problemen führen kann. Er verfügt auch über den HTTP-Beschleuniger Varnish, der etwas besser funktioniert als das Modul.

Bearbeitung von Anfragen

Der größte Unterschied im Kampf zwischen Apache und Nginx ist die Art und Weise, wie beide Server Anfragen bearbeiten. Wie bereits erwähnt, verwendet der Apache Multi-Processing-Module. Sie binden sich an die Netzwerk-Ports des Rechners, nehmen Anfragen an und senden Arbeitsprozesse zur Bearbeitung der Anfragen.

Das älteste und bisher verwendete MPM war effizient, da es bei jeder Anfrage einen neuen Prozess mit einem Thread erzeugte und den PHP-Interpreter in jeden einzelnen Prozess einbettete. Die Module mpm_worker und mpm_event haben dies durch den Wechsel zu php-fpm behoben.

Die Worker-Prozesse von Nginx hingegen können Tausende von eingehenden Verbindungen pro Worker verarbeiten, was bedeutet, dass nicht für jede Anfrage neue Threads und Prozesse erstellt werden. Deshalb ist dieser Webserver im Allgemeinen besser geeignet, um eine Vielzahl von Anfragen zu verarbeiten, ohne die Gesamtleistung zu beeinträchtigen.

Statische und dynamische Inhalte

Der Apache kann statische Inhalte über seine herkömmlichen dateibasierten Methoden verarbeiten. Er verarbeitet und serviert auch dynamische Inhalte über seinen internen dynamischen Prozessor, ohne sie an externe Komponenten senden zu müssen.

Nginx eignet sich zwar hervorragend für die Bereitstellung statischer Inhalte, kann aber dynamische Inhalte nicht nativ verarbeiten. Diese Kommunikation muss konfiguriert werden und zusätzliche Handler müssen dafür aktiviert werden.

Letztendlich läuft die richtige Antwort auf die Frage Apache vs. Nginx auf die Präferenz des Benutzers hinaus. Beide sind großartige Optionen, aber für unterschiedliche Zwecke. Apache ist besser für die Bereitstellung dynamischer Inhalte geeignet und ermöglicht die Konfiguration pro Verzeichnis. Nginx ist eher für statische Websites und hohe Arbeitslasten geeignet. Wenn Sie wirklich wollen, können Sie sogar beide verwenden, indem Sie Nginx als Reverse-Proxy vor Apache einsetzen.