<-
Apache > Serveur HTTP > Documentation > Version 2.4

Apache et les variables d'environnement

Langues Disponibles:  en  |  fr  |  ja  |  ko  |  tr 

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.

top

D�finition des variables d'environnement

Manipulations de base de l'environnement

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.

D�finitions conditionnelles en fonction des requ�tes

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.

Identifiants uniques

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.

Variables CGI standards

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.

Quelques mises en garde

top

Utilisation des variables d'environnement

Scripts CGI

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.

Pages SSI

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.

Contr�le d'acc�s

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

Enregistrement conditionnel des traces

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.

En-t�tes de r�ponse conditionnels

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.

Activation de filtres externes

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

R��criture d'URL

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.

top

Variables d'environnement � usage sp�cial

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.

downgrade-1.0

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.

force-gzip

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.

force-no-vary

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.

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.

gzip-only-text/html

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

no-gzip

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.

no-cache

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.

nokeepalive

Quand cette variable est d�finie, la directive KeepAlive est d�sactiv�e.

prefer-language

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.

redirect-carefully

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.

suppress-error-charset

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.

Note concernant la s�curit�

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

force-proxy-request-1.0, proxy-nokeepalive, proxy-sendchunked, proxy-sendcl, proxy-chain-auth, proxy-interim-response, proxy-initial-not-pooled

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.

top

Exemples

Transmission du contenu d'en-t�tes non valides aux scripts CGI

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_header, 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

Modification du comportement protocolaire face � des clients r�agissant de mani�re non conforme

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

Ne pas tracer les requ�tes pour des images dans le fichier de trace des acc�s

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
        

Pr�vention du "Vol d'image"

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>
    Order Deny,Allow
    Deny from all
    Allow from env=local_referal
</Directory>
        

Pour plus d'informations sur cette technique, voir le tutoriel sur ServerWatch "Keeping Your Images from Adorning Other Sites".

Langues Disponibles:  en  |  fr  |  ja  |  ko  |  tr 

top

Commentaires

Notice:
This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our mailing lists.