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)

Statisch

Im nächsten Schritt soll Nginx lernen statische Dateien – nämlich Bilder – auszuliefern. Damit können Sie die Backend-Server für dynamische Seiten optimieren. Die Ablaufzeit für das Caching der Bilder soll 30 Tage betragen, sodass wiederkehrende Clients die Bilder nur beim ersten Mal übers Netz laden müssen. Der folgende Abschnitt in der Konfigurationsdatei realisiert diese Anforderungen:

location ~* ^.+\.(jpg|jpeg|gif|png)$ {
        root            /path/to/www;
        expires         30d;
}

Wer das Logging für ausgelieferte Bilder komplett abschalten möchte, erreicht dies mit der folgenden Zeile:

access_log      off;

Die Komprimierung von Textinhalten per Gzip kann etwas Bandbreite bei der Auslieferung sparen, wovon vor allem Anwender mit einer langsamen Leitung profitieren. Allerdings belastet sie den Prozessor des Servers etwas mehr. Der Abschnitt in Listing 3 legt fest, dass Nginx nur bestimmte Mime-Typen komprimiert und die Komprimierung für den Internet Explorer abschaltet, weil es damit bekanntlich Probleme gibt.

Listing 3

Gzip-Komprimierung

 

Um die Verarbeitung der Clientanfragen noch weiter zu beschleunigen, gibt es zwei Möglichkeiten fürs Caching von Inhalten: Datei-basiert oder mit Memcache. Aufpassen muss allerdings generell, wer Inhalte cachen will, die sich unterscheiden, je nachdem, ob der User eingeloggt ist oder nicht. Den Datei-basierten Cache schaltet diese Zeile ein:

proxy_cache_path /data/nginx/cache  levels=1:2 keys_zone=one:10m;

Der Parameter »level« legt die Anzahl von Unterverzeichnissen für den Cache fest. Nginx verwendet als Key und Dateinamen einen MD5-Hash der URL, sodass Dateinamen aussehen wie »/data/nginx/cache/c/29/b7f54b2df7773722d382f4809d65029c« . Wenn der Cache-Pfad im HTTP-Kontext der Konfiguration eingerichtet ist, können Sie den Cache selber im HTTP-, Server- oder Location-Abschnitt einstellen.

Um alle Antworten mit den HTTP-Codes 200 und 302 für eine halbe Stunde zu cachen und alle 404-Antworten für 5 Minuten, verwenden Sie beispielsweise diese Einstellungen:

proxy_cache             one;
proxy_cache_valid       200 302 30m;
proxy_cache_valid       404             5m;

Mit Memcache zu cachen geht beinahe genauso einfach, wie Listing 4 zeigt.

Listing 4

Memcache-Einstellungen

 

Viele verbreitete Monitoring-Lösungen verarbeiten die Ausgabe des Apache-Moduls »httpd mod_status« . Bei Nginx übernimmt das Modul »stub_status« eine ähnliche Rolle. Defaultmäßig fehlt es, deshalb müssen Sie es im Configure-Schritt mit »--with-http_stub_status_module« aktivieren. Haben Sie es installiert, richten Sie es mit den Einstellungen aus Listing 5 ein. Eine HTTP-Anfrage auf »http://Server/nginx_status« führt damit zu einer Antwort wie in Listing 6.

Listing 6

Statusmeldung

 

Listing 5

Modul stub_status

 

Zubehör

Kaum eine Apache-Site kommt ohne Mod-Rewrite aus, um zum Beispiel die hässlichen URLs mit Query-Parametern in URLs mit gut lesbaren Pfaden umzuwandeln. Nginx hat zwar auch ein Rewrite-Modul, aber dessen Syntax [5] unterscheidet sich vom Apache-Pendant. Der folgende Code schreibt alle URLs Suchmaschinen- und Anwender-freundlich um:

rewrite  ^/users/(.*)$ /user.php?user=$1?last;

Eine aufwändigere Variante verwendet eine If-Abfrage, um Anfragen immer zur gleichen Domain weiterzuleiten:

if ($host ~* www\.(.*)) {
  set $host_without_www $1;
  rewrite ^(.*)$ http://$host_without_www$1 permanent;
}

Für Geotargeting, also die Anpassung der ausgelieferten Webseite an den Standort des Users, gibt es ein Geo-IP-Modul. Es erzeugt Variablen basierend auf der IP-Adresse des Anwenders und beruht auf den Maxmind-Geo-IP-Datenbanken. Das Nginx-Modul setzt zwei Dinge voraus: die Libgeoip und eine Maxmind-Datenbank. Die neueste Libgeoip findet sich wie die Datenbank auf der Maxmind-Site [6], sie ist aber auch schon in vielen Distributions-Repositories enthalten.

Diese folgenden beiden Zeilen, im HTTP-Kontext der Konfiguration eingesetzt, schalten das Geo-IP-Modul ein:

geoip_country  GeoIP.dat;
geoip_city     GeoLiteCity.dat;

Damit stehen in Nginx die unter [7] gelisteten Variablen zur Verfügung. Häufig verwenden Webanwendungen mit Nginx beispielsweise »$geoip_country_code« , um die Requests an verschiedene Upstream-Server, je nach Land, weiterzuleiten. Um die Geo-IP-Infos auch an die Backends weiterzuleiten, verwenden Sie diese Anweisung:

proxy_set_header  HTTP_GEO   $geo;

Tabelle 2 führt noch weitere Nginx-Module auf und erklärt kurz, wofür sie zuständig sind.

Tabelle 2

Nginx-Module

Modul

Funktion

HTTP Referer

Filtert Requests basierend auf dem Referer

HTTP Limit Zone

Beschränkt die Anzahl gleichzeitiger Verbindungen pro Client

HTTP Limit Requests

Beschränkt die Zugriffshäufigkeit pro Client

User ID

Liefert Cookies aus, die den User identifizieren

HTTP Addition

Hängt beliebigen Text an ausgelieferte Seiten an

FLV

Flash-Videostreams

Perl

Macht Perl-Code und Serverside-Includes direkt mit Nginx ausführbar

WebDAV

Verarbeitet Webdav-Anfragen

Substitution

Textersetzung in Webseiten

Image Filter

Bildverarbeitung mit dem GD-Modul

Secure Link

Schützt Seiten mit einem Schlüssel vor unbefugtem Zugriff

XSLT

Verarbeitet Seiten mit XSL weiter

Ähnliche Artikel

comments powered by Disqus

Artikel der Woche

Eigene Registry für Docker-Images

Wer selber Docker-Images herstellt, braucht auch eine eigene Registry. Diese gibt es ebenfalls als Docker-Image, aber nur mit eingeschränkter Funktionalität. Mit einem Auth-Server wird daraus ein brauchbares Repository für Images. (mehr)
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Google+

Ausgabe /2019