Apache oder nginx? Welcher Webserver eignet sich wofür?

Facebook hat es getan, Sourceforge ebenso und Intel zog nach. Alle drei haben eine Gemeinsamkeit: Sie werden mit nginx betrieben. Apache wird immer öfter als Bremshebel in Sachen Performance bezeichnet und so ist es nicht verwunderlich, dass immer mehr große Webportale, aber auch kleinere Seiten auf nginx umstellen. Wir wollen in diesem Artikel kurz erläutern, warum sich ein Umstieg lohnen könnte und wo die gravierendsten Unterschiede zwischen Apache und nginx liegen.

Im Sinne der Performance – Apache vs nginx

Oft liest man, dass Apache nicht sehr stark sei, was die Performance angeht. Gerade bei schwach aufgestellten vServern kann es zu Leistungseinbußen kommen, denn einen Großteil davon benötigt Apache selbst. Grund hierfür sind die Programmierung und die Struktur bzw. die Architektur, die Apache zu einem Slowburner unter den Webservern macht. In folgenden Bereichen merkt man die deutliche Verzögerung im Ablauf:

  • Auslieferung von statischen Dateien (Bilder, CSS, JS)
  • Bearbeitung vieler gleichzeitiger Requests

Sobald ein User eine Webseite aufruft und die Inhalte geladen werden, liefert Apache zwar schnell die dynamische PHP Datei aus, bleibt bei den statischen Dateien aber auf der Strecke. Dies sorgt für Leistungseinbußen.

nginx als Alternative zu Apache – Darum sollte man es ausprobieren

Apache läuft Workerprozessbasiert. Das bedeutet, dass jeder Request einen eigenen Workerprozess bzw. eigene Threads nutzt. Das fatale ist, dass bei jedem dieser Prozesse die gesamte Familie aller installierten Apache Module integriert ist und das unabhängig davon, um welche Art Request es sich handelt. Das dies Rechenleistung in Anspruch nimmt, brauchen wir nicht erst zu erwähnen. Im Endeffekt bedeutet dies zusätzlich, dass das PHP Modul grundsätzlich an jeden Prozess gekoppelt wird und dabei kommt es nicht darauf an, ob ein Bild angefordert wurde, oder eine Textdatei. Wir schätzen, dass jeder Request dadurch mehr als 25 MB im Speicher belegt, was deutlich zu viel ist, vor allem für schwächere Server.

nginx sorgt hier für Abhilfe. Es nutzt einen eventbasierten Ablauf. Jeder Request führt bei nginx nicht zu einem kompletten Prozess, sondern lediglich zu einem Event. Es wandelt die Requests in Events um. Die Module, Prozesse und Threads reagieren nur vereinzelt auf Events und zwar nur dann, wenn sie auch gebraucht werden. Das sorgt für ein deutliches ressourcenschonenderes Arbeiten. Im Vergleich zum Apache Webserver, könnte nginx mit 25 MB satte 100.000 HTTP Requests abarbeiten.

Der sogenannte Slashdot-Effekt tritt bei nginx übrigens auch nicht auf, denn anders als beim Apache Webserver schleust es die Anfragen per Event durch eine Warteschlange. Apache würde stattdessen für jede Anfrage einen Workerprozess starten und wäre damit früher oder später komplett überlastet.

Wie leistungsstark ist ngninx im Gegensatz zu Apache?

Tests auf verschiedenen Servern haben ergeben, dass Apache bereits deutlich früher die Segel streckt, als nginx. Im Test wurden 10.000 Anfragen gestellt, von denen es maximal 1000 gleichzeitig auf den Server abgesehen hatten. Der Apache Webserver hat bereits nach 4.400 Anfragen aufgegeben, während nginx die 10.000 Anfragen locker abgearbeitet hat und scheinbar keinerlei Anstrengung dabei verspürte. Ein beachtliches Ergebnis. Grundsätzlich ergibt sich aus diversen verschiedenen Tests ein Leistungsverhältnis von 1:10, vergleich man Apache mit nginx.

HTACCESS Dateien und die Leistung: Auch hier hat nginx die Nase vorn.

Apache macht bei der Abfrage bestimmter Dateien einen großen Fehler. Liegt die Datei weit unten in einem verschachtelten Verzeichnisbaum, wird in jedem Verzeichnis geprüft, ob eine htaccess Datei vorhanden ist. Das sorgt für eine sehr große Verschwendung von Rechenleistung und führt zu deutlichen Verzögerungen.

nginx arbeitet komplett anders. Die Konfiguration findet bei diesem Webserver über eine fixe Konfigurations-Datei statt, die sich außerhalb des Webroots befindet. Hierin ist alles enthalten, was nginx wissen muss. Die Config-Datei ist permanent im Arbeitsspeicher des Servers vorhanden, sodass die ständige Überprüfung der Unterverzeichnisse komplett entfällt. Wer hier befürchtet, eine komplett neue Config-Datei erstellen zu müssen, darf gerne auf einen der vorhandenen htaccess Konverter zurückgreifen. Hiermit lassen sich htaccess Files mit wenigen Klicks in nginx Config-Dateien umwandeln.

Unser Fazit:

Wer nicht komplett auf nginx umsteigen will, kann den Webserver auch als Reverse Proxy verwenden, um Apache deutlich zu entlasten. Ansonsten ist eine Installation auf jeden Fall zu empfehlen. Besonders trafficstarke Webseiten kommen im Prinzip gar nicht drum herum, denn die Rechenleistung, die Apache vom Server fordert ist 10 x so hoch, wie bei nginx. Kleinere Webseiten mit wenig Besuchern können selbstverständlich weiter mit Apache laufen. Hier gilt es einfach abzuwägen, ab wann ein Umstieg sich spürbar positiv auf die Performance auswirkt.