Serveur Apache HTTP Version 2.4

| Description: | Fait traiter le corps de la r�ponse par un programme externe avant de l'envoyer au client |
|---|---|
| Statut: | Extension |
| Identificateur�de�Module: | ext_filter_module |
| Fichier�Source: | mod_ext_filter.c |
mod_ext_filter repr�sente un mod�le de
programmation simple et bien connu pour les filtres. Avec ce module, tout programme
qui lit l'entr�e standard stdin et �crit sur la sortie standard
stdout (autrement dit une commande filtre de style Unix) peut
servir de filtre pour Apache. Ce m�canisme de filtrage est beaucoup
plus lent qu'un filtre sp�cialement �crit pour
l'API d'Apache et faisant partie int�grante du processus du serveur
Apache, mais il pr�sente les avantages suivants :
M�me dans le cas o� le niveau de performance est insuffisant pour
une utilisation en production, on peut utiliser
mod_ext_filter comme prototype d'environnement pour
les filtres.
# la directive de mod_ext_filter d�finissant un filtre
# permettant de mettre des fichiers text/c au format HTML en
# utilisant le programme externe /usr/bin/enscript, le type du
# fichier r�sultant �tant d�fini � 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">
# directive de base permettant de traiter la sortie avec le
# nouveau filtre
SetOutputFilter c-to-html
# directive de mod_mime d�finissant le type des fichiers dont
# le nom poss�de l'extension .c � text/c
AddType text/c .c
</Directory>
Note : cet exemple avec gzip n'est fourni qu'� titre
d'illustration. Veuillez vous reporter � la documentation de
mod_deflate pour un exemple d'impl�mentation plus
r�aliste.
# la directive de mod_ext_filter qui d�finit le filtre externe
ExtFilterDefine gzip mode=output cmd=/bin/gzip
<Location /gzipped>
# directive de base permettant de traiter la sortie avec le
# filtre gzip
SetOutputFilter gzip
# la directive de mod_header permettant d'ajouter le champ
# d'en-t�te "Content-Encoding: gzip"
Header set Content-Encoding gzip
</Location>
# directive de mod_ext_filter d�finissant un filtre qui fait
# passer tout les flux en sortie par la commande cat ; cat ne
# modifie rien ; elle ne fait que compliquer le cheminement des
# flux et consommer des ressources suppl�mentaires
ExtFilterDefine slowdown mode=output cmd=/bin/cat \
preservescontentlength
<Location />
# directive de base permettant de traiter plusieurs fois la
# sortie avec le filtre slowdown
#
SetOutputFilter slowdown;slowdown;slowdown
</Location>
# directive de mod_ext_filter d�finissant un filtre qui
# remplace du texte dans la r�ponse
#
ExtFilterDefine fixtext mode=output intype=text/html \
cmd="/bin/sed s/verdana/arial/g"
<Location />
# directive de base permettant de traiter la sortie avec le
# filtre fixtext
SetOutputFilter fixtext
</Location>
# Trace les donn�es lues et �crites par mod_deflate pour un
# client particulier (IP 192.168.1.31) qui a des probl�mes de
# compression.
# Ce premier filtre va tracer ce qui entre dans mod_deflate.
ExtFilterDefine tracebefore \
cmd="/bin/tracefilter.pl /tmp/tracebefore" \
EnableEnv=trace_this_client
# Ce second filtre va tracer ce qui sort de mod_deflate.
# Notez que sans le param�tre ftype, le type de filtre par
# d�faut AP_FTYPE_RESOURCE placerait le filtre *avant*
# mod_deflate dans la cha�ne de filtrage. Le fait d'affecter
# � ce param�tre une valeur num�rique sensiblement sup�rieure �
# AP_FTYPE_CONTENT_SET permet de s'assurer que le filtre sera
# plac� apr�s mod_deflate.
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
SetOutputFilter tracebefore;deflate;traceafter
</Directory>
#!/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);
| Description: | D�finit un filtre externe |
|---|---|
| Syntaxe: | ExtFilterDefine nom filtre param�tres |
| Contexte: | configuration du serveur |
| Statut: | Extension |
| Module: | mod_ext_filter |
La directive ExtFilterDefine permet de
d�finir les caract�ristiques d'un filtre externe, et en particulier
le programme � ex�cuter ainsi que ses arguments.
nom filtre sp�cifie le nom du filtre en cours de
d�finition. On peut ensuite utiliser ce nom pour r�f�rencer le
filtre dans les directives SetOutputFilter. Il doit �tre unique parmi les noms de
tous les filtres enregistr�s. Pour le moment, aucune erreur
n'est signal�e par l'API register-filter, si bien qu'un probl�me de
noms dupliqu�s ne sera pas port� � la connaissance de
l'utilisateur.
Viennent ensuite un ou plusieurs param�tres dans un ordre
ind�fini, qui permettent de sp�cifier la commande externe � ex�cuter
et certaines autres caract�ristiques. Le seul param�tre obligatoire
est cmd=. Voici la liste de ces param�tres :
cmd=ligne de commandecmd= permet de sp�cifier la commande
externe � ex�cuter. Si la ligne de commande comporte des
arguments, elle doit �tre entour�e de guillemets (par exemple
cmd="/bin/mypgm arg1
arg2"). Les guillemets habituels du shell ne
sont pas n�cessaires car le programme est lanc� directement, sans
passer par le shell. Les arguments du programme doivent �tre
s�par�s par des espaces. Si un argument contient des espaces, ces
derniers doivent �tre �chapp�s par un antislash '\'. Si un
argument contient des antislashes '\', ces derniers doivent �tre
eux-m�mes �chapp�s par un antislash '\'. Outre les variables
d'environnement CGI standards, les variables DOCUMENT_URI,
DOCUMENT_PATH_INFO, et QUERY_STRING_UNESCAPED seront aussi
d�finies pour le programme.mode=modemode=output (valeur par d�faut) pour les
filtres qui traitent les r�ponses. Utilisez
mode=input pour les filtres qui traitent les
requ�tes. mode=input est disponible depuis la version
2.1 d'Apache.intype=type MIMEintype= ne seront pas filtr�s.outtype=type MIMEPreservesContentLengthPreservesContentLength indique que le
filtre doit conserver la taille du contenu. Ce n'est pas le
comportement par d�faut, car la plupart des filtres modifient cette
taille. Ce mot-cl� doit �tre sp�cifi� si le filtre ne doit pas
modifier la taille du contenu.ftype=type de filtredisableenv=envenableenv=env| Description: | Configure les options de
mod_ext_filter |
|---|---|
| Syntaxe: | ExtFilterOptions option [option] ... |
| D�faut: | ExtFilterOptions NoLogStderr |
| Contexte: | r�pertoire |
| Statut: | Extension |
| Module: | mod_ext_filter |
La directive ExtFilterOptions permet de
sp�cifier des options de traitement particuli�res pour
mod_ext_filter. Les arguments option
peuvent contenir :
LogStderr | NoLogStderrLogStderr indique que les messages
envoy�s par le programme de filtrage externe sur la sortie
d'erreurs standard doivent �tre enregistr�s dans le journal des
erreurs d'Apache. NoLogStderr inverse ce
comportement.Onfail=[abort|remove]abort (la valeur par
d�faut), la requ�te sera abandonn�e. Avec remove, le
filtre est supprim�, et le traitement de la requ�te se poursuit
sans lui.
ExtFilterOptions LogStderr
Les messages envoy�s vers la sortie d'erreurs standard du filtre seront enregistr�s dans le journal des erreurs d'Apache..