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.

Support Apache!

Voir aussi

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

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.

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.

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_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

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

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.