Apache vs. nginx

Apache und nginx sind die mit zwei Abstand beliebtesten Webserver im Internet. Laut Ranking findet Apache bei 45,6% der Website Verwendung, während nginx von 39,6% der Websites verwendet wird.

Betrachtet man die wirklich erfolgreichen Websites mit hohen Besucheraufkommen, kann nginx einen deutlichen Abstand vor Apache erhalten: Die Top 10.000 Websites nutzen zu 65% nginx und nur noch zu 20% Apache, Tendenz fallend.

Das Fazit vorab:

  • nginx ist durch sein schlankes und schnelles Design insbesondere zur Auslieferung statischer Inhalte (Bilder, CSS, JavaScript-Files) geeignet.
  • Für dynamische Inhalte, z.B. per PHP, Perl oder Python, liegt die Performance von Apache (richtig konfiguriert) gleich auf mit nginx. Hier ist das Bottleneck die Anwendung zur Generierung der dynamischen Inhalte.
  • Apache hat einen Vorteil durch seine Einsteigerfreundlichkeit und durch die einfachere Konfiguration.

 

Der Apache-Webserver

Der Apache-Webserver ist ein Open-Source-Projekt und hat 1995 das Licht der Welt erblickt. Kurz darauf, 1996, wurde der Apache-Webserver der beliebteste Webserver im Internet und konnte bis heute seinen ersten Platz behalten. Seit 1999 übernimmt die Apache Software Foundation die Weiterentwicklung des Servers.

Apache wird von vielen Administratoren aufgrund der langen Geschichte, der guten Dokumentationen, dem umfangreichen Support und den flexiblen Einsatzmöglichkeiten verwendet. Der Webserver lässt sich durch ein Modul-System flexibel erweitern, womit Skripte diverser Programmiersprachen (auch PHP) auf dem Server ausgeführt werden können.

Der nginx-Webserver

nginx_logo

Der nginx-Webserver ist deutlich jünger als das Apache-Projekt und wurde erst 2004 öffentlich verfügbar gemacht. Zu der Zeit war das Internet bereits deutlich gewachsen und populäre Seiten mussten zehntausende von Verbindungen gleichzeitig bearbeiten (dies ist bekannt als das C10K Problem). Um diese hohe Anzahl an Verbindungen bedienen zu können, setzt der nginx-Server auf eine gänzlich andere Architektur als der Apache-Webserver. Nginx verwendet eine asychron, event-basierte Architektur. Durch diese Architektur lassen sich effizient eine hohe Anzahl an Anfragen an den Webserver abarbeiten. Selbst bei populären Websites erhält jeder Besucher so eine rasche Antwort des Servers.

Die Beliebtheit von nginx ist seit dem Release jedes Jahr weiter gestiegen und wie im obigen Ranking angegeben, nutzen mittlerweile die meisten der Top 10.000 Websites einen nginx Webserver. Nginx ist exzellent, um statischen Content wie Bilder, JavaScript, CSS-Stylesheets etc. auszuliefern. Für dynamischen Content, z.B. von PHP-Scripts, wird die Anfrage dazu an das entsprechende Programm ausgelagert, im Fall von PHP an den PHP-Interpreter.

Apache bietet ab der 2.4 Version allerdings das mpm_event_modul an, mit dem eine sehr ähnliche Architektur umgesetzt wird wie beim nginx-Webserver. Der Unterschied zwischen nginx und einem gute konfigurierten Apache Server mit mpm_event_modul nimmt ab.

Apache vs. nginx – Vor- und Nachteile

Die großen Vorteile von nginx liegen vorallem beim Ausliefern statischer Inhalt:

  • nginx ist deutlich schneller in dem Ausliefern statischer Inhalte (Bilder, CSS, JavaScript etc.) und kann zehntausende von Anfragen parallel abarbeiten. In Benchmarks is nginx für statische Inhalte ca. doppelt so schnell wie ein Apache 2.4 Webserver mit mpm_event_modul.
  • Ohne das mpm_event_modul, fällt Apache gegenüber nginx deutlich zurück, denn dann muss für jede Anfrage ein neuer Prozess bzw. Threads gestartet werden. Dies macht den Apache Server erheblich langsamer und Ressourcenintensiver

Bob Ippolito berichtet auf der TurboGears Mailing List

I currently have nginx doing reverse proxy of over tens of millions of HTTP requests per day (thats a few hundred per second) on a *single server*. At peak load it uses about 15MB RAM and 10% CPU on my particular configuration (FreeBSD 6).

