nginx – Der kleine Webserver

Was ist „nginx“?

nginx (gesprochen „Engine-X“) ist ein von Igor Sysoev geschriebener Server, der üblicherweise als HTTP Server, Reverse Proxy Server und Mail Proxy Server eingesetzt wird.
nginx hat in den letzten Jahren deutlich an Beliebtheit zugenommen. Laut Netcraft werden knapp 15% aller Webseiten mit nginx ausgeliefert und der Webserver liegt somit auf Platz 3 hinter Apache (40%) und Microsoft IIS (28%).

Bekannte Seiten, die nginx einsetzen, sind u.a. der Video-On-Demand Streamingdienst Netflix, WordPress, FastMail, SoundCloud und GitHub. nginx wird unter der FreeBSD-Lizenz vertrieben (2-Klausel BSD-Lizenz) und ist somit GPL kompatibel, jedoch keine Copyleft Lizenz.

Funktionen:

Der Webserver nginx zeichnet sich besonders durch seinen geringen Bedarf an Hauptspeicher und CPU bei vielen gleichzeitigen Verbindungen aus. Erreicht wird es dadurch, dass nginx die Anfragen Event basierend/asynchron verarbeitet im Gegensatz zu Apaches synchronem prozessbasierendem Modell. Der Vorteil an der asynchronen Verarbeitung ist, dass nur wenige gleichzeitiger Prozesse oder Threads für viele gleichzeitige Anfragen benötigt werden.
Dadurch kann nginx mehrere tausend Anfragen mit nur wenig RAM gleichzeitig bearbeiten, während Apache für das gleiche wahrscheinlich mehrere hundert Megabyte RAM benötigen würde.

Eine gängige Anwendung mit nginx ist das Reverse-Proxying. Da diese Funktionalität so praktisch ist, wurde nginx, auf Anfrage des E-Mail Providers FastMail, um die Fähigkeit erweitert als E-Mail Reverse-Proxy zu dienen.

Auch als Load-Balancer wird nginx eingesetzt, um ein effektives Verteilen der Last zu ermöglichen. So hat z.B. WordPress ihre Load-Balancer von der Software Pound auf nginx geändert. Ihren Angaben zufolge ist es die einzige Software, die mit über 10.000 Anfragen pro Sekunde auf einem einzelnen Server klar kommt.

Nachteile:

Trotz der vielen Performancevorteile, gibt es mit nginx auch einige Nachteile. Shared Hosting Dienste zum Beispiel, die ihren Kunden Kontrolle über das Anlegen von Umleitungen, internen Rewrites oder mit Passwort geschützten Bereichen erlauben möchten (bei Apache per .htaccess möglich), haben bei nginx eher schlechte Karten. Die momentan einzige Möglichkeit, um Rewrites und Ähnliches anzulegen, ist die globale nginx Konfiguration. Änderungen dort erfordern ein Neuladen der Konfiguration durch den Server und Fehler könnten sich auf alle Teilnehmer derselben Serverinstanz auswirken.

Anwendung mit PHP:

Wer mit nginx gerne PHP nutzen möchte, wird feststellen, dass es dafür kein „mod_php“ gibt, wie man es vom Apache gewohnt ist. Stattdessen nutzt man die Reverse-Proxying Funktionen von nginx und leitet per FastCGI an eine im Hintergrund laufende Anwendung (App) weiter. Üblicherweise sieht man nginx zusammen mit PHP-FPM (FastCGI Process Manager). Es erfordert in der Regel etwas mehr manuelle Konfiguration als ein einfaches „apt-get“ unter Debian/Ubuntu, aber hält sich vom Aufwand her in Grenzen.

Weitere Ressourcen:

http://sysoev.ru/en/
http://nginx.org/en/
http://www.wikivs.com/wiki/apache_vs_nginx
http://www.linuxjournal.com/article/10108

Ihr Lichtflut.Medien-Team
www.lichtflut-medien.de