Bandbreite sparen mit Apache2s mod_deflate

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 komprimierte Inhalte bearbeiten können, wie es die meisten modernen Browser können. Mit mod_deflate kannst Du HTML, Text oder XML Dateien auf ungefähr 20 - 30% ihrer originalen Größe komprimieren, dies spart Deinem Server Bandbreite, was Deine Modem Benutzer glücklicher macht.

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, musst 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. Wir müssen es nun aktivieren. Auf Debian tun wir das wie folgt:

a2enmod deflate

Starte dann Apache2 neu:

/etc/init.d/apache2 restart

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

2 Konfiguriere mod_deflate

Das Komprimieren von Dateien kann auf ein oder zwei Wegen konfiguriert werden: Entweder expliziter Ausschluss von Dateien durch Dateiendungen oder explizites Einbeziehen von Dateien durch den MIME Typ. Du kannst mod_deflate für Deinen gesamten Apache2 Server aktivieren, oder nur für spezielle virtuelle Sites. Je nachdem wofür Du Dich entscheidest, öffne jetzt entweder Deinen Apache2s globalen Serverkonfigurationsbereich oder nur den vhost-Konfigurationsbereich, in dem Du mod_deflate aktivieren möchtest.

2.1 Explizites Einbeziehen von Dateien durch den MIME Typ

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
Das ist die Konfiguration, die ich verwende, da ich keine Bilder oder PDF Dateien oder bereits komprimierte Dateien wie zum Beispiel zip Dateien komprimieren möchte.

2.2 Expliziter Ausschluss von Dateien durch Dateiendungen

Wenn Du alle Dateitypen komprimieren und nur wenige auschließen möchtest, würdest Du etwas in der Art Deiner Konfiguration hinzufügen (anstatt der Zeile von Kapitel 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 würden alle Dateien bis auf Bilder (gif, jpg und png), bereits komprimierte Dateien (wie zip und tar.gz) und PDF Dateien komprimiert werden, was Sinn macht, da es nicht viel bringt, diese Dateitypen zu komprimieren.

2.3 Weitere Konfigurationsdirektiven

Unabhängig davon, ob Du die Konfiguration von Kapitel 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 das Komprimieren von Dateien, bis auf HTML Dokumente, nicht unterstützen.

Die Konfiguration ist nun abgeschlossen. Du musst Apache2 nun neu starten. Auf Debian machst Du das wie folgt:

/etc/init.d/apache2 restart

Um mehr über Konfigurationsdirektiven zu erfahren, sieh Dir Apache Module mod_deflate an.

3 Test

Um unsere Komprimierung zu testen, fügen wir einige Direktiven unserer mod_deflate Konfiguration hinzu, die die Kompressionsrate der ausliefernden Dateien mitloggen. Ö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. Das könnte /var/log/httpd, /var/log/httpd2, etc. sein.

Starte dann Apache2 neu. Auf Debian wie folgt:

/etc/init.d/apache2 restart

Immer wenn eine Datei aufgerufen wird, wird dies in /var/log/apache2/deflate_log (oder in die Datei, zu der Du sie verändert hast) geloggt. Eine typtische Log-Zeile sieht wie folgt aus:
"GET /info.php HTTP/1.1" 7621/45430 (16%)
Wie Du siehst, wurde die Datei info.php aufgerufen und geliefert. Ihre ursprüngliche Größe betrug 45430 Bytes, sie wurde komprimiert auf 7621 Bytes oder auf 16% ihrer ursprünglichen Größe! Das ist ein großartiges Ergebnis und wenn Deine Webseite größtenteils aus HTML, Text und XML Dateien besteht, wird Dir mod_deflate sehr viel Bandbreite sparen. Bei Benutzern mit einer langsamen Internetverbindung wird Deine Seite sehr viel schneller geladen.

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

4 Links

4 Kommentar(e)

Zum Posten von Kommentaren bitte

Kommentare

Von: thdriver

Hallo, super Tutorial, aber ich hab ein problem,
wenn ich die Zeilen von 2.2 Expliziter Ausschluss von Dateien eintrage bekomme ich beim restart des Apache diese Fehlermeldung:
Forcing reload of web server (apache2)... waiting Syntax error on line 6 of /etc/apache2/mods-enabled/deflate.conf:
Missing envariable expression for SetEnvIfNoCase
failed!

kann mir da jemand weiterhelfen?


Von: microcosmic

Hallo.

der code von 2.2 sollte so aussehen:

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

Ist wohl beim kopieren passiert ;-)

Mic


Von: microcosmic

Hallo.

Ich noch mal ;-)

Vielen Dank für dieses Tutorial, habe es in die Tat umgesetzt. Bin höchstzufrieden.
Wir haben leider viele User mit langsamer Internetanbindung (ist leider auf Mallorca
ein generelles Problem), daher passt mir das mod_deflate sehr. Danke :-)


Von: microcosmic

Hello again ;-)

Ich habe nun mal das Logging für mod_deflate aktiviert, jedoch bekomme ich nur:

"GET / HTTP/1.0" -/- (-%)

Eventuell einen hinweis?

Debian 4.0 / Apache/2.2.3