Nginx: Webserver klein und schnell
Klein, aber oho
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
Alle Angebote zum ADMIN-Magazin im Online-Shop
Versandartikel |
Onlineartikel |




