Wie man mit dem nginx HttpGzipModule unter Debian Jessie Traffic spart

In diesem Tutorial werde ich beschreiben, wie man das HttpGzipModule auf einem nginx-Webserver (unter Debian Jessie) konfiguriert. Das HttpGzipModule ermöglicht es nginx, Dateien zu komprimieren und an Clients (z.B. Browser) zu liefern, die komprimierte Inhalte verarbeiten können, wie es die meisten modernen Browser tun. Mit dem HttpGzipModule können Sie HTML-, CSS-, Javascript-, Text- oder XML-Dateien auf ca. 20 – 30% ihrer ursprünglichen Größe komprimieren, wodurch Sie Server-Traffic sparen und Ihre Modembenutzer zufriedener machen.

Das Komprimieren von Dateien verursacht eine etwas höhere Belastung des Servers, aber meiner Erfahrung nach wird dies durch die Tatsache kompensiert, dass die Verbindungszeiten der Clients zu Ihrem Server stark abnehmen. Ein Modembenutzer, der sieben Sekunden zum Herunterladen einer unkomprimierten HTML-Datei benötigt hat, benötigt nun möglicherweise nur noch zwei Sekunden für die gleiche, aber komprimierte Datei.

Durch die Verwendung von HttpGzipModule müssen Sie nicht befürchten, dass Sie Benutzer mit älteren Browsern ausschließen, die keine komprimierten Inhalte verarbeiten können. Der Browser verhandelt mit dem Server, bevor eine Datei übertragen wird, und wenn der Browser nicht in der Lage ist, komprimierte Inhalte zu verarbeiten, liefert der Server die Dateien unkomprimiert.

1 Vorbemerkung

Ich gehe davon aus, dass Sie ein funktionierendes nginx-Setup auf Ihrem Debian-Server haben, z.B. wie in diesem Tutorial gezeigt: Nginx mit PHP (als PHP-FPM) und MariaDB (LEMP) auf Debian 8 installieren.

2 HttpGzipModule konfigurieren

Öffnen Sie /etc/nginx/nginx/nginx.conf:

nano /etc/nginx/nginx.conf

Sie werden feststellen, dass die gzip-Komprimierung bereits aktiviert ist (im Abschnitt http {}):

[...]
http {
[...]
 ##
 # Gzip Settings
 ##

gzip on;
gzip_disable „msie6“;

[…] } […]

gzip on; aktiviert die gzip-Kompression.

gzip_disable „MSIE [1-6]\.(?!.*SV1)“; deaktiviert die gzip-Kompression für Browser, die sie nicht unterstützen (in diesem Fall MS Internet Explorer vor Version 6 SV1).

Natürlich können wir diese Konfiguration verfeinern (eine Liste der möglichen Konfigurationsanweisungen finden Sie unter http://nginx.org/en/docs/http/ngx_http_gzip_module.html):

gzip_http_version 1.1; – Aktiviert die gzip-Komprimierung für HTTP-Anfragen der Version 1.1. Da der Content-Length-Header nicht gesetzt ist, wird Keepalives mit der Version 1.0 unmöglich.

gzip_vary on; – Setzt den Antwortkopf Vary: Akzeptieren-Verschlüsselung. Einige Proxies haben einen Fehler, da sie komprimierte Inhalte an Browser weitergeben, die diese nicht unterstützen. Durch die Einstellung des Vary: Accept-Encoding Header weisen Sie Proxys an, sowohl eine komprimierte als auch eine unkomprimierte Version des Inhalts zu speichern.

gzip_comp_level 6; – Dies ist die Komprimierungsstufe (zwischen 1 und 9), wobei 1 die geringste Komprimierung (am schnellsten) und 9 die meiste (langsamste) ist.

gzip_proxied any; – Hiermit wird konfiguriert, wie Anfragen von einem Proxy behandelt werden sollen. any means enable compression for all requests.

gzip_types text/plain text/html text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript text/x-js; – Dies sagt nginx, welche Dateitypen komprimiert werden sollen (text/html wird immer komprimiert). Da Javascript-Dateien auf jedem Server unterschiedliche Dateitypen haben können, habe ich mehrere mögliche Javascript-MIME-Typen aufgenommen (dasselbe gilt für XML).

gzip_buffers 16 8k; – Hiermit wird die Anzahl und Größe der Kompressionspuffer festgelegt. Der Standard ist gzip_buffers 4 4k; oder gzip_buffers 4 8k;, aber ich habe diesen Wert erhöht, um sicherzustellen, dass auch große Javascript- oder CSS-Dateien komprimiert werden können.

Meine endgültige Konfiguration sieht also wie folgt aus:

[...]
http {
    [...]
    gzip  on;
    gzip_http_version 1.1;
    gzip_vary on;
    gzip_comp_level 6;
    gzip_proxied any;
    gzip_types text/plain text/html text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript text/x-js;
    gzip_buffers 16 8k;
    gzip_disable "MSIE [1-6]\.(?!.*SV1)";
    [...]
}
[...]

Laden Sie nginx neu:

service nginx reload

3 Prüfung

Um zu testen, ob Ihre Konfiguration funktioniert, können Sie die Developer Tools in Firefox oder Google Chrome verwenden und über Firefox auf eine Textdatei zugreifen (z.B. eine statische HTML-Seite). In der HTTP-Header-Ausgabe sollten Sie nun sehen, dass der Client (Firefox) eine Accept-Encoding: gzip,deflate header gesendet hat, um dem Server mitzuteilen, dass er komprimierte Inhalte in den Formaten gzip und deflate akzeptiert; der Server sollte die Datei komprimieren und mit einem Content-Encoding: gzip header senden (wie Sie in diesem Beispiel sehen, setzt nginx auch die Vary: Accept-Encoding Header):

Nginx gzip-Kodierung

4 Links

Das könnte Dich auch interessieren …