Title: Beispiele
mod_ext_filter Das HTTP-Antwortpaket wird vor der Auslieferung an den Client an ein externes Programm übergeben. Erweiterung mod_ext_filter.c ext_filter_module Das Modul
mod_ext_filter präsentiert ein einfaches und gewohntes Programmier-Modell zur Einbindung von Filter. Mit diesem Modul kann ein Programm, das vonstdinliest und instdoutschreibt (ein Filterbefehl im Unix-Stil), auch als Apache-Filter verwendet werden. Dieser Filtermechanismus ist wesentlich langsamer als ein Filter, der speziell für die Apache-API programmiert wurde und der innerhalb des Serverprozesses ausgeführt wird und hat folgende Vorteile:
- Das Programmiermodell ist wesentlich einfacher.
- Es kann jede Programmier- oder Skriptsprache benutzt werden, die zulässt, dass das Programm die Standardeingabe liest und in die Standardausgabe schreibt.
- Vorhandene Programm können ohne Änderungen als Apache-Filter benutzt werden.
Auch wenn die Leistungscharakteristika für den produktiven Einsatz nicht genügen, kann das Modul
mod_ext_filter dennoch als Prototyp für Filter dienen.Filter HTML-Ausgaben mit einem anderen Antworttyp erzeugen # mod_ext_filter-Direktive, um den Debug-Level hoch genug zu setzen,
# dass pro Anfrage ein Protokolleintrag pro Request erzeugt wird
# (um zu demonstrieren, dass diese Konfiguration tatsächlich eine Wirkung
# hat). Der MIME-Content-Typ ist text/html.
ExtFilterDefine c-to-html mode=output \
intype=text/c outtype=text/html \
cmd="/usr/bin/enscript --color -W html -Ec -o - -"
<Directory "/export/home/trawick/apacheinst/htdocs/c">
# Die Direktive für die Ausgabe mit dem neuen Filter </Directory>
SetOutputFilter c-to-html
# Die mod_mime-Direktive für den Typ .c
AddType text/c .c
# Die mod_ext_filter-Direktive für den Debug-
# Level hoch genug für eine Nachricht über die Konfiguration
# pro Anfrage setzen
ExtFilterOptions DebugLevel=1
Implementierung eines Inhaltkodierungsfilters Hinweis: Das
gzip-Beispiel dient lediglich der Veranschaulichung. Eine nützliche Implementierung finden Sie untermod_deflate .# Die mod_ext_filter-Direktive für die Definition des externen Filters
ExtFilterDefine gzip mode=output cmd=/bin/gzip
<Location /gzipped>
# Die Direktive für die Anwendung des gzip-Filters </Location>
# auf die Ausgabe
SetOutputFilter gzip
# Die mod_header-Direktive zum _Hinzufügen_ des Header-Feldes
# "Content-Encoding: gzip"
Header set Content-Encoding gzip
Den Server verlangsamen # Die mod_ext_filter-Direktive für die Definition eines Filters,
# dder alle Ausgaben durch 'cat' hindurch schickt; cat verändert
# nichts, sondern führt nur zu längeren Pfaden
# und benötigt mehr Ressourcen.
ExtFilterDefine slowdown mode=output cmd=/bin/cat \
preservescontentlength
<Location />
# Die Direktive für die mehrfache Anwendung des </Location>
# slowdown-Filters auf die Ausgabe
#
SetOutputFilter slowdown;slowdown;slowdown
Mit sed Text in der Antwort ersetzen # Die mod_ext_filter-Direktive für die Definition eines Filters,
# der Text in der Antwort ersetzt.
#
ExtFilterDefine fixtext mode=output intype=text/html \
cmd="/bin/sed s/verdana/arial/g"
<Location />
# Die Direktive für die Anwendung des 'fixtext'-Filters </Location>
# auf die Ausgabe
SetOutputFilter fixtext
Einen anderen Filter überwachen # Die von mod_deflate geschriebenen und gelesenen Daten
# für einen bestimmten Client (IP 192.168.1.31) protokollieren,
# um Komprimierungsprobleme zu erkennen.
# Dieser Filter überwacht die Daten für mod_deflate.
ExtFilterDefine tracebefore \
cmd="/bin/tracefilter.pl /tmp/tracebefore" \
EnableEnv=trace_this_client
# Dieser Filter überwacht, was nach der Verarbeitung # durch mod_deflate heraus kam.
# Ohne die explizite Angabe eines ftype-Parameters
# würde der (dann implizit gültige) Default-Filtertyp
# AP_FTYPE_RESOURCE bewirken, dass dieser Filter
# (nämlich unser Trace-Filter) innerhalb der Filter-Kette
# vor den mod_deflate-Filter gesetzt würde
# *vor* den Filter mod_deflate gesetzt.
# Ein etwas höherer Wert als AP_FTYPE_CONTENT_SET
# sorgt dafür, dass er nach
# mod_deflate platziert wird.
ExtFilterDefine traceafter \
cmd="/bin/tracefilter.pl /tmp/traceafter" \
EnableEnv=trace_this_client ftype=21
<Directory /usr/local/docs>
SetEnvIf Remote_Addr 192.168.1.31 trace_this_client </Directory>
SetOutputFilter tracebefore;deflate;traceafter
Der Filter für die Protokollierung der Daten: #!/usr/local/bin/perl -w
use strict;
open(SAVE, ">$ARGV[0]")
or die "can't open $ARGV[0]: $?";
while (<STDIN>) {
print SAVE $_; }
print $_;
close(SAVE);ExtFilterDefine Definition eines externen Filters ExtFilterDefine Filtername Parameter server config Die
ExtFilterDefine -Direktive definiert die Charakteristika eines externen Filters, einschließlich des dabei auszuführenden Programms und dessen Argumente.Filtername ist die Bezeichnung des definierten Filters. Dieser Name kann in
SetOutputFilter- Direktiven benutzt werden. Alle registrierten Filter müssen eine eindeutige Bezeichnung haben. Zur Zeit wird von API zur Registrierung von Filtern keine Fehlermeldung ausgegeben, so dass doppelt vergebene Namen nicht zu erkennen sind.Die weiteren Parameter können in beliebiger Reihenfolge stehen und definieren den auszuführenden externen Befehl sowie andere Merkmale. Nur der Parameter
cmd=muss angegeben werden:
cmd=cmdline- Mit dem Schlüsselwort
cmd=kann der auszuführende externe Befehl angegeben werden. Folgen auf Programmnamen Argumente, dann sollte die Befehlszeile in Anführungszeichen gesetzt werden (cmd="/bin/mypgm arg1 arg2"). Die normalen Shell-Anführungszeichen sind nicht erforderlich, da das Programm unter Umgehung der Shell direkt ausgeführt wird. Programmargumente werden durch Leerzeichen voneinander getrennt. Leerzeichen, die Bestandteil eines Arguments sind, werden mit einem Backslash gekennzeichnet. Ein Backslash, der Bestandteil eines Arguments ist, muss ebenfalls mit einem Backslash markiert werden. Zusätzlich zu den standardmäßigen CGI-Umgebungsvariablen werden die Variablen DOCUMENT_URI, DOCUMENT_PATH_INFO, und QUERY_STRING_UNESCAPED für das Programm gesetzt.mode=Modus- Als
Modussollte zur Zeitoutput(Voreinstellung) angegeben. Zukünftig wirdmode=inputverfügbar sein, um einen Filter für den Anfragenrumpf anzugeben.intype=imt- Dieser Parameter gibt den Internet-Medientyp an (MIME-Typ) der zu filternden Dokumente an. Standardmäßig werden alle Dokumente gefiltert. Wird
intype=angegeben, wird der Filter für Dokumente eines anderen Typs deaktiviert.outtype=imt- Dieser Parameter gibt den Internet-Medientyp (MIME-Typ) der gefilterten Dokumente an. Das ist sinnvoll, wenn der Filter den Internet-Medientyp während der Filteroperation ändert. Standardmäßig wird der Internet-Medientyp nicht geändert.
PreservesContentLength- Mit dem Schlüsselwort
PreservesContentLengthwird angegeben, dass der Filter die Datenlänge nicht verändert. Das ist nicht die Voreinstellung, denn die meisten Filter ändern den Datenumfang. Für den Fall, dass der Filter die Länge nicht verändert, sollte dieses Schlüsselwort angegeben werdenftype=Filtertyp- Dieser Parameter gibt den numerischen Wert für den Filtertyp an, unter dem der Filter registriert ist. Die Voreinstellung
AP_FTYPE_RESOURCEreicht meist aus. Muss der Filter an anderer Position in der Filterkette als Ressourcenfilter wirksam werden, dann ist dieser Parameter erforderlich. In der Dateiutil_filter.hunter denAP_FTYPE_foo- Definitionen finden Sie die entsprechenden Werte.disableenv=env- Dieser Parameter gibt die Umgebungsvariable an, die, falls sie gesetzt wurde, den Filter deaktiviert.
enableenv=env- Dieser Parameter gibt den Namen der Umgebungsvariable an, die gesetzt werden muss, wenn der Filter aktiviert werden soll.
ExtFilterOptions Konfigurieren von mod_ext_filter-OptionenExtFilterOptions Option [Option] ... ExtFilterOptions DebugLevel=0 NoLogStderr directory Die
ExtFilterOptions -Direktive gibt spezielle Verarbeitungsptionen fürmod_ext_filter an. Als Option kann angegeben werden:
DebugLevel=n- Mit dem Schlüsselwort
DebugLevelkann der Level für die vonmod_ext_filter erzeugten Fehlermeldungen angegeben werden. Standardmäßig werden keine Fehlermeldungen erzeugt, was der AngabeDebugLevel=0entspricht. Bei höheren Angaben werden Fehlermeldungen erzeugt, was die Serverleistung beeinträchtigen wird. Die Bedeutung der numerischen Werte wird bei den Definitionen derDBGLVL_-Konstanten nahe dem Anfang der Dateimod_ext_filter.cangegeben.Hinweis: mit der Direktive des Apache-Modules
coresollte dafür gesorgt werden, dass die Fehlermeldungen im Apache-Fehlerprotokoll gespeichert werden.LogStderr | NoLogStderr- Mit dem Schlüsselwort
LogStderrwird angegeben, dass die vom externen Filterprogramm nachstderrgeschriebenen Fehlermeldungen im Apache-Fehlerprotokoll gespeichert werden.NoLogStderrdeaktiviert diesen Ablauf.Beispiel ExtFilterOptions LogStderr DebugLevel=0Die vom Filter in die Standardfehlerausgabe geschriebenen Meldungen werden im Apache-Fehlerprotokoll gespeichert. Vom Modul
mod_ext_filter werden keine Fehlermeldungen erzeugt.--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
