nginx – Proxy oder Server?

Früher arbeitete kaum eine Seite im Internet ohne den Apache Webserver. Hierbei handelt es sich um den am weitesten verbreiteten Webserver weltweit. Die Vorteile liegen ganz klar in einer sehr einfachen Administration und in der Vielzahl an Modulen, die es derzeit im Netz gibt. Alles ist bestens dokumentiert und so können auch semiprofessionelle Webmaster sämtliche Ideen realisieren.

nginx Logo

nginx Logo

Viele Provider geben Apache quasi als Standard vor. Doch bei immer mehr großen und vor allem sehr bekannten Seiten kommt immer öfter nginx zum Einsatz. WordPress.com, Sourceforge und Intel zeigen wie es geht. Ausgesprochen heißt der Webserver engine x. Besonders auf Seiten mit massiven Traffic-Fluten und einem Bedarf an besonders hoher Effizient spielt nginx seine Stärken aus. Wo die Server schwach, der Arbeitsspeicher klein und die Leistung oft Mangelware darstellte, wurde nginx für den Massenmarkt entwickelt: in Russland.

nginx wird populär - nicht ohne Grund!

Der Marktanteil von nginx wächst stetig weiter. Bei den Top 1000 Webseiten nutzen ca. 30 Prozent bereits den Webserver, um die Ressourcen besser und effizienter nutzen zu können. Netflix, WordPress, Cloud Flare, Torrentreactor und Pinterest greifen darauf zurück. Doch warum ist eine Nutzung von nginx als Server bzw. Proxy Server überhaupt sinnvoll? Geht es nur darum, die Leistung zu maximieren? Ganz im Gegenteil, denn nginx ist nicht nur dafür konzipiert worden, möglichst viele Requests zu bearbeiten, ohne die Ressourcen zu sehr in Anspruch zu nehmen. Eher, um die meist schwachen Ressourcen von Servern optimal zu nutzen.

Wie wird nginx als Server installiert?

Die Installation von nginx verläuft absolut unkompliziert. Alle großen Distributionen wie Fedora, Ubuntu, Debian oder Open Suse liegen die Pakete bereits bei. Man nutzt also einfach den Paketmanager der jeweiligen Software und installiert nginx mit wenigen Handgriffen.

Installiert wird nginx unter Ubuntu z. B. mit

sudo apt-get install nginx

Gewisse Ähnlichkeiten gibt es allerdings zwischen Apache und nginx. Die Konfigurationsdateien weisen ähnliche Strukturen auf.
Die allgemeinen Servereinstellungen sind zu finden unter:

/etc/nginx/nginx.conf

Wie bei Apache auch, befinden sich die Konfigurationen der einzelnen Seiten unter:

/etc/nginx/sites-available

Um sie zu aktiveren, wird ein Symlink zu:

/etc/nginx/sites-enabled

erstellt.

Weitere Gemeinsamkeiten gibt es allerdings nicht, denn beide Webserver unterscheiden sich grundlegend in der Arbeitsweise. Apache ist workerprozessbasiert, während nginx eventbasiert funktioniert. Die einzelnen Module werden damit nur dann angesprochen, wenn sie auch benötigt werden. Zusätzlich erstellt nginx keine htaccess Dateien, sonder hinterlegt alle Einstellungen in einer zentralen Datei, die sich ressourcenschonend ständig im RAM befindet. Die Struktur des Webservers ist ähnlich der Programmiersprache C.

Wie arbeitet nginx mit PHP zusammen?

Bei Apache war alles einfacher. Es gab eine fertige Schnittstelle für die Kommunikation mit PHP. Das ist bei nginx nicht der Fall. Das ist aber auch gar nicht schlimm. Um die maximale Leistung zu erzeugen, ist nginx in der Lage, PHP im Hintergrund auszuführen, wozu diverse Hilfsprozesse nötig sind. Das bedeutet, dass nginx PHP FPM fähig ist. Der Fast CGI Process Manager (FPM) stellt die nötigen Schnittstellen dazu bereit. Im Gegensatz zu Apache, wo sämtliche PHP Module die ganze Zeit mitlaufen und dadurch den Arbeitsspeicher belasten, kann der nginx Webserver entscheiden, ob er PHP benötigt. Wenn ja, wird der Request an den PHP Interpreter weitergegeben, der die Anfrage abarbeitet und über nginx wieder an den Besucher der Webseite ausgibt. Sehr praktisch und vor allem schnell.

PHP FPM ist für nginx als Server zwingend erforderlich

Um einen reibungslosen Ablauf zu gewährleisten, muss für den Betrieb von nginx in Kombination mit PHP die PHP-FPM Schnittstelle vorhanden sein. Open Suse, Ubuntu und Fedora liefern das php5-fpm Paket bereits mit, sodass es ohne großen Aufwand installiert werden kann. Leider ist es für Debian 6 noch nicht erhältlich.

Installiert werden kann das ganze mit

sudo apt-get install php-fpm

nginx als Proxy Server – Entlastung für Apache

Um ein Apache System auf nginx umzustellen, muss ein nicht zu missachtender Aufwand betrieben werden. Obwohl das Umschreiben der htaccess Dateien bereits von Konvertern übernommen werden kann, kann die PHP Konfiguration von php5-fpm Schnittstellen sehr viel Zeit in Anspruch nehmen. Bevor man seinen Server jetzt zu schnell von Apache auf nginx umstellt, sollte man sich zunächst überlegen, ob der Einsatz von nginx nicht auch als Proxy Server Sinn machen könnte. Auf diese Art kann der nginx Webserver sich um die Anfragen kümmern, während Apache im Hintergrund läuft und die Inhalte verwaltet.

Nutzt man einen solchen Serveraufbau, handelt es sich um einen Reverse Proxy. Apache hört dabei ausschließlich auf den localhost und nutzt einen Port, der eine höhere Zahl wie 8000 besitzt. Der Port 80 ist dabei nginx zugeteilt. Darüber kann der Webserver von außen alle Requests entgegennehmen und verarbeiten. Intern nimmt er dann Kontakt zum Apache Webserver auf und reicht ihm nur das durch, was er gut verarbeiten kann.

Hierfür sind lediglich zwei Zeilen in der Site-Konfiguration von nginx nötig:

proxy_pass http://localhost:8000;
include /etc/nginx/proxy_params;

CMS sind bereit für den Einsatz auf nginx

Sowohl WordPress, als auch Magento und Joomla sind bereit für den Betrieb mit nginx. Die Standardkonfigurationen der Plattformen sind speziell für Apache ausgelegt, war es doch jahrelang der einzige Webserver, der millionenfach genutzt wurde. Da alle drei CMS auf die Nutzung der htaccess Datei zurückgreifen, kann man sie nicht einfach ohne Anpassung auf nginx betreiben, denn suchmaschinenfreundliche URLs, die beispielsweise über die MOD Rewrite Funktion in der htaccess realisiert werden, sind so einfach dann nicht mehr möglich. Eine manuelle Anpassung muss vorgenommen werden.

Normalerweise reicht es allerdings aus, wenn man die Funktionen der htaccess Datei einfach in die Konfigurationsdatei von nginx hinterlegt. Dies kann entweder per Hand erfolgen, oder über einen htaccess Konverter, der diese Aufgabe automatisiert erledigt. Auf der Homepage von nginx gibt es funktionierende Beispielkonfigurationen für Blogs, Shops und zahlreiche Content Management Systeme, sodass jeder Webmaster sehr schnell die passende Lösung finden wird.