Installation und Anpassung von gzip_cnc
Konfiguration
Das Verhalten von gzip_cnc wird durch eine Anzahl von Parametern festgelegt. Mit etwas Glück reichen die voreingestellten Standardwerte bereits aus, um das Programm zu verwenden; wahrscheinlich jedoch müssen diese Werte den Gegebenheiten Deines Webspace angepaßt werden.
Für diese Anpassung stehen zwei Methoden zur Verfügung:
- Anpassung des Programms. Am Anfang des Quelltextes von gzip_cnc befinden sich einige Definitionen von Variablen, welche zur Laufzeit des Programms die entsprechenden Parameterwerte enthalten. Bei der Definition jeder dieser Variablen wird ihr ein Standardwert zugewiesen; dieser kann durch eine Änderung der entsprechenden Programmzeile den eigenen Anforderungen angepaßt werden.
- Anpassung über Environment-Variablen. Jeder im Quelltext definierte Parameterwert kann durch das Setzen einer Environment-Variablen in der Webserver-Konfiguration überlagert werden; auf diese Weise kann das Programmverhalten ohne Änderung des Programmcodes den eigenen Anforderungen angepaßt werden.
Die zweite Methode hat den Vorteil, daß beim Wechsel zu einer künftigen Programmversion die vorherigen Anpassungen nicht erneut vorgenommen werden müssen; gleichzeitig mag es für einige Anwender angenehmer sein, keine Änderungen in einem fremden Programm-Quelltext vornehmen zu müssen (was ja die Gefahr in sich bergen kann, versehentlich Fehler dort einzubauen). Die Konfiguration über Environment-Variablen setzt allerdings zusätzliche Berechtigungen voraus, die nicht bei jeder Webserver-Konfiguration als selbstverständlich betrachtet werden dürfen; es ist also durchaus denkbar, daß diese Möglichkeit manchen Anwendern verwehrt sein wird.
In den nachfolgenden Abschnitten dieses Dokuments werden
- alle Parameter und ihre Wirkung,
- der Name der entsprechenden Programmvariable sowie
- der Name der zugehörigen Environment-Variablen
beschrieben. Am Ende des Kapitels folgt eine Beschreibung, wie eine Konfiguration unter Verwendung von Environment-Variablen aussehen sollte und welche Voraussetzungen dafür erfüllt sein müssen.
Festlegung der Komprimierungsstufe
my $gzip_quality = 9;
Dieser Parameter beschreibt die zu verwendende Komprimierungsstufe, welche die Qualität der Komprimierung festlegt.
Das gzip
-Verfahren (egal, durch welches Werkzeug es umgesetzt wird) erlaubt die Angabe eines Wertes zwischen 0
und 9
, wobei
0
die geringste Komprimierungswirkung in der kürzesten Verarbeitungszeit und9
die beste Komprimierungswirkung in der längsten Verarbeitungszeit
bewirkt.
Da jeder Dateiinhalt von gzip_cnc nur ein einziges Mal komprimiert und anschließend nur noch aus dessen Cache-Baum geholt wird, sollten wir uns hier die bestmögliche Komprimierungsstufe leisten können.
(Zum Vergleich: mod_gzip gibt sich mit Stufe 6 zufrieden, um die entstehende CPU-Last für den Server in Grenzen zu halten.)
Environment-Variable: GZIP_CNC_QUALITY
.
Festlegung des Pfades für das Komprimierungsprogramm gzip
Falls auf dem Server das Modul Compress::Zlib
installiert ist, hat dieser Teil der Konfiguration keine Wirkung - gzip_cnc versucht vorrangig, dieses Perl-Modul zu verwenden, und greift nur ersatzweise auf die Verwendung eines externen Programms zurück.
(gzip_cnc informiert den Anwender im Rahmen seiner Selbsttest-Funktion darüber, welches Werkzeug zur Komprimierung es auf diesem Server ausgewählt hat.)
Falls jedoch tatsächlich ein Systemkommando (für UNIX) bzw. separates Programm (für Windows) zur Komprimierung erforderlich ist, verläßt sich gzip_cnc nicht darauf, daß der Apache-Webserver konfiguriert ist, ihm eine ausreichende Liste von Programmverzeichnissen in der Environment-Variable PATH
zu übergeben, sondern es besteht darauf, dieses Komprimierungsprogramm über deren vollständigen Pfadnamen direkt anzusprechen.
my $gzip_path = '/usr/bin/gzip';
Da diese Pfadnamen in UNIX-Systemen relativ gut standardisiert sind, besteht die berechtigte Hoffnung, daß der voreingestellte Wert ohne Änderung funktionieren könnte. Sollte gzip_cnc sich weigern, irgend etwas zu komprimieren, und statt dessen entsprechende Meldungen in seine Protokolldatei schreiben, dann ist möglicherweise das erforderliche Programm nicht (unter dem angegebenen Pfadnamen) vorhanden.
gzip_cnc hat einen ihm wahrscheinlich erscheinenden Pfad zu einem gzip
-Kommando auf UNIX-Servern voreingestellt, kann aber keine Garantie dafür geben, daß Dein Server dazu passend installiert wurde. Falls Du einen Dialog-Zugang (telnet, ssh) zum Server mit Deinem Webspace besitzt, kannst Du dort eine (beliebige) shell öffnen und mit dem Kommando which gzip
prüfen lassen, unter welchem Pfadnamen diese shell das Kommando gzip
finden würde.
Unter Windows wird der Einsatz des verbreiteten Perl-Interpreters ActivePerl empfohlen, welcher das Modul Compress::Zlib
mitliefert. Es ist jedoch auch unter Windows möglich, ein separates Programm (gzip.exe
) für die Komprimierung zu verwenden. (Tatsächlich wurde gzip_cnc sogar mit dieser Methode auf einer Windows-Plattform entwickelt und getestet.)
Environment-Variable: GZIP_CNC_PROGRAM
.
Festlegung des Wurzelverzeichnisses für den Cache-Baum
my $cache_directory = '';
Dieser Parameter beschreibt den vollständigen Pfadnamen des Verzeichnisses, innerhalb dessen gzip_cnc seinen Verzeichnisbaum für den Cache der komprimierten Versionen aller angeforderten Dateien aufbaut.
Wurde an dieser Stelle eine leere Zeichenkette angegeben, dann verwendet gzip_cnc automatisch das Verzeichnis .gzip_cnc_cache
im DOCUMENT_ROOT
der entsprechenden Domain. In diesem Falle liegen auch die Cache-Dateien innerhalb des URL-Baums und wären daher direkt via URL ansprechbar, können jedoch nur bei entsprechender Konfiguration des Webservers und zudem nur durch hinreichend fähige Browser korrekt verarbeitet werden. Deshalb wird empfohlen, das Cache-Verzeichnis außerhalb des URL-Raums anzulegen.
gzip_cnc legt bei Bedarf alle erforderlichen Verzeichnisse für den Cache selbst an. Sollte dies nicht funktionieren (z. B. wegen fehlender Schreibberechtigung), dann liefert gzip_cnc die angeforderten Daten in unkomprimierter Form aus und vermerkt dies in seiner Protokolldatei mit einem entsprechenden Statuscode.
Environment-Variable: GZIP_CNC_CACHE
.
Festlegung der gzip_cnc-eigenen Protokolldatei
my $logfile_path = '';
Dieser Parameter beschreibt den vollständigen Pfadnamen der von gzip_cnc zu erzeugenden Protokolldatei.
Wurde an dieser Stelle eine leere Zeichenkette angegeben, dann erzeugt gzip_cnc keine Protokolldatei.
Wird ein Pfadname angegeben, dann versucht gzip_cnc dort, eine Protokolldatei anzulegen (und ggf. auch alle dafür erforderlichen Verzeichnisse innerhalb des Pfadnamens) bzw. eine bereits vorhandene Datei am Ende zu erweitern; falls dies scheitert (z. B. wegen fehlender Schreibberechtigung), dann werden keine Protokollmeldungen erzeugt (ohne explizite Warnung an den Benutzer).
Environment-Variable: GZIP_CNC_LOGFILE
.
Festlegung des zu verwendenden Fehlerdokuments
my $error404_handler = '';
Dieser Parameter beschreibt den absoluten URL (inklusive Domain-Anteil) der von gzip_cnc zu verwendenden Fehlerbehandlungsseite im Falle eines Zugriffs auf eine nicht vorhandene Datei.
Ein Apache-Handler wird aktiviert, nachdem ein großer Teils der Auswertung eines URL-Zugriffs abgeschlossen ist (zu diesem Zeitpunkt sind beispielsweise URL-Übersetzungen aller Art bereits durchgeführt worden: URL-Rewriting, Directory Defaults, Content Negotiation, ...). Der Apache-Server hat jedoch keineswegs überprüft, ob die tatsächlich angeforderte Datei überhaupt existiert. Diese Prüfung muß also von gzip_cnc selbst erledigt werden.
Falls die gewünschte Datei tatsächlich nicht existiert, dann würde der Apache-Server normalerweise eine Definition einer Fehlerbehandlungsseite durch den Administrator auswerten und deren Inhalt an den Client ausliefern. Beachte allerdings, daß gzip_cnc kein Apache-Modul ist und keinen internen Subrequests starten kann für den Fall, daß Dein Fehlerdokument ein CGI-Program oder ein SSI-Dokument ist oder ggf. auch via Content Negotiation dynamisch ausgewählt wird - und es kann auch nicht die Information darüber, welche Seite ursprünglich angefordert wurde, in derselben Weise anbieten (als Environment-Variable), wie Apache selbst das getan hätte. "Houston, wir haben ein Problem."
gzip_cnc kann Dir nicht alles geben, was Du vielleicht haben möchtest - es läßt Dir jedoch die Wahl, was Dir am Wichtigsten erscheint:
- Falls Dir am wichtigsten ist, im Falle einer fehlenden Seite einen HTTP-Statuscode 404 zurückzuliefern, dann kannst Du kein dynamisches Fehlerdokument verwenden, sondern nur ein statisches. In diesem Fall gibst Du den vollqualifizierten Pfadnamen der als Fehlerdokument auszuliefernden Datei als Wert des Parameters
$error404_handler
an. gzip_cnc wird dann diese Datei öffnen, ihren Inhalt einlesen und ihn zusammen mit passenden HTTP-Headern für dieses Ereignis ausliefern. - Falls Dir am wichtigsten ist, die Kontrolle über das Fehler-Ereignis zu erhalten, d. h. Deinen dynamischen Handler einzusetzen, dann kannst Du dem Client nicht den HTTP-Status 404 senden. In diesem Fall gibst Du den vollqualifizierten URL der Seite, die via HTTP als Fehlerdokument angefordert werden soll (beginnend mit
http://
) als Wert des Parameters$error404_handler
an. gzip_cnc wird dann den HTTP-Status 302 senden und eine HTTP-Weiterleitung auf Dein Fehlerdokument auslösen, und es wird diesem sogar die Information über den im Original-Request angeforderten URL übermitteln, indem es dem CGI-Parameterurl=
den Wert des URL zuweist und an den Query-String des Fehlerdokuments anhängt. Auf diese Weise kann Dein Fehlerdokument den Query-String analysieren und spezifisch auf das Ereignis reagieren. - Falls alles bisher Erwähnte Dich nicht interessiert, kannst Du diesen Parameterwert einfach leer lassen. gzip_cnc wird dann sein eigenes kleines Fehlerdokument ausliefern (das im Perl-Skript fest eingebrannt ist), welches dem Benutzer wenigstens mitteilen wird, welches Dokument angefordert, aber nicht gefunden wurde. Dies ist die für Deine Besucher am wenigsten komfortable Alternative, aber sie könnte ausreichen.
Environment-Variable: GZIP_CNC_404_HANDLER
.
Festlegung des auszuliefernden MIME-Typs
my $mime_type = 'text/html';
Dieser Parameter beschreibt den von gzip_cnc als HTTP-Header der ausgelieferten Antworten zu sendenden MIME-Typ.
In seiner Funktion als Apache-Handler hat gzip_cnc keinen Zugriff auf die Apache-Konfiguration, welche eine Abbildung des Namens der angeforderten Datei auf einen MIME-Typ enthält. Deshalb muß im Programm selbst ein entsprechender Wert definiert werden.
Für künftige Programmversionen wäre es denkbar, eine Tabelle zur Abbildung von z. B. Dateinamensmuster auf MIME-Typen anzubieten. Der entsprechende Aufwand erscheint aber derzeit nicht vertretbar:
- Einerseits gibt es außer
text/html
nur wenige MIME-Typen, deren komprimierte Auslieferung- sowohl gefahrlos möglich (CSS und JavaScript sind aufgrund von Browser-Bugs bedenklich)
- als auch vielversprechend (viele Graphik- und Multimediaformate werden bereits in komprimierter Form gespeichert)
- andererseits ist es für den Anwender ja kein Problem, sich pro MIME-Typ eine separate Kopie von gzip_cnc anzufertigen, diesen Parameterwert in jeder Kopie entsprechend anzupassen und mehrere Abbildungen von Dateinamen auf Handler-Instanzen via Apache-Konfiguration vorzunehmen.
Environment-Variable: GZIP_CNC_MIMETYPE
.
Senden gzip_cnc-eigener HTTP-Header
my $send_own_headers = 1;
Dieser Parameter entscheidet darüber, ob gzip_cnc zusätzlich zu den sonstigen Informationen eigene HTTP-Header mitsenden darf. Diese HTTP-Header sind:
X-Gzipcnc-Original-File-Size
beschreibt die Original-Größe des ausgelieferten Dokuments.X-Gzipcnc-Version
beschreibt die Versionsnummer des verwendeten gzip_cnc-Skripts.
Falls an dieser Stelle der Wert 0
eingetragen wird, dann werden diese beiden HTTP-Header nicht gesendet. Und weil beide Path
-Header zwar zum Verständnis des Zugriffsverfahrens hilfreich sein können, aber verräterische Informationen über Deine Server-Konfiguration bekannt geben würden, werden sie nur dann erzeugt, wenn gzip_cnc zusätzlich mit aktiviertem Selbsttest-Modus verwendet wird.
Environment-Variable: GZIP_CNC_OWNHEADERS
.
Aktivierung des Selbsttest-Modus
my $enable_self_test_mode = 1;
Dieser Parameter entscheidet darüber, ob der Selbsttest-Modus von gzip_cnc verfügbar ist.
Während der Installations- und Testphase ist es sinnvoll, dieses Feature zu verwenden, um Anhaltspunkte für korrekte Werte der einstellbaren Parameter zu erhalten. Allerdings enthüllt die Ausgabe im Selbsttest-Modus reale absolute Pfadnamen des Servers und kann deshalb deaktiviert werden, falls dies aus Sicherheitsgründen ratsam erscheint.
Environment-Variable: GZIP_CNC_SELFTEST
.
Senden einer Browser-Cache-Aufbewahrungsdauer
my $cache_expire_seconds = 86400;
Dieser Parameter beschreibt, wie viele Sekunden lang ein Browser den Inhalt der ausgelieferten Seite in seinem Cache halten darf, ohne die Gültigkeit des Inhalts durch Rückfrage beim HTTP-Server zu überprüfen.
Eigentlich gehört Browser-Caching nicht zum Aufgabengebiet von gzip_cnc. Andererseits: Keine Datenübertragung via HTTP kann wirkungsvoller komprimiert werden als eine, die vom Browser gar nicht erst angefordert wurde. Und besonders bei kleinen, oft verwendeten Seiten (etwa Navigationselemente bei Verwendung von Framesets) kann es durchaus etwas nützen, wenn der Browser so eingestellt ist, daß er dem Gültigkeitsintervall glaubt, das ihm durch die HTTP-Header
Cache-Control: public,max-age=
<Sekunden> (für HTTP/1.1-Clients) undExpires:
<Datumsangabe> (für HTTP/1.0-Clients)
übermittelt wurde, statt dieselbe Seite immer wieder vom Server anzufordern.
Andererseits: Ist an dieser Stelle ein sehr hoher Wert eingetragen und haben sich URLs geändert, dann müssen nun nicht mehr verwendete Dateien mindestens für den definierten Gültigkeitszeitraum vorrätig gehalten werden, da in den Browser-Caches noch entsprechende Verweise auf diese Dateien vorhanden sein können.
Sollten allerdings nachträgliche Änderungen am Inhalt existierender Dokumente ausgeschlossen werden können, dann kann für diesen Parameter ein sehr hoher Wert sinnvoll sein.
Falls an dieser Stelle der Wert 0
eingetragen wird, dann werden diese beiden HTTP-Header nicht gesendet.
Environment-Variable: GZIP_CNC_EXPIRES
.
Konfiguration über Environment-Variablen
Statt durch eine Änderung des Programm-Quelltextes können die Werte der Parameter auch mit Hilfe von Environment-Variablen in der Webserver-Konfiguration gesetzt werden.
Dafür müssen folgende Voraussetzungen gegeben sein:
- Das Apache-Modul
mod_env
muß verfügbar sein. (Dies ist sehr wahrscheinlich der Fall, da es sich um ein Standard-Modul handelt.) - Die Möglichkeit zum Setzen von Environment-Variablen innerhalb von
.htaccess
-Dateien muß gegeben sein - was bedeutet, daß der Apache-Server wenigstens in der Version 1.3.7 (aus dem Jahr 1999) vorliegen muß. - Die Webserver-Konfiguration muß das Setzen von Environment-Variablen innerhalb einer
.htaccess
-Datei erlauben. (Dafür ist die DirektiveAllowOverride FileInfo
in der Webserver-Konfiguration erforderlich, die bereits die Voraussetzung für die Einbindung von gzip_cnc als Handler ist - ohne sie ist das Programm gar nicht verwendbar.)
Für das Setzen einer Environment-Variable ist die Apache-Direktive SetEnv
verfügbar.
Es ist zulässig, diese Environment-Variablen in derselben .htaccess
-Datei zu setzen, welche auch die Aktivierung von gzip_cnc bewirkt. Alternativ reicht es aber aus, diese Environment-Variablen nur genau für den URL des Programms gzip_cnc zu definieren; dies würde das Risiko reduzieren, das Verhalten anderer CGI-Anwendungen in unerwünschter Weise zu beeinflussen.
Die Standardwerte aller Parameter entsprechen der folgenden Apache-Konfiguration:
<Files gzip_cnc.pl> SetEnv GZIP_CNC_QUALITY 9 SetEnv GZIP_CNC_PROGRAM /usr/bin/gzip SetEnv GZIP_CNC_CACHE "" SetEnv GZIP_CNC_LOGFILE "" SetEnv GZIP_CNC_404_HANDLER "" SetEnv GZIP_CNC_MIMETYPE text/html SetEnv GZIP_CNC_OWNHEADERS 1 SetEnv GZIP_CNC_SELFTEST 1 SetEnv GZIP_CNC_EXPIRES 86400 </Files>
Diese Anweisungen sind ggf. den Anforderungen des eigenen Installation anzupassen.
Installation des Programms als CGI-Skript
gzip_cnc muß in Deinem Webspace als CGI-Skript installiert werden.
Wie das genau funktioniert, hängt in so vielfältiger Weise von den Eigenheiten Deines Webspace ab, daß eine detaillierte Beschreibung an dieser Stelle nicht möglich ist.
Deshalb seien lediglich ein paar Anhaltspunkte genannt:
- Der Pfad zum Perl-Interpreter
#!/usr/bin/perl
in Zeile 1 des Skriptesgzip_cnc.pl
muß möglicherweise angepaßt werden. - Bei einer Installation via FTP sollte die Skript-Datei im ASCII-Modus zum Server übertragen werden (Perl-Interpreter unter UNIX mögen keine DOS/Windows-Zeilenumbrüche).
- Die Skript-Datei darf beliebig umbenannt werden, falls
- dies für die CGI-Installation erforderlich sein sollte (manche Webserver-Konfigurationen verlangen bestimmte Namensendungen etc.) oder
- die Befürchtung besteht, daß Benutzer Informationen über die Verzeichnistruktur des Servers erhalten, die ihnen nicht zustehen (durch Verwendung der Selbsttest-Funktion des Skripts).
- Bei manchen Providern ist der FTP-Server so konfiguriert, daß der FTP-Client nur relative Pfadnamen (bezogen auf das Wurzelverzeichnis der Benutzerkennung) anzeigt; in diesem Falle ist es nicht einfach, die korrekten absoluten Pfadnamen für Cache-Wurzelverzeichnis und Protokolldatei herauszufinden. In diesem Falle kann die Selbsttest-Funktion von gzip_cnc hilfreiche Zusatzinformationen liefern.
- Bei manchen Providern ist der Webserver so konfiguriert, daß CGI-Skripte nicht unter derjenigen Benutzerkennung, welcher die entsprechende Datei gehört, sondern unter einer eigenen Benutzerkennung des Webservers ausgeführt werden. Diese Benutzerkennung muß Schreibrecht auf Cache-Wurzelverzeichnis und Protokolldatei haben; es kann also notwendig sein, beide Objekte auf dem Server für alle Benutzerkennungen schreibbar anzulegen (
chmod 777
).
Als allgemeinen Hintergrund zu diesem Thema kann ich zudem noch diese Seite empfehlen.
Selbsttest des CGI-Skripts
Nachdem das CGI-Skript erfolgreich installiert ist, kann es über den entsprechenden URL im Browser angesprochen werden.
Das Skript erkennt automatisch, daß es nicht als Apache-Handler aktiviert wurde und demzufolge nichts zu komprimieren hat. Statt dessen führt das Skript in diesem Falle einen Selbsttest durch - es
- zeigt die vollständigen Pfadnamen
- seiner eigenen Skript-Datei und
- des Dokument-Wurzelverzeichnisses dieser Domain
- gibt alle eingestellten Parameterwerte aus und
- prüft die Verfügbarkeit
- des
gzip
-Programms, - des Perl-Moduls
Compress::Zlib
sowie - des Cache-Wurzelverzeichnisses
- des
und zeigt die Ergebnisse dieser Tests dem Aufrufer in Form einer Webseite zurück.
Falls irgend etwas falsch konfiguriert wurde, ist die Chance sehr hoch, daß die Selbsttest-Funktion dies bemerkt - zu einem Zeitpunkt, zu dem der normale Betrieb des Webspace noch nicht beeinträchtigt wurde.
Die Selbsttest-Funktion bewirkt die Ausgabe einer Meldung in die Protokolldatei (und damit möglicherweise die implizite Erzeugung dieser Datei während der ersten Anforderung).
Aktivierung von gzip_cnc
Einbinden des Handlers
Abschließend muß das CGI-Skript als Handler in die Apache-Konfiguration eingebunden und mit den zu verarbeitenden Dateien verknüpft werden.
Dies geschieht üblicherweise durch eine .htaccess
-Datei. Die Direktive
Action text/html /cgi-bin/gzip_cnc.pl
verknüpft das CGI-Skript /cgi-bin/gzip_cnc.pl
mit allen Dateien des MIME-Typs text/html
(gemäß der restlichen Apache-Konfiguration - welche Dateien das auch immer sein mögen).
Soll diese Verknüpfung nur für Dateien mit einem bestimmten Namensmuster, beispielsweise *.html
, eingerichtet werden, dann kann diese Einbindung des Handlers in der Syntax
<Files *.html>
Action text/html /cgi-bin/gzip_cnc.pl
</Files>
bedingt formuliert werden.
Für mehrere Namensmuster, beispielsweise *.htm
und *.html
, wäre eine Einbindung der Art
<Files ~ \.html?$>
Action text/html /cgi-bin/gzip_cnc.pl
</Files>
verwendbar - ebenso wie viele andere mögliche Formen der Einbindung, die in der Apache-Dokumentation ausführlich beschrieben werden.
Koexistenz von gzip_cnc und Server Side Includes
Es sei ausdrücklich darauf hingewiesen, daß Dateien, deren Inhalt selbst via SSI in andere Dokumente eingefügt werden soll, nicht in komprimierter Form ausgeliefert werden dürfen. Der SSI-Handler würde den komprimierten Inhalt in eine ansonsten unkomprimierte Seite einfügen und das Ergebnis an den Browser ausliefern, der das Ergebnis nicht verstehen würde.
Es ist also zu empfehlen, für solche Dateien (die ohnehin nur Teile von HTML-Dokumenten enthalten) eine andere Namensendung zu verwenden. gzip_cnc kann nicht erkennen, ob eine normale Anforderung oder ein Apache-interner Subrequest verarbeitet werden soll.
(mod_gzip als Apache-Modul kann solche Zugriffsarten voneinander unterscheiden und komprimiert nur Antworten auf 'normale' Anforderungen.)
Testen der Installation
Falls irgend etwas während der Installation nicht funktioniert hat, aber das CGI-Skript durch die Bindung aller Dokumente an diesen Handler für den gesamten Web-Auftritt aktiviert wurde, könnte im schlimmsten Falle solange keine einzige statische HTML-Seite mehr ausgeliefert werden, bis der Fehler behoben oder diese Bindung wieder aufgehoben wurde (durch Entfernen des entsprechenden Eintrags in der .htaccess
-Datei - Änderungen in solchen Dateien treten sofort in Kraft, dazu ist kein Neustart des Webservers erforderlich).
Daher empfiehlt es sich, erst mal ein Test-Verzeichnis mit einer Handvoll Dokumente zu erzeugen, die .htaccess
-Datei dort wie beschrieben anzulegen und auszuprobieren, was passiert:
- Werden die Seiten weiterhin korrekt im Browser angezeigt?
- Wird das CGI-Skript vom Apache-Webserver tatsächlich als Handler verwendet, d. h.:
- Wurden Dateien im Cache-Verzeichnis angelegt?
- Wurden Meldungen in die Protokolldatei von gzip_cnc geschrieben?
- Ist die Größe der ausgelieferten Dokumente wie erwartet deutlich kleiner geworden?
(Einige Browser zeigen diese Größe während der Übertragung an; auch ein Blick in die Apache-Protokolldateiaccess_log
kann darüber Aufschluß bringen.) - Werden nun tatsächlich gzip-komprimierte Daten an den Browser geliefert?
(Dies kann durch einen Blick auf HTTP-Header und Daten der Antwort des Webservers mit Hilfe eines geeigneten Programms überprüft werden - ebenso wie die Auslieferung der zusätzlichen HTTP-Header von gzip_cnc.)
Erst nachdem alles wie erwartet funktioniert hat, sollte der Inhalt dieser .htaccess
-Datei in das Wurzelverzeichnis des zu verarbeitenden Dateibaums übertragen werden. Ab diesem Moment wird der Handler für den gesamten Verzeichnisbaum in Aktion treten (und das Cache-Verzeichnis nach und nach mit Unterverzeichnissen und Dateien bevölkern).
Aufgrund der Erfahrungen mit der Version 1.10 empfehle ich ausdrücklich, die Erkennung illegaler Zugriffe zu testen.
(Michael Schröpl, 2004-01-11)