NGINX oder "Hilfe, die Russen kommen!"



Was'n das jetzt schon wieder?

Aus gegebenem Anlass will ich mich heute ein bißchen mit NGINX beschäftigen. Hinter diesem spassigen Buchstabenkonstrukt verbirgt sich ein leichtgewichtiger und angeblich sehr schneller Webserver, der ursprünglich vom Russen Igor Sysoev entwickelt wurde. Zugegeben, der Karlauer im Titel ist nicht gerade einfallsreich, war aber einfach viel zu naheliegend als daß ich ihn hätte so einfach ignoerieren können.

Nun, Webserver ist eigentlich zu wenig gesagt. Zusätzlich bekommt man noch einen Loadbalancer (der, so habe ich gelesen, schneller als sein geistig Verwandter Pound sein soll) sowie einen Reverse Proxy Cache a la Varnisch. Das finde ich - ehrlich und einfach gesagt - schon mal sehr sexy.

Wer sich jetzt auf die Suche begibt, wird von in größer Begeisterung schwelgenden Artikeln im Internet erschlagen. Das macht mich - ehrlich und einfach gesagt - schon mal sehr skeptisch.

5 Minuten Windows-Installation

Ja, es geht echt so schnell. Unglaublich, aber war. Nun denn in medias res. Also zuerst laden wir uns 2 kleine ZIPs aus dem Netz:

Jetzt bearbeiten wir das File C:\nginx\conf\nginx.conf. Ja, erraten: Es gibt nur das und nur das. In diesem File suchen und aktivieren wir den folgenden Abschnitt:
location ~ \.php$ {
  root           html;
  fastcgi_pass   127.0.0.1:9000;
  fastcgi_index  index.php;
  fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
  include        fastcgi_params;
}
Zuletzt basteln wir uns noch schnell 2 kleine Scripte zum Starten und Stoppen. Dazu legen wir zuerst unter C:\nginx\start.bat ein File mit folgendem Inhalt an:
@echo off
echo Stating NGINX
start /B cmd /K "C:\nginx\nginx.exe"
echo Starting PHP FCGI
start /B cmd /K "C:\nginx\php\php-cgi.exe -b 127.0.0.1:9000 -c C:\nginx\php\php.ini"

Das Stop-Skript C:\nginx\stop.bat ist auch keine Hexerei:

@echo off
echo Stopping NGINX 
taskkill /f /IM nginx.exe
taskkill /f /IM php-cgi.exe
taskkill /f /IM cmd.exe

Nun das Start-Skript C:\nginbx\start.bat aufrufen. Wer jetzt noch unter C:\nginx\html\index.php ein File mit dem Inhalt

<php phpinfo(); ?>
anlegt kann im Browser http://127.0.0.1/index.php das Ergebnis bewundern.

Et voíla - Er lebt! Zu viel versprochen? Schneller geht nicht - echt nicht. Das ganze gibt es für die Ungeduldigen hier unter http://cloudfront.chroot.at/nginx.zip zum Runterladen.

Ergebnis bisher

Mit diesen wenigen Schritten haben wir uns schnell und einfach eine gute Basis für alles Mögliche geschaffen. Eine Art "mod_rewrite" ist übrigens "out of the box" integriert, genau so wie andere Goodies zum Cachen, direkten Memcache-Zugriff und so weiter.

Das ganze Paket hat bei mit ca. 16MB. Würde man nun noch eine Anwendung dazupacken und die absoluten Pfade durch dynamische ersetzen, könnte man eine ganze Web-Anwendung einfach auf einen USB-Stick packen und mitnehmen. Zum Beispiel zum Herzeigen und live Ausbessern etc. Denke der Fantasie sind hier wenig Grenzen gesetzt.

Professioneller Einsatz oder alles nur Spielerei?

Nun, dazu kann ich wenig professionelles sagen. Interessant ist lt. builtwith.com aber der Marktenteil von NGINX von rund 15% bei den Top 10000 Websites, das ist Platz 2 hinter dem Apache. Wirklich beeindruckend, das muss man dem kleinen Ivan zugestehen.

Ich denke das Teil hat ein riesen Potential. Kaum ein typischer Wordpress-User oder so braucht wirklich mehr, auf alle Fälle keinen (und das ist er definitv) schwerfälligen Apache. Sicherlich sollte man ihn sich noch weiter ansehen. Es gibt zum Beispiel keine bekannten .htaccess Files, aber theoretisch kommt man auch ohne aus und kann alles in der großen Hauptkonfig erledigen. Übersichtlich ist es nicht, aber zumindest konzentiert. Als Ausweg kann man Konfigurationsteile aber in einzele Files auslager und includen.
Neustart wegen Konfigurationsänderungen? Nun, in einem Mehrfach ausgelegtem Verbund auch kein Problem, oder?

Auch der Punkt Sicherheit ist für mich noch eher Spekulation und Prophetie als Fakt. Der Apache war in der Verganhenheit vielen Angriffen ausgesetzt und wurde laufend verbessert, NGINX steht hier für mich noch am Anfang. Der Schwerpunkt lang auf Performance. 10 billige, kleine Server sind schneller installiert und wohl einfacher zu Argumentieren als hochgezüchtete Multi-Kern-Maschienen mit Terrabyte an RAM und sündhaft teuren Platten. Aber hier lehne ich mich wahrscheinlich zu weit aus dem Fenster - dieser Level so nahe der Hardware ist nicht wirklich mein Hauptgebiet.

Apropos Speed: Davon wird viel gerdet und es gibt viele Statistiken. Kann man glauben oder nicht - selber testen mit den eigenen Anwendung sollte hier Licht ins Dunkel bringen. Äh - nein, Spenden bringt in diesem Falle nichts ;)

Der wohl größte und bisher nicht angesprochene Unterschied ist die Einbindung von PHP als FastCGI anstatt des berühmten "mod_php". Nun, beide Konzepte haben ihre Vor- und Nachteile. Das zu Beurteilen traue ich mich aber hier und jetzt sicher nicht. Erstens habe ich darüber noch zu wenig nachgedacht und zweitens ist es, wenn ich so auf die Uhr sehe, auch zu spät dafür.

Und auch ob es nun Sache des Webserver ist, dem ominösen C10K Problem zu begegnen oder man hier nicht besser mit stärkerer Architektur, Hardware-Loadbalancer und ähnlichem aufwarten sollte, sei erstmal dahingestellt - aus den im letzten Absatz genannten Gründen.

Résumé

Da es für den ersten Eindruck bekanntlicher Weise nur eine Chance gibt und es danach sehr, sehr schwer wird etwas anderes zu schaffen, muss ich sagen: Wow, sowas mag ich. Aber Tests und weiter "Introspektionen" sind definitv ausständig. Schön geredt wird ja gerade in unserer Branche viel und der künstlich Hype um irgendwas ist unser ständiger Begleiter.

Danke für Ihre Aufmerksamkeit!