Serveur Apache HTTP Version 2.0
Le serveur HTTP Apache permet de conserver et d'utiliser certaines informations dans des variables appel�es variables d'environnement. Ces informations peuvent servir � contr�ler divers param�tres tels que la journalisation ou le contr�le d'acc�s. Ces variables sont �galement utilis�es pour communiquer avec d'autres programmes, comme les scripts CGI. Ce document traite des mani�res de manipuler et de tirer parti de ces variables.
Bien qu'elles soient appel�es variables d'environnement, il ne s'agit pas de variables d'environnement contr�l�es par le syst�me d'exploitation. Ces variables sont conserv�es, et manipul�es suivant des m�canismes internes � Apache. Elles sont transform�es en v�ritables variables d'environnement (au sens syst�me) seulement quand elles doivent �tre pass�es � des scripts CGI ou � des scripts 'Server Side Includes'. Pour manipuler l'environnement du syst�me d'exploitation sur lequel tourne un serveur Apache, il suffit d'utiliser les m�thodes standard fournies par l'interpr�teur de commandes du syst�me d'exploitation.
Modules Apparent�s | Directives Apparent�es |
---|---|
La m�thode la plus simple pour d�finir une variable
d'environnement dans Apache est d'utiliser la directive
SetEnv
. Les variables
peuvent �galement �tre charg�es depuis l'interpr�teur de
commandes � partir duquel le serveur a �t� d�marr�, au moyen
de la directive PassEnv
.
Dans un but de souplesse, les directives que mod_setenvif
permet d'utiliser sont ajustables en fonction de certaines
caract�ristiques des requ�tes parvenant au serveur. Par exemple,
il est possible de d�finir une variable seulement si la requ�te
provient d'un certain type de navigateur (User-Agent), ou bien
si un champ Referer bien pr�cis est trouv�. Une souplesse encore
plus grande est offerte par la directive
RewriteRule
du
module mod_rewrite qui accepte le param�tre [E=...]
pour d�finir des variables d'environnement.
Enfin, la variable d'environnement UNIQUE_ID
est cr��e par mod_unique_id pour chaque requ�te, de mani�re �
�tre unique et donc repr�sentative de chaque requ�te.
En plus de toutes les variables d'environnement d�finies dans la configuration d'Apache et celles du syst�me d'exploitation, les sp�cifications CGI demandent que certaines variables d'environnement contenant des informations propres � la requ�te soient toujours pass�es aux scripts CGI et aux pages SSI.
suexec.c
.Modules Apparent�s | Directives Apparent�es |
---|---|
Une des principales utilisations des variables d'environnement est l'envoi d'informations aux scripts CGI. Comme pr�cis� ci- avant, l'environnement pass� aux scripts CGI contient des informations standard au sujet de la requ�te en plus de toutes les variables initialis�es au travers de la configuration d'Apache. Pour plus de d�tails, consultez le tutorial CGI.
Les documents analys�s par le serveur (documents SSI), g�r�s
par le filtre INCLUDES
de mod_include, peuvent
demander l'affichage de variables d'environnement au moyen de
l'�l�ment echo
, et peuvent les utiliser pour
personnaliser des pages en fonctions de certaines caract�ristiques
de la requ�te. Apache permet aussi l'utilisation de pages SSI avec
les variables d'environnement standard CGI comme discut� ci-avant.
Consultez le tutorial SSI
pour plus d'informations.
Les droits d'acc�s au serveur peuvent �tre contr�l�s au moyen
de variables d'environnement en utilisant les directives
allow from env=
et deny from env=
.
Celles ci, utilis�es avec SetEnvIf
, permettent un contr�le d'acc�s au serveur
tr�s souple en fonction de caract�ristiques propres au client. Par
exemple, il est possible d'utiliser ces directives pour refuser
l'acc�s au serveur � certains navigateurs (User-Agent).
Les variables d'environnement peuvent �tre enregistr�es dans
le journal des acc�s ('access log') au moyen de l'option
%e
de LogFormat
. De plus, la d�cision d'enregistrer ou
non certaines requ�tes peut �tre prise en fonction des variables
d'environnement au moyen de la directive
CustomLog
. Cette
m�thode, utilis�e avec la directive SetEnvIf
, permet un contr�le tr�s souple de
l'enregistrement des requ�tes. Par exemple, il est possible de
ne pas garder de trace des requ�tes demandant des noms de fichiers
se terminant par gif
, ou de n'enregistrer que les
requ�tes des clients situ�s hors du sous-r�seau auquel appartient
le serveur.
La directive Header
peut tirer parti de l'existence ou non d'une variable
d'environnement afin de choisir d'inclure certains en-t�tes
HTTP dans la r�ponse retourn�e au client. Ceci permet, par
exemple, d'envoyer un certain en-t�te de r�ponse seulement si un
en-t�te similaire a �t� positionn� dans la requ�te �manant du
client.
Il est possible d'utiliser une variable d'environnement pour
activer les filtres externes (g�r�s par
mod_ext_filter
au moyen de la directive
ExtFilterDefine
)
gr�ce aux options disableenv=
et
enableenv=
.
La forme %{ENV:...}
de TestString, dans
la directive RewriteCond
, permet au moteur de r��criture de
mod_rewrite d'utiliser les variables d'environnement pour
contr�ler les r��critures. Notez que toutes les variables
internes � mod_rewrite, accessibles sans le pr�fixe
ENV:
, ne sont pas des variables d'environnement
d'Apache. Elles sont uniquement propres � mod_rewrite et ne
peuvent pas �tre utilis�es par d'autres modules.
Certains probl�mes li�s � l'interop�rabilit� ont conduit � la
mise en place de m�canismes sp�ciaux, qui modifient le
fonctionnement d'Apache selon le type des clients auxquels il
r�pond. Afin de garantir la plus grande souplesse possible, ces
m�canismes sont contr�l�s par des variables d'environnement
sp�ciales, telles que BrowserMatch
, bien qu'on puisse �galement utiliser
SetEnv
et
PassEnv
par exemple.
Ceci oblige Apache � traiter la requ�te comme du HTTP/1.0 m�me si elle a �t� construite sur une norme plus r�cente.
Ceci provoque l'effacement de tous les champs Vary
de l'en-t�te de r�ponse avant qu'il ne soit envoy� au client.
Certains clients interpr�tent mal ce champ (voir
les probl�mes avec
certains clients), et initialiser cette variable peut
permettre de r�soudre ce probl�me. Cette variable requiert
�galement l'utilisation de force-response-1.0.
Ceci oblige Apache � n'envoyer que des r�ponses en HTTP/1.0 aux clients r�alisant une requ�te en HTTP/1.0. Cette fonction a �t� impl�ment�e au d�part pour r�soudre un probl�me avec les serveurs mandataires d'AOL. Certains clients HTTP/1.0 r�agissent mal quand ils re�oivent une r�ponse en HTTP/1.1, ce qui peut poser des probl�mes d'interop�rabilit� avec eux.
Si cette variable est positionn�e avec une valeur de "1", le
filtre de sortie DEFLATE du module mod_deflate
se retrouve d�sactiv� pour les documents dont le type mime n'est
pas text/html
.
Si cette variable est initialis�e, le filtre DEFLATE
du module mod_deflate
est totalement d�sactiv�.
Si cette variable est initialis�e, les fonctions
KeepAlive
sont d�sactiv�es.
Cette variable modifie le fonctionnement de
mod_negotiation
. Si la variable contient un
marqueur de langue (comme en
, ja
ou
x-klingon
), le module mod_negotiation
va tenter de fournir une r�ponse dans cette langue parmi les
variantes possibles. Si aucune de ces variantes n'existe, une
n�gociation normale aura
lieu.
Cette variable rend le serveur plus attentif quand il doit envoyer une redirection au client. Cette variable est habituellement utilis�e quand un client a un probl�me connu pour g�rer les redirections. Cette variable a �t� impl�ment�e pour pallier � un probl�me du logiciel WebFolders de Microsoft qui ne sait pas g�rer correctement les redirections vers les r�pertoires via les m�thodes DAV.
Existe depuis la version 2.0.40
Quand Apache envoie une redirection en r�ponse � une requ�te, la r�ponse contient un message � afficher par le client, au cas o� il ne peut suivre automatiquement la redirection. Le fonctionnement par d�faut d'Apache est d'�crire ce texte avec le jeu de caract�re qu'il utilise, c'est � dire ISO-8859-1.
Cependant, si la redirection pointe vers une page pr�sentant un jeu de caract�res diff�rent, certains navigateurs bugg�s utilisent le jeu de caract�res du texte de la redirection, au lieu de celui de la page qu'ils affichaient. De ce fait, un texte en grec serait mal affich�.
Si cette variable d'environnement est utilis�e, Apache n'indiquera pas le jeu de caract�re dans le texte de la redirection, ce qui permet � ces navigateurs d'afficher correctement la page de destination.
Il est conseill� de placer les lignes suivantes dans httpd.conf afin de g�rer des probl�mes connus de certains clients.
# # Les directives ci-apr�s modifient le fonctionnement standard de HTTP. # La premi�re directive d�sactive les fonctions keepalive pour les # navigateurs disant s'appeler 'Netscape 2.x' # Il existe des probl�mes connus avec ces navigateurs. # La deuxi�me directive g�re Internet Explorer 4.0b2 de Microsoft qui # n'impl�mente pas correctement HTTP/1.1 et qui ne supporte pas les # fonctions keepalive quand la r�ponse du serveur contient des codes 301 # ou 302 (redirections) # BrowserMatch "Mozilla/2" nokeepalive BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0 # # Les directives ci-dessous d�sactivent HTTP/1.1 pour les navigateurs qui # violent les sp�cifications HTTP/1.0, en ne sachant pas analyser des # r�ponses basiques en HTTP/1.1. # BrowserMatch "RealPlayer 4\.0" force-response-1.0 BrowserMatch "Java/1\.0" force-response-1.0 BrowserMatch "JDK/1\.0" force-response-1.0
Cet exemple montre comment ne pas enregistrer les requ�tes � destination d'images dans le journal des acc�s. Il est facile de le modifier, pour limiter l'enregistrement � certains r�pertoires, ou pour des requ�tes venant de machines pr�cises.
SetEnvIf Request_URI \.gif image-request SetEnvIf Request_URI \.jpg image-request SetEnvIf Request_URI \.png image-request CustomLog logs/access_log common env=!image-request
Cet exemple montre comment emp�cher le chargement d'images de votre serveur depuis des pages qui ne sont pas h�berg�es sur celui-ci. Cette configuration n'est pas conseill�e, mais elle peut �tre utile dans certaines circonstances. Il est suppos� ici que toutes les images sont stock�es dans le r�pertoire /web/images.
SetEnvIf Referer "^http://www.example.com/" local_referal # Autorise les navigateurs qui n'envoient pas de champ Referer SetEnvIf Referer "^$" local_referal <Directory /web/images> Order Deny,Allow Deny from all Allow from env=local_referal </Directory>
Pour plus d'informations sur cette technique, consultez le tutorial ApacheToday � Keeping Your Images from Adorning Other Sites �.