Serveur Apache HTTP Version 2.4

Deux types de variables d'environnement affectent le serveur HTTP Apache.
Le premier type correspond aux variables d'environnement contr�l�es par le syst�me d'exploitation sous-jacent et d�finies avant le d�marrage du serveur. Leurs valeurs peuvent �tre utilis�es directement dans les fichiers de configuration, et peuvent �ventuellement �tre transmises aux scripts CGI et SSI via la directive PassEnv.
Le second type correspond aux variables nomm�es appel�es aussi variables d'environnement dans lesquelles le serveur HTTP Apache stocke des informations via un m�canisme sp�cial. Ces informations peuvent servir � contr�ler diverses op�rations comme l'enregistrement des traces ou le contr�le d'acc�s. On utilise aussi ces variables dans le m�canisme de communication avec les programmes externes comme les scripts CGI. Ce document pr�sente diff�rentes m�thodes pour manipuler et utiliser ces variables.
Bien que ces variables soient r�f�renc�es comme variables d'environnement, il ne faut pas les confondre avec les variables d'environnement contr�l�es par le syst�me d'exploitation sous-jacent. En fait, ces variables sont stock�es et manipul�es dans une structure interne � Apache. Elles ne deviennent de v�ritables variables d'environnement du syst�me d'exploitation que lorsqu'elles sont mises � la disposition de scripts CGI et de scripts inclus c�t� serveur (SSI). Si vous souhaitez manipuler l'environnement du syst�me d'exploitation sous lequel le serveur s'ex�cute, vous devez utiliser les m�canismes standards de manipulation de l'environnement fournis par l'interpr�teur de commandes (shell) de votre syst�me d'exploitation.
| Modules Apparent�s | Directives Apparent�es | 
|---|---|
La m�thode la plus �l�mentaire pour d�finir une variable
	d'environnement au niveau d'Apache consiste � utiliser la directive
	inconditionnelle SetEnv. Les variables peuvent aussi �tre transmises depuis
	l'environnement du shell � partir duquel le serveur a �t� d�marr� en
	utilisant la directive
        PassEnv.
Pour plus de souplesse, les directives fournies par le module
        mod_setenvif permettent de d�finir les
	variables d'environnement en tenant compte des caract�ristiques
	de chaque requ�te. Par exemple, une
	variable pourrait n'�tre d�finie que lorsqu'un navigateur sp�cifique
	(User-Agent) a g�n�r� la requ�te, ou seulement quand un en-t�te
	Referer particulier est pr�sent. La directive
	RewriteRule du module
	mod_rewrite qui utilise l'option
	[E=...] pour d�finir
	les variables d'environnement apporte encore plus de souplesse.
Finalement, le module mod_unique_id d�finit la variable
	d'environnement UNIQUE_ID pour chaque requ�te � une valeur
	qui est garantie unique parmi "toutes" les requ�tes sous des
	conditions tr�s sp�cifiques.
En plus de l'ensemble des variables d'environnement internes � la configuration d'Apache et de celles transmises depuis le shell, les scripts CGI et les pages SSI se voient affect�s un ensemble de variables d'environnement contenant des m�ta-informations � propos de la requ�te comme pr�conis� dans la sp�cification sur les CGIs.
suexec pour ex�cuter des
	  scripts CGI, l'environnement est nettoy� et r�duit � un ensemble de
	  variables s�res avant l'ex�cution du script. La liste des
	  variables s�res est d�finie � la compilation dans
          suexec.c.SetEnv s'ex�cute assez tard au
	  cours du traitement de la requ�te, ce qui signifie que des
	  directives telles que SetEnvIf et RewriteCond ne verront pas
	  les variables qu'elle aura d�finies.DirectoryIndex), ou lorsqu'il g�n�re un
   listing du contenu d'un r�pertoire via le module
   mod_autoindex, la sous-requ�te n'h�rite pas des
   variables d'environnement sp�cifiques � la requ�te. En outre, � cause
   des phases de l'API auxquelles mod_setenvif prend
   part, les directives SetEnvIf ne sont pas �valu�es
   s�par�ment dans la sous-requ�te.| Modules Apparent�s | Directives Apparent�es | 
