1793697

Nginx – So klappt der unsinkbare Webserver

17.01.2014 | 09:27 Uhr |

Der Webserver Nginx hat sich einen Namen als robuster und effizienter Ersatz für Apache gemacht. Davon profitieren nicht nur Sites mit hohem Traffic, sondern auch schwache Server.

Im Web ist Apache mit Abstand der verbreitete Server: Die Administration ist unkompliziert, es gibt unzählige Module, und alles ist gut dokumentiert. Auf vielen Linux-Servern von Providern ist Apache vorinstalliert und wird als Quasi-Standard angesehen. Gerade bei großen, bekannten Sites, die uns täglich im Web begleiten, kommt aber ein ganz anderer Webserver zum Einsatz: Nginx ausgesprochen „Engine X“. Der Webserver hat sich dort eine Nische erobert, wo es um extrem hohen Traffic und höchste Effizienz geht. Das Open-Source-Projekt wurde vor rund zehn Jahren in Russland von Igor Sysoev ins Leben gerufen. Das offizielle Logo macht aus der Herkunft keinen Hehl und kokettiert mit vergangener Sowjet-Ästhetik. Nginx hat sich unter schwierigen, rauen Bedingungen bewiesen, in welchen andere Webserver klein beigeben müssen und den Anfragen mangels RAM oder Prozessorleistung nicht mehr gewachsen sind.

Sparsam und skalierbar

Im Web hat Nginx unter den Top Tausend einen Marktanteil von 30 Prozent und wird unter anderem auf Facebook, Wordpress, Pinterest, Cloud Flare, Sourceforge und Torrentreactor eingesetzt. Die Alternative zu Apache ist aber nicht nur dort interessant, wo es um Superlative geht. Auch ein schwächlicher Webserver im Intranet oder bei einem Hoster kann mit Nginx zur Hochform auflaufen. Seine Vorteile hat Nginx von einer asynchronen Arbeitsweise: Während Apache zu jeder Verbindung einen neuen Prozess beziehungsweise bei der Verwendung des MPM-Workers einen neuen Thread aufmacht, ist Nginx ereignisgesteuert und kann Tausende Anfragen mit wenigen Prozessen beantworten.

Apache-Web Server unter Linux installieren

Installation und Überblick

Die Installation von Nginx ist keine Hürde mehr, denn bei allen verbreiteten Distributionen wie Debian , Ubuntu , Fedora und Open Suse liegt ein passendes Paket in den Standard-Repositories bereit und ist über den jeweiligen Paketmanager schnell installiert. Bei Ubuntu beispielsweise mittels

sudo apt-get install nginx

Die Struktur der Konfigurationsdateien von Nginx ist der von Apache nicht unähnlich: In „/etc/nginx/nginx.conf“ liegt die allgemeine Serverkonfiguration, und „/etc/nginx/sites-available“ enthält wie bei Apache die Konfiguration der einzelnen Sites, welche mit einem Symlink nach „/etc/nginx/sitesenabled“ aktiviert werden. Die Ähnlichkeiten sind bei der Dateisyntax aber bereits vorbei. Nginx unterscheidet sich mit einer C-ähnlichen Syntax erheblich von der Apache-Konfiguration. Auch gibt es bei Nginx keine verstreuten .htaccess-Dateien, was bei einer Migration einer größeren Seite erst mal viel Aufräumarbeiten bedeutet.

Schnittstelle: Nginx und PHP

Ein fertiges PHP-Modul wie bei Apache gibt es bei Nginx nicht, dazu ist der Webserver zu sehr auf Leistung getrimmt. Stattdessen kann der Webserver PHP über einen Hilfsprozess im Hintergrund ausführen, und der „Fast CGI Process Manager“ (FPM) stellt dazu die benötigte Schnittstelle bereit. Wenn Nginx dann Anfragen an eine PHP-Resource erhält, gibt der Webserver diese an den laufenden PHP-Interpreter weiter, der mit niedriger Latenz die Scripts abarbeitet und wieder über Nginx an den Besucher ausliefert.

Damit dies funktioniert, braucht Nginx nicht nur den PHP-Interpreter, sondern auch die Schnittstelle PHP-FPM. In aktuellen Versionen von Ubuntu, Open Suse und Fedora ist das benötigte Paket „php5-fpm“ bereits in den Paketquellen enthalten und unkompliziert installiert. Ausgerechnet bei Debian 6, das für Server besonders populär ist, gibt es das Paket allerdings noch nicht. Um es nicht aus den Quellen kompilieren zu müssen, stellt es das inoffizielle Debian-Repository von www.dotdeb.org fertige Pakete bereit. Auf Howtoforge gibt es dazu eine deutschsprachige Anleitung, um Nginx auf einem Ubuntu-System mit PHP und PHP-FPM in Betrieb zu nehmen. Die Schritte gelten so auch für Debian mit den Paketen von www.dotdeb.org .

MyFritz oder NAS - So klappt die Privat-Cloud

Turbo für Apache: Nginx als Reverse Proxy

Einen bestehenden Apache-Server gegen Nginx auszutauschen, ist mit Aufwand verbunden. Die größten Hindernisse sind umfangreiche .htaccess-Dateien von Apache, die umgeschrieben werden müssen, und die PHP-Konfiguration mittels PHP5-FPM ist anspruchsvoll. Oft ist eine Migration aber gar nicht nötig, denn Nginx erfüllt seinen Zweck auch als Proxy- Server, der vor den Apache geschaltet wird und Anfragen annimmt, während sich Apache im Hintergrund ganz auf die Inhalte konzentrieren kann.
Ein solcher Aufbau nennt sich „Reverse Proxy“, wobei Apache nur auf dem von innen erreichbaren localhost (127.0.0.1) lauscht und einen hohen Port wie 8000 nutzt. Auf dem Port 80 nimmt Nginx auf der öffentlich erreichbaren IP-Adresse alle Anfragen entgegen und verbindet sich intern mit Apache, um von dort die angeforderten Inhalte durchzureichen. Im einfachsten Fall gelingt dies in der Site-Konfiguration von Nginx mit zwei Zeilen:

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

Eine deutschsprachige Schritt-Für-Schritt-Anleitung mit Beispielen dazu präsentiert Howtoforge hier .

Wordpress, Magento, Joomla: Alle fit für Nginx

Verbreitete PHP-Projekte wie Wordpress, Magento, Joomla und andere sind für den Betrieb mit Apache vorbereitet und liefern ihre Standardkonfiguration maßgeschneidert für diesen Webserver aus. Da Nginx keine .htaccess-Dateien kennt und etwa bei den verwendeten URLUmschreibungen für hübschere Adressen seine eigene Syntax voraussetzt, sind diese PHP-Projekte zunächst nicht mit dem alternativen Webserver kompatibel. Zwar ist der Betrieb unter Nginx möglich, setzt aber die manuelle Anpassung der Konfiguration voraus.

In den meisten Fällen geht es dabei nur um die Adaption der mitgelieferten .htaccess-Dateien für Nginx. Für populäre Blogs, Shops und Content-Management-Systeme bietet das offizielle Wiki von Nginx funktionierende Beispielkonfigurationen, die knapp, aber präzise erklären, was zu tun ist. Die Einrichtung für Wordpress ist unter http://wiki.nginx.org/WordPress kompakt erläutert, für Joomla steht unter http://wiki.nginx.org/Joomla Dokumentation bereit, und für das Ressourcen-hungrige Magento gibt es auf http://wiki.nginx.org/Magento eine Beispielkonfiguration.

0 Kommentare zu diesem Artikel
1793697