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
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 |