| <?xml version="1.0" encoding="ISO-8859-1" ?> |
| <!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd"> |
| <?xml-stylesheet type="text/xsl" href="./style/manual.fr.xsl"?> |
| <!-- English Revision: 151405:942939 (outdated) --> |
| <!-- French Translation by Vincent Deffontaines, review by alain B --> |
| |
| <!-- |
| Licensed to the Apache Software Foundation (ASF) under one or more |
| contributor license agreements. See the NOTICE file distributed with |
| this work for additional information regarding copyright ownership. |
| The ASF licenses this file to You under the Apache License, Version 2.0 |
| (the "License"); you may not use this file except in compliance with |
| the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| --> |
| |
| <manualpage metafile="env.xml.meta"> |
| |
| <title>Apache et les variables d'environnement</title> |
| |
| <summary> |
| <p>Le serveur HTTP Apache permet de conserver et d'utiliser |
| certaines informations dans des variables appelées <em>variables |
| d'environnement</em>. 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.</p> |
| |
| <p>Bien qu'elles soient appelées <em>variables d'environnement</em>, |
| 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.</p> |
| </summary> |
| |
| <section id="setting"> |
| <title>Définir les variables d'environnement</title> |
| <related> |
| <modulelist> |
| <module>mod_env</module> |
| <module>mod_rewrite</module> |
| <module>mod_setenvif</module> |
| <module>mod_unique_id</module> |
| </modulelist> |
| <directivelist> |
| <directive module="mod_setenvif">BrowserMatch</directive> |
| <directive module="mod_setenvif">BrowserMatchNoCase</directive> |
| <directive module="mod_env">PassEnv</directive> |
| <directive module="mod_rewrite">RewriteRule</directive> |
| <directive module="mod_env">SetEnv</directive> |
| <directive module="mod_setenvif">SetEnvIf</directive> |
| <directive module="mod_setenvif">SetEnvIfNoCase</directive> |
| <directive module="mod_env">UnsetEnv</directive> |
| </directivelist> |
| </related> |
| |
| <section id="basic-manipulation"> |
| <title>Manipulations simples de l'environnement</title> |
| |
| <p>La méthode la plus simple pour définir une variable |
| d'environnement dans Apache est d'utiliser la directive |
| <directive module="mod_env" >SetEnv</directive>. 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 <directive module="mod_env">PassEnv</directive>.</p> |
| |
| </section> |
| <section id="conditional"> |
| <title>Paramétrage selon les requêtes</title> |
| |
| <p>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 |
| <directive module="mod_rewrite">RewriteRule</directive> du |
| module mod_rewrite qui accepte le paramètre <code>[E=...] |
| </code> pour définir des variables d'environnement.</p> |
| |
| </section> |
| <section id="unique-identifiers"> |
| <title>Identifiants uniques</title> |
| |
| <p>Enfin, la variable d'environnement <code>UNIQUE_ID</code> |
| est créée par mod_unique_id pour chaque requête, de manière à |
| être unique et donc représentative de chaque requête.</p> |
| |
| </section> |
| <section id="standard-cgi"> |
| <title>Variables CGI standard</title> |
| |
| <p>En plus de toutes les variables d'environnement définies dans |
| la configuration d'Apache et celles du système d'exploitation, |
| les <a href="http://cgi-spec.golux.com/">spécifications |
| CGI</a> demandent que certaines variables d'environnement |
| contenant des informations propres à la requête soient toujours |
| passées aux scripts CGI et aux pages SSI.</p> |
| |
| </section> |
| <section id="caveats"> |
| <title>Problèmes possibles</title> |
| |
| <ul> |
| <li>Il n'est pas possible de remplacer la valeur des variables |
| CGI standard au moyen des directives qui manipulent les |
| variables d'environnement.</li> |
| |
| <li>Dans les cas où les scripts CGI sont lancés au moyen de |
| <a href="suexec.html">suexec</a>, l'environnement est nettoyé et |
| les variables sont initialisées avec des valeurs <em>sûres</em>, |
| définies lors de la compilation de <code>suexec.c</code>.</li> |
| |
| <li>Pour des raisons d'interopérabilité, les noms des variables |
| d'environnement ne peuvent être constitués que de lettres, de |
| chiffres et du caractère de soulignement '_'. De plus, le |
| premier caractère du nom ne peut pas être un chiffre. Les |
| caractères en contradiction avec ces règles sont remplacés par |
| des caractères de soulignement avant que les variables ne |
| soient transmises aux scripts CGI ou aux pages SSI.</li> |
| </ul> |
| </section> |
| </section> |
| <section id="using"> |
| <title>Utilisation des variables d'environnement</title> |
| |
| <related> |
| <modulelist> |
| <module>mod_access</module> |
| <module>mod_cgi</module> |
| <module>mod_ext_filter</module> |
| <module>mod_headers</module> |
| <module>mod_include</module> |
| <module>mod_log_config</module> |
| <module>mod_rewrite</module> |
| </modulelist> |
| <directivelist> |
| <directive module="mod_access">Allow</directive> |
| <directive module="mod_log_config">CustomLog</directive> |
| <directive module="mod_access">Deny</directive> |
| <directive module="mod_ext_filter">ExtFilterDefine</directive> |
| <directive module="mod_headers">Header</directive> |
| <directive module="mod_log_config">LogFormat</directive> |
| <directive module="mod_rewrite">RewriteCond</directive> |
| <directive module="mod_rewrite">RewriteRule</directive> |
| </directivelist> |
| </related> |
| |
| <section id="cgi-scripts"> |
| <title>Scripts CGI</title> |
| |
| <p>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 |
| <a href="howto/cgi.html">tutorial CGI</a>.</p> |
| |
| </section> |
| <section id="ssi-pages"> |
| <title>Pages SSI</title> |
| |
| <p>Les documents analysés par le serveur (documents SSI), gérés |
| par le filtre <code>INCLUDES</code> de mod_include, peuvent |
| demander l'affichage de variables d'environnement au moyen de |
| l'élément <code>echo</code>, 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 <a href="howto/ssi.html">tutorial SSI</a> |
| pour plus d'informations.</p> |
| |
| </section> |
| <section id="access-control"> |
| <title>Contrôle d'accès</title> |
| |
| <p>Les droits d'accès au serveur peuvent être contrôlés au moyen |
| de variables d'environnement en utilisant les directives |
| <code>allow from env=</code> et <code>deny from env=</code>. |
| Celles ci, utilisées avec <directive module="mod_setenvif" |
| >SetEnvIf</directive>, 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).</p> |
| |
| </section> |
| <section id="logging"> |
| <title>Journalisation sous certaines conditions</title> |
| |
| <p>Les variables d'environnement peuvent être enregistrées dans |
| le journal des accès ('access log') au moyen de l'option |
| <code>%e</code> de <directive module="mod_log_config" |
| >LogFormat</directive>. 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 |
| <directive module="mod_log_config">CustomLog</directive>. Cette |
| méthode, utilisée avec la directive <directive module="mod_setenvif" |
| >SetEnvIf</directive>, 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 <code>gif</code>, ou de n'enregistrer que les |
| requêtes des clients situés hors du sous-réseau auquel appartient |
| le serveur.</p> |
| |
| </section> |
| <section id="response-headers"> |
| <title>Personnaliser les en-têtes des réponses HTTP</title> |
| |
| <p>La directive <directive module="mod_headers">Header</directive> |
| 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.</p> |
| |
| </section> |
| |
| <section id="external-filter"> |
| <title>Activation des filtres externes</title> |
| |
| <p>Il est possible d'utiliser une variable d'environnement pour |
| activer les filtres externes (gérés par |
| <module>mod_ext_filter</module> au moyen de la directive |
| <directive module="mod_ext_filter">ExtFilterDefine</directive>) |
| grâce aux options <code>disableenv=</code> et |
| <code>enableenv=</code>.</p> |
| </section> |
| |
| <section id="url-rewriting"> |
| <title>Réécriture d'URL</title> |
| |
| <p>La forme <code>%{ENV:...}</code> de <em>TestString</em>, dans |
| la directive <directive module="mod_rewrite" |
| >RewriteCond</directive>, 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 |
| <code>ENV:</code>, 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.</p> |
| </section> |
| </section> |
| |
| <section id="special"> |
| <title>Variables d'environnement spéciales</title> |
| |
| <p>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 <directive module="mod_setenvif" |
| >BrowserMatch</directive>, bien qu'on puisse également utiliser |
| <directive module="mod_env">SetEnv</directive> et |
| <directive module="mod_env">PassEnv</directive> par exemple.</p> |
| |
| <section id="downgrade"> |
| <title>downgrade-1.0</title> |
| |
| <p>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.</p> |
| |
| </section> |
| <section id="force-no-vary"> |
| <title>force-no-vary</title> |
| |
| <p>Ceci provoque l'effacement de tous les champs <code>Vary</code> |
| de l'en-tête de réponse avant qu'il ne soit envoyé au client. |
| Certains clients interprètent mal ce champ (voir |
| <a href="misc/known_client_problems.html">les problèmes avec |
| certains clients</a>), et initialiser cette variable peut |
| permettre de résoudre ce problème. Cette variable requiert |
| également l'utilisation de <strong>force-response-1.0</strong>.</p> |
| |
| </section> |
| <section id="force-response"> |
| <title>force-response-1.0</title> |
| |
| <p>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.</p> |
| |
| </section> |
| |
| <section id="gzip-only-text-html"> |
| <title>gzip-only-text/html</title> |
| |
| <p>Si cette variable est positionnée avec une valeur de "1", le |
| filtre de sortie DEFLATE du module <module>mod_deflate</module> |
| se retrouve désactivé pour les documents dont le type mime n'est |
| pas <code>text/html</code>.</p> |
| |
| </section> |
| |
| <section id="no-gzip"><title>no-gzip</title> |
| |
| <p>Si cette variable est initialisée, le filtre <code>DEFLATE</code> |
| du module <module>mod_deflate</module> est totalement désactivé.</p> |
| |
| </section> |
| |
| <section id="nokeepalive"> |
| <title>nokeepalive</title> |
| |
| <p>Si cette variable est initialisée, les fonctions |
| <directive module="core">KeepAlive</directive> sont désactivées.</p> |
| |
| </section> |
| |
| <section id="prefer-language"><title>prefer-language</title> |
| |
| <p>Cette variable modifie le fonctionnement de |
| <module>mod_negotiation</module>. Si la variable contient un |
| marqueur de langue (comme <code>en</code>, <code>ja</code> ou |
| <code>x-klingon</code>), le module <module>mod_negotiation</module> |
| va tenter de fournir une réponse dans cette langue parmi les |
| variantes possibles. Si aucune de ces variantes n'existe, une |
| <a href="content-negotiation.html">négociation</a> normale aura |
| lieu.</p> |
| |
| </section> |
| |
| <section id="redirect-carefully"> |
| <title>redirect-carefully</title> |
| |
| <p>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.</p> |
| |
| </section> |
| |
| <section id="suppress-error-charset"> |
| <title>suppress-error-charset</title> |
| |
| <p><em>Existe depuis la version 2.0.40</em></p> |
| |
| <p>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.</p> |
| <p>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é.</p> |
| <p>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.</p> |
| |
| </section> |
| |
| </section> |
| |
| <section id="examples"> |
| <title>Exemples</title> |
| |
| <section id="misbehaving"> |
| <title>Modifier le fonctionnement d'un protocole pour les clients |
| qui le gèrent mal</title> |
| |
| <p>Il est conseillé de placer les lignes suivantes dans httpd.conf |
| afin de gérer des problèmes connus de certains clients.</p> |
| <example><pre> |
| # |
| # 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</pre></example> |
| |
| </section> |
| <section id="no-img-log"> |
| <title>Ne pas enregistrer les requêtes pour des images dans le |
| journal des accès</title> |
| |
| <p>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.</p> |
| <example><pre> |
| 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</pre></example> |
| |
| </section> |
| <section id="image-theft"> |
| <title>Empêcher le « vol d'images »</title> |
| |
| <p>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.</p> |
| <example><pre> |
| 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></pre></example> |
| |
| <p>Pour plus d'informations sur cette technique, consultez le |
| tutorial ApacheToday « <a |
| href="http://apachetoday.com/news_story.php3?ltsn=2000-06-14-002-01-PS" |
| >Keeping Your Images from Adorning Other Sites</a> ».</p> |
| </section> |
| </section> |
| </manualpage> |