<-
Apache > Serveur HTTP > Documentation > Version 2.0

Apache et les variables d'environnement

Langues Disponibles:  en  |  fr  |  ja  |  ko 

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.

top

D�finir les variables d'environnement

Manipulations simples de l'environnement

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.

Param�trage selon les requ�tes

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.

Identifiants uniques

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.

Variables CGI standard

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.

Probl�mes possibles

top

Utilisation des variables d'environnement

Scripts CGI

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.

Pages SSI

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.

Contr�le d'acc�s

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).

Journalisation sous certaines conditions

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.

Personnaliser les en-t�tes des r�ponses HTTP

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.

Activation des filtres externes

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=.

R��criture d'URL

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.

top

Variables d'environnement sp�ciales

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.

downgrade-1.0

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.

force-no-vary

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.

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.

gzip-only-text/html

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.

no-gzip

Si cette variable est initialis�e, le filtre DEFLATE du module mod_deflate est totalement d�sactiv�.

nokeepalive

Si cette variable est initialis�e, les fonctions KeepAlive sont d�sactiv�es.

prefer-language

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.

redirect-carefully

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.

suppress-error-charset

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.

top

Exemples

Modifier le fonctionnement d'un protocole pour les clients qui le g�rent mal

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

Ne pas enregistrer les requ�tes pour des images dans le journal des acc�s

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

Emp�cher le � vol d'images ï¿½

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 ï¿½.

Langues Disponibles:  en  |  fr  |  ja  |  ko