AA_FeurigesAuto_PO-22033_Fotolia-Misha.jpg

© Misha, Fotolia

Auf der Überholspur

Die russische Alternative zum Apache-Webserver

16.07.2012
Schlank, schnell, vielseitig und einfach zu konfigurieren: Nginx bringt alles mit, was man sich von einem modernen Webserver wünscht. Kein Wunder, dass das Multitalent immer weiter zu Apache aufholt.

Zwar dominiert Apache mit Marktanteilen von über 60 Prozent noch immer den Webserver-Markt, doch seit knapp vier Jahren schickt sich mit Nginx [1] eine feine, schnelle Alternative an, dem Marktführer Anteile abzuluchsen. Im Juni 2012 wurden laut der Netcraft Web Server Survey [2] weltweit bereits über 10 Prozent der Webseiten von Nginx ausgeliefert – ein grandioser Aufstieg, wenn man bedenkt, dass der aus Russland stammende Webserver bis vor kurzem noch ziemlich unbekannt war.

Nginx wurde bereits 2002 von dem Russen Igor Sysoev entwickelt. Ursprünglich war er dafür gedacht, die Webseiten von Rambler.ru auszuliefern. Das tat der unter einer BSD-Lizenz stehende Server dann auch mit beeindruckender Leistung. Neben der Performance punktet Nginx auch, indem er sich modular einsetzen sowie leicht konfigurieren lässt und durch geringen Ressourcenverbrauch glänzt. Der Webserver kann Anfragen nicht nur direkt beantworten, sondern auch als Reverse-Proxy für seine Kollegen dienen, etwa für Apache.

Schnell installiert

Nginx liegt in den Repositories aller gängigen Distributionen. Die Installation solcher fertig geschnürter Pakete ist zwar zweifelsohne bequem, bietet aber nicht immer das Bestmögliche: Anders als bei Apache gilt es die zu verwendenden Module und Funktionen bei Nginx schon beim Übersetzen des Quellcodes anzugeben, denn sie werden direkt beim Kompilieren integriert. Verwenden Sie Binärpakete einer Distribution, entlocken Sie Nginx mit nginx -V die beim Übersetzen berücksichtigten Module.

Spätestens, wenn ein Modul fehlt, das Paket zu viele unnötige Komponenten als Ballast mitschleppt oder Nginx topaktuell sein soll, lohnt es sich, den Webserver aus den Quellen zu übersetzen. Nachdem Sie die Quellen [3] der derzeit neuesten Version 1.2.1 heruntergeladen haben, entpacken Sie diese mit tar -xzf nginx-1.2.1.tar.gz und wechseln in das neu entstandene Verzeichnis. Die Installation erfolgt mittels ./configure, make und (als root) make install.

Mit ./configure --help erhalten Sie eine Übersicht aller möglichen Optionen für Configure. So prüfen Sie beispielsweise, ob die Konfiguration alle gewünschten Module integriert respektive die unerwünschten außen vorlässt: Standardmäßig sind beispielsweise das SSL-Modul oder IPv6-Unterstützung deaktiviert. Außerdem können Sie mithilfe bestimmter Optionen von der Standardkonfiguration abweichende Pfade setzen. Neben den Core-Modulen existieren noch viele Module von Drittanbietern [4], die Nginx zwar nicht offiziell unterstützt, die aber die Funktionalität des schnellen Webservers erhöhen.

Standardmäßig landet Nginx im Verzeichnis /usr/local/nginx/. Dort lagern dann sowohl die ausführbaren Binaries als auch die Konfigurations- und Protokolldateien. In vielen Fällen residiert jedoch /usr/local/ auf der Root-Partition. Wenn diese aufgrund vieler temporärer Dateien zuläuft und sich das System instabil verhält, liegt es nicht unbedingt auf der Hand, auf /usr/local/nginx/ als mögliche Quelle des Übels zu kommen.

Daher sind Konfigurationsdateien in der Regel in /etc/ beziehungsweise Protokolle in /var/log/ besser aufgehoben. Das regeln Sie entweder gleich über die Schalter --conf-path=Pfad, --error-log-path=Pfad und --http-log-path=Pfad oder später über symbolische Links. Das sinngemäß gleiche gilt für temporäre Dateien (--http-client-body-temp-path und --http-fastcgi-temp-path), die Sie auf /tmp/ zeigen lassen sollten.

Um zu prüfen, ob die Installation geklappt hat, hilft ein /usr/local/nginx/sbin/nginx -v -t. Spuckt Nginx daraufhin die Versionsnummer und einen positiven Bescheid über einen erfolgreichen Selbsttest aus, steht dem Start des Webservers nichts mehr im Wege.

Indem Sie Nginx aus den Quellen installieren, erhalten Sie zwar einen taufrischen Webbrowser, aber es fehlt das Startskript, mit dem sich der Server bequem beim Rechnerstart in Stellung bringen, neu starten, neu laden oder beenden lässt. Auf der Heft-DVD sowie als Download finden Sie ein entsprechendes Skript für Debian und Ubuntu [5], das sie unter /etc/init.d als nginx ablegen.

