Wie man Traffic mit Apache2s mod_deflate einspart

Version 1.0
Author: Falko Timme


Diese Anleitung veranschaulicht, wie man mod_deflate auf einem Apache2 Web Server installiert und konfiguriert. mod_deflate erlaubt Apache2 Dateien zu komprimieren und sie an Clients (z.B. Browser) zu senden, die komprimierten Inhalt wie die meisten modernen Browser bearbeiten können. Mit mod_deflate kannst Du HTML, Text oder XML Dateien auf 20 - 30% ihrer ursprünglichen Größe komprimieren. Dies spart Deinen Server traffic und macht Deine Modem-Benutzer glücklich.

Das Komprimieren von Dateien verursacht eine etwas größere Last auf Deinem Server, was jedoch meiner Erfahrung nach von der Tatsache wettgemacht wird, dass die Verbindungszeiten der Clients mit Deinem Server deutlich verringert werden. Zum Beispiel braucht nun ein Modem Benutzer, der sieben Sekunden benötigte, um eine unkomprimierte HTML Datei runter zu laden, nur noch zwei Sekunden für den gleichen Vorgang, allerdings mit einer komprimierten Datei.

Wenn Du mod_deflate verwendest, brauchst Du keine Angst haben, dass Du Benutzer mit älteren Browsern, die komprimierte Inhalte nicht bearbeiten können, ausschließt. Der Browser verhandelt mit dem Server bevor irgendeine Datei transferiert wird und falls der Browser nicht über die Kapazität verfügt, komprimierten Inhalt zu bearbeiten, liefert der Server die Dateien unkomprimiert.

mod_deflate hat Apache 1.3s mod_gzip in Apache2 ersetzt. Wenn Du komprimierte Dateien mit Apache 1.3 bedienen möchtest, sieh Dir diese Anleitung an: mod_gzip - serving compressed content by the Apache webserver
Ich möchte an dieser Stelle darauf hinweisen, dass dies nicht der einzige Weg ist, ein solches System einzurichten. Es gibt viele Möglichkeiten dieses Ziel zu erreichen - dies ist der Weg, den ich gewählt habe. Ich übernehme keine Garantie, dass dies auch bei Dir funktioniert!

1 mod_deflate aktivieren

Wenn Du Apache2 installiert hast, sollte mod_deflate auch bereits auf Deinem System installiert sein. Nun müssen wir es aktivieren. Auf Debian tun wir das wie folgt:

a2enmod deflate

Starte dann Apache2 neu:

/etc/init.d/apache2 restart

Es kann sein, dass Du auf anderen Distributionen Apache2s Konfiguration manuell bearbeiten musst um mod_deflate zu aktivieren. Es kann sein, dass Du eine Zeile in der Art dem LoadModule Bereich hinzufügen musst:
LoadModule deflate_module /usr/lib/apache2/modules/mod_deflate.so
Pass auf, dass Du den Pfad zu mod_deflate.so anpasst und Apache2 danach neu startest.

2 Konfiguration von mod_deflate

Die Komprimierung von Dateien kann auf zwei Wegen konfiguriert werden: entweder durch das explizite Ausschließen von Dateien anhand der Dateiendung oder durch das explizite Einschließen von Dateien nach dem MIME Type. Du kannst mod_deflate für Deinen gesamten Apache2 Server oder nur für bestimmte virtuelle Seiten aktivieren. Je nachdem wofür Du Dich entscheidest, öffne entweder Deinen Apache2s globalen Server Konfigurationsbereich oder nur den vhost Konfigurationsbereich, wo Du mod_deflate aktivieren möchtest.

2.1 Explizites Einschließen von Dateien nach dem MIME Type

Wenn Du nur HTML, Text und XML Dateien komprimieren möchtest, füge diese Zeile Deiner Konfiguration hinzu:
AddOutputFilterByType DEFLATE text/html text/plain text/xml
Ich verwende diese Konfiguration, da ich keine Bilder oder PDF Dateien oder bereits komprimierte Dateien wie zum Beispiel zip Dateien komprimieren möchte.

2.2 Explizites Ausschließen von Dateien anhand der Dateiendung

Wenn Du alle Dateitypen komprimieren und nur wenige ausschließen möchtest, fügst Du etwas in der Art Deiner Konfiguration hinzu (anstatt der Zeile aus Abschnitt 2.1):
SetOutputFilter DEFLATE
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary SetEnvIfNoCase Request_URI .pdf$ no-gzip dont-vary
Damit komprimierst Du alle Dateien bis auf Bilder (gif, jpg und png), bereits komprimierte Dateien (wie zip und tar.gz) und PDF Dateien, was Sinn macht, da Du mit dem Komprimieren dieser Dateien nicht viel erreichst.

2.3 Weitere Konfigurations-Direktiven

Ganz egal ob Du die Konfiguration von Abschnitt 2.1 oder 2.2 verwendest, solltest Du diese Zeilen Deiner Konfiguration hinzufügen:
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4.0[678] no-gzip BrowserMatch bMSIE !no-gzip !gzip-only-text/html
Diese Zeilen sind für ältere Browser, die eine Komprimierung von Dateien, die keine HTML Dokumente sind, nicht unterstützen.

Die Konfiguration ist nun agbeschlossen. Du musst Apache2 nun neu starten. Auf Debian führst Du dies wie folgt aus:

/etc/init.d/apache2 restart

Um mehr über Konfigurations-Direktiven zu erfahren, sieh Dir Apache Module mod_deflate an.

3 Test

Um unsere Komprimierung zu testen, fügen wir unserer mod_deflate Konfiguration einige Direktiven hinzu, die die Komprimierungsrate von gelieferten Dateien loggen. Öffne Deine mod_deflate Konfiguration und füge folgende Zeilen hinzu:
DeflateFilterNote Input input_info
DeflateFilterNote Output output_info DeflateFilterNote Ratio ratio_info LogFormat '"%r" %{output_info}n/%{input_info}n (%{ratio_info}n%%)' deflate CustomLog /var/log/apache2/deflate_log deflate
Pass auf, dass Du /var/log/apache2 mit Deinem Apache2s Log-Verzeichnis ersetzt. Dies könnte /var/log/httpd, /var/log/httpd2, etc. sein.

Starte dann Apache2 neu. Auf Debian führst Du dies wie folgt aus:

/etc/init.d/apache2 restart

Wenn eine Datei angefordert wird, wird dies in /var/log/apache2/deflate_log (oder in der Datei, die Du verwendest) geloggt. Eine typische Log-Zeile sieht wie folgt aus:
"GET /info.php HTTP/1.1" 7621/45430 (16%)
Wie Du siehst ist die Datei info.php angefordert und geliefert worden. Ihre ursprüngliche Größe war 45430 Bytes. Sie wurde auf 7621 Bytes oder 16% ihrer ursprünglichen Größe komprimiert! Das ist ein großartiges Ergebnis und wenn Deine Webseite zum größten Teil aus HTML, Text und XML Dateien besteht, dann wird mod_deflate viel Traffic sparen und Deine Seite wird bei Benutzern mit einer langsamen Verbindung sehr viel schneller laden.

Wenn Du das logging nach Deinen Tests nicht mehr benötigst, kannst Du die Änderungen von Schritt 3 rückgängig machen und Apache2 neu starten.

4 Links

0 Kommentar(e)

Zum Posten von Kommentaren bitte