Nginx: Webserver – klein und schnell

Andrey Pavlov, 123RF

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.
High Availability lässt sich heute mit günstiger Hardware und einer großen Auswahl an kommerzieller sowie freier Software realisieren. ADMIN erklärt die ... (mehr)

Wenn es um Webserver geht, fällt den meisten Administratoren zuerst Apache ein, der in der globalen Statistik des Web auch den ersten Rang belegt (Abbildung 1). Kleinere und schnellere Alternativen gewinnen aber immer mehr Anhänger, etwa Lighttpd und Cherokee.

Abbildung 1: Wie die grüne Linie rechts unten zeigt, gewinnt Nginx immer mehr Anhänger. (Quelle: Netcraft)

Als zusätzlicher Wettbewerber stieg vor einiger Zeit der Nginx-Server (englisch ausgesprochen 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 Mailprotokolle 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 Fast-CGI 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 Prozess-basierte Apache verarbeitet Nginx alle Anfragen asynchron und skaliert dadurch wesentlich besser.

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 Modules-Seite von Nginx [2] und prüfen, ob die Module ihre Ansprüche befriedigen. Dieser Artikel beschreibt einen typischen Aufbau, in dem Nginx als die Last ausgleichender Revery Proxy vor mehreren Apache-Backends arbeitet. Nginx liefert einen Teil der statischen Inhalte aus und komprimiert selbsttä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:

 

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 Open-SSL-Bibliothek voraus.

Abbildung 2: Zusätzlich zu Konfigurationsbeispielen und Dokumentation bietet die Nginx-Community auch Mailinglisten, ein Forum und einen IRC-Kanal zum Chatten.

Einstellungssache

Dieser Artikel bezieht sich auf eine aus drei Servern bestehende Infrastruktur. 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 das Layout zusammen. Die zugehörige Konfigurationsdatei »nginx.conf« sieht aus wie in Listing 1.

Tabelle 1

Layout

Rechner

Frontend-IP

Backend-IP

nginx

10.0.0.1

192.168.1.1

web01

keine

192.168.1.2

web02

keine

192.168.1.3

Listing 1

nginx.conf

 

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 ist 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 künftige Nginx-Versionen geplant.

Ohne weiteres Zutun kommen die Requests bei den Backend-Servern 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 Modul »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].

SSL-sicher

Nginx als SSL-Proxy zu verwenden bringt mehrere Vorteile. Die Apache-Konfiguration vereinfacht sich, die CPU-Belastung durch SSL-Verschlüsselung wird verringert und das Load Balancing wird einfacher, da der Admin sich nicht um SSL-Sessions kümmern muss. SSL mit Nginx einrichten ist einfach und setzt die gleichen CRT- und KEY-Dateien voraus wie sonst Apache. Die zusätzlichen Einstellungen zeigt Listing 2.

Listing 2

SSL-Konfiguration

 

Allerdings gibt es zwei Einschränkungen beim Nginx-SSL-Support. Die Stable-Version beherrscht keine Revocation Lists, mit denen sich Zertifikate ungültig machen lassen. In der Entwicklerversion ist diese Funktion aber bereits unterstützt. Außerdem lassen sich Chain-Zertifikate nicht wie bei Apache in extra Dateien verwalten. Stattdessen muss der Administrator die Daten des Chain-Zertifikats an das Hauptzertifikat anhängen, zum Beispiel mit »cat chain.crt >> server.crt« . Danach braucht er sich nicht weiter um das Chain-Zertifikat zu kümmern, sondern kann wie gehabt mit dem im Konfigurationspunkt »ssl_certificate« angegebenen Zertifikat arbeiten.

Ähnliche Artikel

comments powered by Disqus

Artikel der Woche

Setup eines Kubernetes-Clusters mit Kops

Vor allem für Testinstallationen von Kubernetes gibt es einige Lösungen wie Kubeadm und Minikube. Für das Setup eines Kubernetes-Clusters in Cloud-Umgebungen hat sich Kops als Mittel der Wahl bewährt. Wir beschreiben seine Fähigkeiten und geben eine Anleitung für den praktischen Einsatz. (mehr)
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Container

Wie setzen Sie Container ein?

  • Gar nicht
  • Docker standalone
  • Docker mit Kubernetes
  • Docker mit Swarm
  • Docker mit anderem Management
  • LXC/LXD
  • Rocket
  • CRI-O auf Kubernetes
  • Container auf vSphere
  • Andere (siehe Kommentare auf der Ergebnisseite)

Google+

Ausgabe /2018

Microsite