Rasant einrichten

Nginx ist fast ebenso schnell eingerichtet, wie Sie es installiert haben. In der Konfigurationsdatei (beziehungsweise den Dateien, wenn die Konfiguration einzelner Server separat erfolgen soll) gilt es in der Regel nur noch wenige Änderungen vorzunehmen. Die wichtigste Konfigurationsdatei, nginx.conf, liegt – sofern Sie bei der Installation keinen anderen Pfad gesetzt haben – unter /usr/local/nginx/conf/. Stammt Nginx aus dem Distributionsfundus, findet sie sich möglicherweise auch unter /etc/nginx/.

Sie konfigurieren den Webserver in drei oder vier (mit Mailproxy) Modulen: main, events, http und mail. Bis auf das Main-Modul stehen alle Modul-Konfigurationen als sogenannte Blöcke innerhalb geschweifter Klammern, Strichpunkte schließen die einzelnen Anweisungen ab. Es gibt auch noch ein Ein Konfigurationsmodul, das aber nichts weiter tut, als sich um das Einbinden externer Dateien zu kümmern, wodurch sich die die Konfiguration aufteilen und damit übersichtlicher gestalten lässt.

Nginx besteht aus einer einzigen Binärdatei. Der Server startet, sofern nicht anders gewünscht, einen Masterprozess mit Root-Rechten als Daemon. Dieser schickt anschließend eine Reihe Worker-Prozesse unter anderen Nutzer- und Gruppenrechten (gewöhnlich www oder www-data) ins Rennen, welche die anfragenden HTTP-Clients bedienen. Hier bietet es sich an, pro CPU-Kern einen Worker-Prozess zu starten. Die zugehörigen Parameter daemon, user und worker_processes gehören zu den wichtigsten Anweisungen im Main-Modul.

In den Anweisungen für das Events-Modul legen Sie fest, wie viele gleichzeitige Verbindungen ein Worker bearbeitet, welches Ereignis-Modell er dazu nutzt oder ob Nginx alle eingehenden Verbindungen auf einmal akzeptiert. Mit der Anzahl der gleichzeitigen Verbindungen sollten Sie experimentieren: Liegt der angegebene Wert zu niedrig, lehnt der Server eventuell Anfragen ab, ist er zu hoch, kann das System Abstürzen. Listing 1 zeigt eine kommentierte Beispielkonfiguration für die Module Main und Events.

Listing 1

# /etc/nginx/nginx.conf
# als Daemon laufen
  daemon on;
# User, der Worker-Prozess ausfuehrt
  user  www-data www-data;
# Anzahl Worker-Prozesse, einer pro CPU-Core
  worker_processes  4;
  events {
    # Anzahl simultaner Verbindungen
    worker_connections  1024;
    use epoll;
  }

Als letztes wichtiges und umfangreichstes Modul vor einem ersten Test gilt es das HTTP-Modul einzurichten. Es gliedert sich in die Blöcke http, server und location (Abbildung 1). Angaben im Block http bestimmen die HTTP-Eigenschaften. Sie wirken sich auf auf alle server-Blöcke aus, die jeweils einen virtuellen Host des Webservers definieren. Die innerhalb der der server-Direktiven stehenden location-Blöcke beeinflussen nur einzelne Verzeichnisse. Auch wenn Nginx mehrere http-Blöcke erlaubt, sollten Sie sich auf einen beschränken: Dadurch halten Sie einerseits die Konfigurationsdatei lesbarer, andererseits verhindert es, dass sie Anweisungen versehentlich überschreiben und so die Fehlersuche erschweren.

Abbildung 1: Die Struktur der HTTP-Konfiguration von Nginx.

Viele HTTP-Direktiven sind bereits mit sinnvollen Werten vorbelegt. Zu den Anpassungen, die für alle virtuellen Hosts (V-Hosts) gelten sollen, zählen wahrscheinlich die Werte für Timeouts, das Caching und die Gzip-Komprimierung auszuliefernder Webseiten. Kürzere Timeouts als die gängigen 60 bis 75 Sekunden bieten sich beispielsweise bei hochfrequentierten Webseiten an, die wenig Nutzer-Interaktionen erfordern. Clientseitiges Caching eignet sich ideal für Seiten, die sich selten ändern. Die Gzip-Komprimierung lässt sich auf bestimmte Dateitypen beschränken. Bei bereits komprimierten Dateien (typischerweise etwa Grafiken oder MP3s) würde eine wiederholte Kompression nur Rechenzeit kosten, ohne nennenswerte Vorteile zu bringen.

Ein Beispiel für globale http-Direktiven zeigt Listing 2. Es integriert die Datei mime.types, nach deren Vorgaben Nginx verschiedene Dateitypen unterschiedlich behandelt. Erkennt der Server ein Typ nicht, liefert er die Datei als application/octet-stream aus. Mit sendfile on halst Nginx die Verwaltung der Datei-Übertragungen dem Kernel auf. Der Server setzt Keep-Alive-Verbindungen schon nach 30 anstelle der standardmäßigen 60 Sekunden zurück.