|---|---|
La communication d'informations aux scripts CGI constitue une des principales utilisations des variables d'environnement. Comme indiqu� plus haut, l'environnement transmis aux scripts CGI comprend des m�ta-informations standards � propos de la requ�te, en plus des variables d�finies dans la configuration d'Apache. Pour plus de d�tails, se r�f�rer au tutoriel CGI.
Les documents inclus c�t� serveur (SSI) trait�s par le filtre
        INCLUDES du module mod_include,
	peuvent afficher les
	variables d'environnement � l'aide de l'�l�ment echo,
	et peuvent utiliser des variables d'environnement dans les �l�ments
	de contr�le de flux pour rendre certaines parties d'une page
        conditionnelles en fonction des caract�ristiques de la requ�te.
	Apache fournit aussi les variables d'environnement CGI standards
	aux pages SSI
	comme indiqu� plus haut. Pour plus de d�tails, se r�f�rer au
	tutoriel SSI.
L'acc�s au serveur peut �tre contr�l� en fonction de la valeur de
	variables d'environnement � l'aide des directives
	allow from env= et deny from env=.
	En association avec la directive
        SetEnvIf, ceci conf�re une
	grande souplesse au contr�le d'acc�s au serveur en fonction des
	caract�ristiques du client. Par exemple, vous pouvez utiliser ces
        directives pour interdire l'acc�s depuis un navigateur particulier
	(User-Agent).
        
Les variables d'environnement peuvent �tre enregistr�es dans le
	fichier de log des acc�s � l'aide de l'option %e de la
	directive LogFormat.
	En outre, la d�cision de tracer ou non les requ�tes peut �tre prise
	en fonction de l'�tat de variables d'environnement en utilisant la
	forme conditionnelle de la directive
        CustomLog. En
	association avec la directive SetEnvIf, ceci conf�re une grande souplesse au contr�le
	du tra�age des requ�tes. Par exemple, vous pouvez choisir de ne pas
	tracer les requ�tes pour des noms de fichiers se terminant par
	gif, ou encore de ne tracer que les requ�tes des clients
	n'appartenant pas � votre sous-r�seau.
La directive Header
        peut se baser sur la pr�sence ou l'absence d'une variable
	d'environnement pour d�cider si un certain en-t�te HTTP sera plac�
	dans la r�ponse au client. Ceci permet, par exemple, de n'envoyer un
	certain en-t�te de r�ponse que si un en-t�te correspondant est pr�sent
	dans la requ�te du client.
Les filtres externes configur�s par le module
	mod_ext_filter � l'aide de la directive ExtFilterDefine peuvent �tre
	activ�s de mani�re conditionnelle en fonction d'une variable
	d'environnement � l'aide des options
        disableenv= et enableenv=.
La forme %{ENV:variable} de
	TestString dans la
	directive RewriteCond
        permet au moteur de r��criture du module
	mod_rewrite de prendre des
	d�cisions conditionn�es par des variables d'environnement.
        Notez que les variables accessibles dans
	mod_rewrite sans le pr�fixe
        ENV: ne sont pas de v�ritables variables
	d'environnement. Ce sont plut�t des variables sp�cifiques �
	mod_rewrite
        qui ne sont pas accessibles pour les autres modules.
Des probl�mes d'interop�rabilit� ont conduit � l'introduction de
	m�canismes permettant de modifier le comportement d'Apache lorsqu'il
	dialogue avec certains clients. Afin de rendre ces m�canismes aussi
	souples que possible, ils sont invoqu�s en d�finissant des variables
	d'environnement, en g�n�ral � l'aide de la directive
	BrowserMatch, bien que les
	directives SetEnv et
	PassEnv puissent aussi �tre
	utilis�es, par exemple.