Under the same kind of load, apache falls over (after using 1000 or so processes and god knows how much RAM), pound falls over (too many threads, and using 400MB+ of RAM for all the thread stacks), and lighty *leaks* more than 20MB per hour (and uses more CPU, but not significantly more).

Dieser Erfahrungbericht stammt allerdings aus dem Jahr 2006, als Apache noch nicht optimiert war für die Anforderungen besucherstarke Websites. Heute ist der Unterschied deutlich geringer.

Aurimas Mikalauska hat 2015 den Apache mit dem nginx-Webserver verglichen zum Ausliefern einer 150 KB Bilddatei. Nachfolgend das Ergebnis:

 

apache_nginx_static_content

Nginx konnte in diesem Punkt deutlich gewinnen und doppelt soviele Anfragen pro Sekunde bearbeiten wie ein Apache Webserver.

Aber anders sieht es aus bei dynamischen Inhalten die beispielsweise per PHP, PERL oder Python erzeugt werden.  Hierbei ist die Performance von nginx und Apache, sofern richtig konfiguriert, identisch:

Bei der Ausführung eines PHP-Scripts konnten beide Webserver 108 Anfragen pro Sekunden bearbeiten. Der Grund für das Ergebnis ist einfach: Die meisten Ressourcen benötigt der PHP-Interpreter um den Code auszuführen, die Datenbank abzufragen und die Ausgabe zu erzeugen. Da ist es recht egal ob nun Apache oder Nginx-Webserver verwendet wird, der entscheidene Bottleneck ist und bleibt der Code der dynamischen Webanwendung.

Sofern ihr hauptsächlich statischen Content habt, bietet sich nginx an. Sofern ihr hauptsächlich dynamischen Content habt bzw. die meiste Rechenzeit zur Erzeugung des dynamischen Content verwendet wird, ist es egal ob Apache oder nginx zum Einsatz kommt.

Ein Nachteil von nginx sollte hier nicht unerwähnt bleiben: Apache bietet das beliebte .htaccess System an, um auf Ordnerebene gewisse Konfigurationen vorzunehmen. Mittels .htaccess lässt sich ein Passwortschutz einrichten oder dynamische URLs ins menschenlesbare URLs umschreiben. Nginx hat diese Möglichkeit nicht und bietet auch keine Alternative an, um auf Ordner-Ebene die Konfiguration zu ändern. Dies macht den Einsatz von nginx im Shared Webhosting-Bereich schwierig, da dort die Kunden keine dieser Einstellmöglichkeiten vornehmen können. Dies erklärt auch, warum fast alle Webhosting-Anbieter auf Apache nutzen.

Apache und nginx in Kombination

Apache und nginx lässt sich ebenfalls in Kombination verwenden und somit kann man das Beste aus beiden Welten erhalten. Hierzu schaltet man eine nginx-Webserver als Reverse Proxy vor den Apache-Server. Eingehende Verbindungen gehen hierbei an den nginx-Webserver.

Der nginx-Webserver liefert dann den statischen Content (Bilder, CSS, JavaScript) der Website aus. Für dynamischen Content, z.B. von PHP-Scripts, wird die Anfrage weiter an den Apache-Server gereicht. Hierbei kann man dann den Konfigurationsvorteil von Apache nutzen und z.B. gewohnt seine .htaccess-Datei verwenden.

Ebenfalls lässt sich nginx so einfach als Load-Balancer verwenden. Eingehende Anfragen für statische Inhalte werden vom nginx-Server bedient und dynamischer Content wird von einem Pool von Apache-Webserver bearbeitet.

Ganz einfach ist so eine Konfiguration allerdings nicht und man sollte sie einem erfahrenem Systemadministrator überlassen.

Webhoster die nginx anbieten

Der Anteil an Webhoster, die einen nginx-Webserver für erschwingliche Preise anbieten ist leider noch klein. 1&1 Managed Cloud Hosting bietet einen günstigen Managed vServer an, der mit Nginx, MariaDB und PHP7 ausgestattet ist für eine extra hohe Performance.

Ebenfalls nutzt zur Zeit webgo einen nginx-Proxy, um Zugriffszeiten zu reduzieren. Zur Auslieferung dynamischer Inhalte wird aber weiterhin auf einen Apache-Server zurückgegriffen. Somit erhält man das Beste aus beiden Welten.

Falls ihr weitere Webhosting-Anbieter kennt die nginx anbieten, schickt mir bitte eine E-Mail an [email protected].