Bei der Gzip-Komprimierung wurde zwischen schneller, aber schlechter Kompression (1) und bester, aber zeitaufwändiger Kompression (9) die goldene Mitte gewählt. Die Kompression greift auch Dann, wenn die HTTP-Anfrage über einen Proxy abgesetzt wurde. Zudem komprimiert der Server neben text/html auch weitere textlastige Dateitypen, während Grafiken und Audio-Dateien außen vor bleiben. log_not_found off; verhindert, dass Nginx jede Anfrage nach einer nicht vorhandenen Datei zeit- und platzraubend protokolliert. Diese Anweisung gilt nicht nur für fehlende Webseiten, sondern auch für die gern und oft vergessenen Dateien robots.txt und favicon.ico.

Listing 2

http {
  include mime.types;
  default_type application/octet-stream;
  sendfile on;
  keepalive_timeout 30;
  gzip on;
  gzip_comp_level 5;
  gzip_proxied any;
  gzip_types text/css text/javascript text/xml text/plain application/xml application/xhtml+xml application/x-httpd-php application/x-httpd-fastphp application/rss+xml application/javascript application/x-javascript ;
  log_not_found off;
  include sites-enabled/*;
}

Jetzt kann es an die virtuellen Hosts gehen. Listing 3 zeigt eine sehr einfache server-Direktive: Nginx lauscht auf Port 80 und schaut, sobald eine Anfrage eingeht, im Verzeichnis /var/www/ nach, ob er sie bedienen kann. Im Zweifelsfall liefert er die index.htm(l) aus, sofern es eine solche gibt. Es bietet sich an, für jede gehostete Domain eine eigene Konfigurationsdatei anzulegen und diese dann einzubinden (siehe vorletzte Zeile in Listing 2). Die beim Apache gern geübte Praxis, V-Hosts im Verzeichnis sites-available/ einzurichten und dann über einen Softlink ins Verzeichnis sites-enabled/ zu verlinken, funktioniert auch mit Nginx sehr gut.

Listing 3

server {
  listen 80;
  server_name localhost;
  root /var/www;
  index index.html index.htm;
}

Mit der bis hierhin erstellten, einfachen Konfiguration können Sie Nginx über den Befehl usr/local/nginx/sbin/nginx -t prüfen lassen, ob er die getätigten Einstellungen klaglos akzeptiert. Treten keine Fehler auf starten Sie den Server anschließend mit /etc/init.d/nginx start. Sobald Sie im Browser http://localhost/ aufrufen, sollte Nginx die index.html auf den Schirm holen.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 5 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 

Ähnliche Artikel

Kommentare

Infos zur Publikation

LU 11/2014: VIDEOS BEARBEITEN

Digitale Ausgabe: Preis € 4,95
(inkl. 19% MwSt.)

Mit der Zeitschrift LinuxUser sind Sie als Power-User, Shell-Guru oder Administrator im kleinen Unternehmen monatlich auf dem aktuelle Stand in Sachen Linux und Open Source.

Sie sind sich nicht sicher, ob die Themen Ihnen liegen? Im Probeabo erhalten Sie drei Ausgaben zum reduzierten Preis. Einzelhefte, Abonnements sowie digitale Ausgaben erwerben Sie ganz einfach in unserem Online-Shop.

NEU: DIGITALE AUSGABEN FÜR TABLET & SMARTPHONE

HINWEIS ZU PAYPAL: Die Zahlung ist auch ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!       

Tipp der Woche

Schnell Multi-Boot-Medien mit MultiCD erstellen
Schnell Multi-Boot-Medien mit MultiCD erstellen
Tim Schürmann, 24.06.2014 12:40, 0 Kommentare

Wer mehrere nützliche Live-Systeme auf eine DVD brennen möchte, kommt mit den Startmedienerstellern der Distributionen nicht besonders weit: Diese ...

Aktuelle Fragen

Artikelsuche
Erwin Ruitenberg, 09.10.2014 07:51, 1 Antworten
Ich habe seit einige Jahre ein Dugisub LinuxUser. Dann weiß ich das irgendwann ein bestimmtes Art...
Windows 8 startet nur mit externer Festplatte
Anne La, 10.09.2014 17:25, 4 Antworten
Hallo Leute, also, ich bin auf folgendes Problem gestoßen: Ich habe Ubuntu 14.04 auf meiner...
Videoüberwachung mit Zoneminder
Heinz Becker, 10.08.2014 17:57, 0 Antworten
Hallo, ich habe den ZONEMINDER erfolgreich installiert. Das Bild erscheint jedoch nicht,...
internes Wlan und USB-Wlan-Srick
Gerhard Blobner, 04.08.2014 15:20, 2 Antworten
Hallo Linux-Forum: ich bin ein neuer Linux-User (ca. 25 Jahre Windows) und bin von WIN 8 auf Mint...
Server antwortet mit falschem Namen
oin notna, 21.07.2014 19:13, 1 Antworten
Hallo liebe Community, Ich habe mit Apache einen Server aufgesetzt. Soweit, so gut. Im Heimnet...