Ceci force le traitement d'une requ�te comme une requ�te HTTP/1.0 m�me si elle a �t� r�dig�e dans un langage plus r�cent.
Si le filtre DEFLATE est activ�, cette variable
	  d'environnement ignorera les r�glages accept-encoding de votre
	  navigateur et enverra une sortie compress�e inconditionnellement.
Cette variable entra�ne la suppression de tout champ
	Vary des en-t�tes de la r�ponse avant que cette derni�re
	soit renvoy�e au client. Certains clients n'interpr�tent pas ce champ
	correctement, et la d�finition de cette variable permet de contourner
	ce probl�me, mais implique aussi la d�finition de
	force-response-1.0.
Cette variable force une r�ponse en langage HTTP/1.0 aux clients qui envoient des requ�tes dans le m�me langage. Elle fut impl�ment�e � l'origine suite � des probl�mes avec les mandataires d'AOL. Certains clients en langage HTTP/1.0 ne r�agissent pas correctement face � une r�ponse en langage HTTP/1.1, et cette variable peut �tre utilis�e pour assurer l'interop�rabilit� avec eux.
Positionn�e � "1", cette variable d�sactive le filtre en sortie
	DEFLATE fourni par le module mod_deflate pour les
	types de contenu autres que text/html. Si vous pr�f�rez
	utiliser des fichiers compress�s statiquement,
	mod_negotiation �value aussi la variable (non
	seulement pour gzip, mais aussi pour tous les encodages autres que
	"identity").
Quand cette variable est d�finie, le filtre DEFLATE du
	module mod_deflate est d�sactiv�, et
        mod_negotiation refusera de d�livrer des ressources
	encod�es.
Disponible dans les versions 2.2.12 et ult�rieures d'Apache
Lorsque cette variable est d�finie,
	mod_cache ne sauvegardera pas de r�ponse
	susceptible d'�tre mise en cache. Cette variable d'environnement
	n'a aucune incidence sur le fait qu'une r�ponse d�j� enregistr�e
	dans la cache soit utilis�e ou non pour la requ�te courante.
Quand cette variable est d�finie, la directive
	KeepAlive est d�sactiv�e.
Cette variable modifie le comportement du module
	mod_negotiation. Si elle contient un symbole de
	langage (tel que en, ja
        ou x-klingon), mod_negotiation essaie de
	d�livrer une variante dans ce langage. S'il n'existe pas de telle
	variante, le processus normal de
	n�gociation s'applique.
Cette variable force le serveur � �tre plus prudent lors de l'envoi d'une redirection au client. Elle est en g�n�ral utilis�e quand un client pr�sente un probl�me connu avec les redirections. Elle fut impl�ment�e � l'origine suite a un probl�me rencontr� avec le logiciel WebFolders de Microsoft qui ne g�re pas correctement les redirections vers des ressources de type r�pertoire via des m�thodes DAV.
Disponible dans les versions post�rieures � 2.0.54
Quand Apache g�n�re une redirection en r�ponse � une requ�te client, la r�ponse inclut un texte destin� � �tre affich� au cas o� le client ne suivrait pas, ou ne pourrait pas suivre automatiquement la redirection. Habituellement, Apache marque ce texte en accord avec le jeu de caract�res qu'il utilise, � savoir ISO-8859-1.
Cependant, si la redirection fait r�f�rence � une page qui utilise un jeu de caract�res diff�rent, certaines versions de navigateurs obsol�tes essaieront d'utiliser le jeu de caract�res du texte de la redirection plut�t que celui de la page r�elle. Ceci peut entra�ner, par exemple, un rendu incorrect du Grec.
Si cette variable d'environnement est d�finie, Apache omettra le jeu de caract�res pour le texte de la redirection, et les navigateurs obsol�tes pr�cit�s utiliseront correctement celui de la page de destination.
L'envoi de pages d'erreur sans sp�cifier un jeu de caract�res peut conduire � des attaques de type "cross-site-scripting" pour les navigateurs qui ne respectent pas la sp�cification HTTP/1.1 (MSIE) et tentent de d�duire le jeu de caract�res � partir du contenu. De tels navigateurs peuvent �tre facilement tromp�s et utiliser le jeu de caract�res UTF-7 ; les contenus des donn�es en entr�e de type UTF-7 (comme les URI de requ�te) ne seront alors plus prot�g�s par les m�canismes d'�chappement usuels con�us pour pr�venir les attaques de type "cross-site-scripting".
Ces directives modifient le comportement protocolaire du module
   mod_proxy.  Voir la documentation sur
   mod_proxy et mod_proxy_http pour plus de d�tails.
