Weitere ADMIN-Magazin Angebote

Nginx: Webserver klein und schnell

Klein, aber oho

Der schlanke Webserver Nginx aus russischer Produktion gewinnt ständig Marktanteile gegenüber Apache. Dieser Artikel gibt eine Einführung in seine Konfiguration.
Jeremy Garcia

Wenn es um Webserver geht, fällt den meisten Administratoren als erstes Apache ein, der in der globalen Statistik des Web auch an erster Stelle steht. Kleinere und schnellere Alternativen gewinnen jedoch immer mehr Anhänger, so zum Beispiel Lighttpd und Cherokee. Als zusätzlicher Wettbewerber stieg vor einiger Zeit der Nginx-Server (ausgesprochen englisch "Engine-ex") in den Ring [1]. Er steht für hohe Performance, Stabilität, umfangreiche Features, einfache Konfiguration und geringen Ressourcenverbrauch. Das Resultat der Bemühungen des Programmierers Igor Sysoev verrichtet seinen Dienst in vielen großen Sites, zum Beispiel Wordpress.com, Hulu und Linuxquestions.org. Ungewöhnlich: Außer als Webserver kann Nginx auch als Proxy für die Mail-Protokolle IMAP und POP3 auftreten.

In der Domäne HTTP kann Nginx die folgenden Fähigkeiten vorweisen: Statische Dateien ausliefern, Reverse Proxying mit optionalem Caching, fehlertolerantes Load Balancing, remote FastCGI mit Caching/Beschleunigung und SSL/TLS Server Name Indication (SNI), was die Notwendigkeit einer eigenen IP-Adresse zur SSL-Konfiguration für jeden virtuellen Server überflüssig macht. Wie Apache ist Nginx modular aufgebaut und bietet einiges an Funktionalität über Module an, die der Administrator aktivieren oder deaktivieren kann. Anders als der prozessbasierte Apache verarbeitet Nginx alle Anfragen asynchron skaliert dadurch wesentlich besser. Apache verwendet für neue Anfragen einen neuen Prozess oder Thread, was zu einem höheren Verbrauh an Ressourcen wie Speicher führt.

Installation

Wenn Sie nur eine einfache Site betreiben oder gerade ein Projekt neu starten, können Sie möglicherweise auch komplett auf Apache verzichten. Am besten werfen Sie einen Blick auf die Module-Seite von Nginx [2] und prüfen, ob die Module alle ihre Ansprüche befriedigen. Dieser Artikel beschreibt im weiteren einen typischen Aufbau, in dem Nginx als lastausgleichender Revery Proxy vor mehreren Apache-Backends arbeitet. Nginx liefert einen Teil der statischen Inhalte aus und komprimiert selbstätig die dynamischen Seiten, die vom Apache kommen.

Die meisten Linux-Distributionen führen Nginx-Pakete in ihren Repositories, sodass sich der Server leicht über den Paketmanager installieren lässt. Wenn das Paket zu alt ist oder ganz fehlt, finden Sie den Quellcode auf der Nginx-Homepage. Die Installation läuft über die typischen Configure- und Make-Aufrufe. Obwohl die Defaults in den meisten Fällen wohl in Ordnung sind, sollten Sie einen Blick auf die Konfiguration werfen und sie gegebenenfalls anpassen. Die Ausgabe von Configure sieht typischerweise etwa so aus:

Configuration summary
  + using system PCRE library
  + using system OpenSSL library
  + md5: using OpenSSL library
  + using sha1 library: /usr/include
  + using system zlib library

Sie sollten sicherstellen, dass die geforderten Bibliotheken auch installiert sind, wenn Sie die entsprechende Funktionalität nutzen möchten. So erfordert Rewrite beispielsweise die PCRE-Library, und SSL setzt die OpenSSL-Bibliothek voraus.

Einstellungssache

In diesem Artikel gehen wir von einer Infrastruktur bestehend aus drei Servern aus. Der Computer mit Nginx befindet sich im Internet vor den beiden Rechnern, die dahinter im privaten Netz stehen. Sie haben deshalb auch keine IP-Adresse im Internet. Tabelle 1 fasst die Konfiguration zusammen.

Tabelle 1

Layout

Rechner

Front-End-IP

Back-End-IP

nginx 10.0.0.1 192.168.1.1
web01 none 192.168.1.2
web02 none 192.168.1.3

Die dazugehörige Konfigurationsdatei »nginx.conf« sieht aus wie in Listing 1.

Listing 1

nginx.conf

user                        nobody;
worker_processes        2;
events {
      worker_connections  1024;
      use epoll;
}
http {
     include            mime.types;
     default_type       application/octet-stream;
      log_format        custom '$http_host $remote_addr - $remote_user [$time_local] "$request" '
                               '$status $body_bytes_sent "$http_referer" '
                                       '"$http_user_agent"';
     access_log         /path/to/access.log custom;
     sendfile           on;
     server_tokens              off;
     upstream cluster {
             server 192.168.1.2 weight=1; // the weight can be adjust to send more
             server 192.168.1.3 weight=1; // traffic to specific machine(s).
     }
     server {
             listen 10.0.0.1:80;
             server_name www.domain.com domain.com;
             location   / {
                     proxy_pass         http://cluster;
                     proxy_redirect     off;
                     proxy_set_header   Host $host;
                     proxy_set_header   X-Real-IP $remote_addr;
                     proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
                     proxy_buffers      8 32k;
             }
     }
}

Diese Konfiguration führt zu dem Ergebnis, dass beide Backend-Server ungefähr gleich viele Zugriffe abbekommen. Per Default führt Nginx ein einfaches Load Balancing nach der Round-Robin-Methode durch, das heißt, bei jeder Anfrage einfach der nächste Backend-Server dran. Um eine Verteilung basierend auf der IP-Adresse des anfragenden Clients zu realisieren, bietet Nginx die Konfigurationsdirektive »ip_hash« . Ausgefeiltere Load-Balancing-Methoden sind für zukünftige Nginx-Versionen geplant.

Ohne weiteres Zutun kommen die Requests bei den Backend-Server alle mit der IP-Adresse des Nginx-Frontends an. Am besten übergeben Sie die IP-Adresse der ursprünglichen Anfrage mit dem HTTP-Header »X-Forwarded-For« und verarbeiten sie in den Apache-Prozessen mit dem Module »mod_rpaf« weiter. Es schreibt die Remote-Adresse wieder um, sodass andere Apache-Module die gewünschte Information erhalten. Das freie Modul finden Sie auf der Website [3].

Artikel als PDF herunterladen

Kommentare

Suche

ADMIN auf Twitter, Facebook, Xing

Auf Twitter folgen   

Unsere Partner:

hackerboard.deUnixboard