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 commande
cmd=
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=mode
mode=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 MIME
intype=
ne seront pas filtr�s.outtype=type MIME
PreservesContentLength
PreservesContentLength
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 filtre
disableenv=env
enableenv=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 | NoLogStderr
LogStderr
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..