Avec la version 2.4, Apache est plus strict avec la conversion
      des en-t�tes HTTP en variables d'environnement dans
      mod_cgi et d'autres modules : dans les versions
      pr�c�dentes, tout caract�re invalide dans les noms d'en-t�tes
      �tait tout simplement remplac� par un caract�re '_', ce qui
      pouvait exposer � des attaques de type cross-site-scripting via
      injection d'en-t�tes (voir Bogues
      du Web inhabituelles, planche 19/20).
Si vous devez supporter un client qui envoie des en-t�tes non
      conformes et si ceux-ci ne peuvent pas �tre corrig�s, il existe
      une solution de contournement simple mettant en jeu les modules
      mod_setenvif et mod_headers,
      et permettant de prendre en compte ces en-t�tes :
# L'exemple suivant montre comment prendre en compte un en-t�te
# Accept_Encoding non conforme envoy� par un client. # SetEnvIfNoCase ^Accept.Encoding$ ^(.*)$ fix_accept_encoding=$1 RequestHeader set Accept-Encoding %{fix_accept_encoding}e env=fix_accept_encoding
Les versions ant�rieures recommandaient l'ajout de ces lignes dans apache2.conf pour tenir compte de probl�mes connus avec certains clients. Comme les clients concern�s sont maintenant tr�s peu utilis�s, cet ajout n'est pratiquement plus n�cessaire.
# # The following directives modify normal HTTP response behavior. # The first directive disables keepalive for Netscape 2.x and browsers that # spoof it. There are known problems with these browser implementations. # The second directive is for Microsoft Internet Explorer 4.0b2 # which has a broken HTTP/1.1 implementation and does not properly # support keepalive when it is used on 301 or 302 (redirect) responses. # BrowserMatch "Mozilla/2" nokeepalive BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0 # # The following directive disables HTTP/1.1 responses to browsers which # are in violation of the HTTP/1.0 spec by not being able to grok a # basic 1.1 response. # BrowserMatch "RealPlayer 4\.0" force-response-1.0 BrowserMatch "Java/1\.0" force-response-1.0 BrowserMatch "JDK/1\.0" force-response-1.0
Dans cet exemple, les requ�tes pour des images n'apparaissent pas dans le fichier de trace des acc�s. Il peut �tre facilement adapt� pour emp�cher le tra�age de r�pertoires particuliers, ou de requ�tes en provenance de certains h�tes.
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 les utilisateurs ne faisant pas
	partie de votre serveur d'utiliser des images de votre serveur comme
	images en ligne dans leurs pages. Cette configuration n'est pas
	recommand�e, mais elle peut fonctionner dans des circonstances bien
	d�finies. Nous supposons que toutes vos images sont enregistr�es dans
	un r�pertoire nomm� /web/images.
SetEnvIf Referer "^http://www\.example\.com/" local_referal
# Autorise les navigateurs qui n'envoient aucune information de Referer
SetEnvIf Referer "^$" local_referal
<Directory /web/images>
    Require env local_referal
</Directory>
        Pour plus d'informations sur cette technique, voir le tutoriel sur ServerWatch "Keeping Your Images from Adorning Other Sites".