-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Apache et les variables d'environnement - Serveur Apache HTTP</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossaire</a> | <a href="./sitemap.html">Plan du site</a></p>
-<p class="apache">Serveur Apache HTTP Version 2.3</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="<-" alt="<-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Serveur HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="./">Version 2.3</a></div><div id="page-content"><div id="preamble"><h1>Apache et les variables d'environnement</h1>
-<div class="toplang">
-<p><span>Langues Disponibles: </span><a href="./en/env.html" hreflang="en" rel="alternate" title="English"> en </a> |
-<a href="./fr/env.html" title="Français"> fr </a> |
-<a href="./ja/env.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> |
-<a href="./ko/env.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |
-<a href="./tr/env.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>
-</div>
-
- <p>Le serveur HTTP Apache propose un mécanisme de stockage d'informations
- dans des variables appelées <em>variables d'environnement</em>. 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.</p>
-
- <p>Bien que ces variables soient référencées comme <em>variables
- d'environnement</em>, 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.</p>
- </div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#setting">Définition des variables d'environnement</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#using">Utilisation des variables d'environnement</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#special">Variables d'environnement à usage spécial</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#examples">Exemples</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="setting" id="setting">Définition des variables d'environnement</a></h2>
-
- <table class="related"><tr><th>Modules Apparentés</th><th>Directives Apparentées</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_env.html">mod_env</a></code></li><li><code class="module"><a href="./mod/mod_rewrite.html">mod_rewrite</a></code></li><li><code class="module"><a href="./mod/mod_setenvif.html">mod_setenvif</a></code></li><li><code class="module"><a href="./mod/mod_unique_id.html">mod_unique_id</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/mod_setenvif.html#browsermatch">BrowserMatch</a></code></li><li><code class="directive"><a href="./mod/mod_setenvif.html#browsermatchnocase">BrowserMatchNoCase</a></code></li><li><code class="directive"><a href="./mod/mod_env.html#passenv">PassEnv</a></code></li><li><code class="directive"><a href="./mod/mod_rewrite.html#rewriterule">RewriteRule</a></code></li><li><code class="directive"><a href="./mod/mod_env.html#setenv">SetEnv</a></code></li><li><code class="directive"><a href="./mod/mod_setenvif.html#setenvif">SetEnvIf</a></code></li><li><code class="directive"><a href="./mod/mod_setenvif.html#setenvifnocase">SetEnvIfNoCase</a></code></li><li><code class="directive"><a href="./mod/mod_env.html#unsetenv">UnsetEnv</a></code></li></ul></td></tr></table>
-
- <h3><a name="basic-manipulation" id="basic-manipulation">Manipulations de base de l'environnement</a></h3>
-
-
- <p>La méthode la plus élémentaire pour définir une variable
- d'environnement au niveau d'Apache consiste à utiliser la directive
- inconditionnelle <code class="directive"><a href="./mod/mod_env.html#setenv">SetEnv</a></code>. Les variables peuvent aussi être transmises depuis
- l'environnement du shell à partir duquel le serveur a été démarré en
- utilisant la directive
- <code class="directive"><a href="./mod/mod_env.html#passenv">PassEnv</a></code>.</p>
-
-
- <h3><a name="conditional" id="conditional">Définitions conditionnelles en fonction des requêtes</a></h3>
-
-
- <p>Pour plus de souplesse, les directives fournies par le module
- <code class="module"><a href="./mod/mod_setenvif.html">mod_setenvif</a></code> 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
- <code class="directive"><a href="./mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> du module
- <code class="module"><a href="./mod/mod_rewrite.html">mod_rewrite</a></code> qui utilise l'option
- <code>[E=...]</code> pour définir
- les variables d'environnement apporte encore plus de souplesse.</p>
-
-
- <h3><a name="unique-identifiers" id="unique-identifiers">Identifiants uniques</a></h3>
-
-
- <p>Finalement, le module <code class="module"><a href="./mod/mod_unique_id.html">mod_unique_id</a></code> définit la variable
- d'environnement <code>UNIQUE_ID</code> pour chaque requête à une valeur
- qui est garantie unique parmi "toutes" les requêtes sous des
- conditions très spécifiques.</p>
-
-
- <h3><a name="standard-cgi" id="standard-cgi">Variables CGI standards</a></h3>
-
-
- <p>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
- <a href="http://cgi-spec.golux.com/">spécification
- sur les CGIs</a>.</p>
-
-
- <h3><a name="caveats" id="caveats">Quelques mises en garde</a></h3>
-
-
- <ul>
- <li>Les directives de manipulation de l'environnement ne permettent
- pas de supplanter ou modifier les variables CGI standards.</li>
-
- <li>Lorsqu'on utilise <code class="program"><a href="./programs/suexec.html">suexec</a></code> pour exécuter des
- scripts CGI, l'environnement est nettoyé et réduit à un ensemble de
- variables <em>sûres</em> avant l'exécution du script. La liste des
- variables <em>sûres</em> est définie à la compilation dans
- <code>suexec.c</code>.</li>
-
- <li>Pour des raisons de portabilité, les noms des variables
- d'environnement ne peuvent contenir que des lettres, des chiffres, et
- le caractère "sousligné". En outre, le premier caractère ne doit pas
- être un chiffre. Les caractères qui ne satisfont pas à ces conditions
- seront remplacés par un caractère "sousligné" quand ils seront
- transmis aux scripts CGI et aux pages SSI.</li>
-
- <li>La directive <code class="directive"><a href="./mod/mod_env.html#setenv">SetEnv</a></code> s'exécute assez tard au
- cours du traitement de la requête, ce qui signifie que des
- directives telles que <code class="directive"><a href="./mod/mod_setenvif.html#setenvif">SetEnvIf</a></code> et <code class="directive"><a href="./mod/mod_rewrite.html#rewritecond">RewriteCond</a></code> ne verront pas
- les variables qu'elle aura définies.</li>
- </ul>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="using" id="using">Utilisation des variables d'environnement</a></h2>
-
-
- <table class="related"><tr><th>Modules Apparentés</th><th>Directives Apparentées</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_authz_host.html">mod_authz_host</a></code></li><li><code class="module"><a href="./mod/mod_cgi.html">mod_cgi</a></code></li><li><code class="module"><a href="./mod/mod_ext_filter.html">mod_ext_filter</a></code></li><li><code class="module"><a href="./mod/mod_headers.html">mod_headers</a></code></li><li><code class="module"><a href="./mod/mod_include.html">mod_include</a></code></li><li><code class="module"><a href="./mod/mod_log_config.html">mod_log_config</a></code></li><li><code class="module"><a href="./mod/mod_rewrite.html">mod_rewrite</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/mod_authz_host.html#allow">Allow</a></code></li><li><code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code></li><li><code class="directive"><a href="./mod/mod_authz_host.html#deny">Deny</a></code></li><li><code class="directive"><a href="./mod/mod_ext_filter.html#extfilterdefine">ExtFilterDefine</a></code></li><li><code class="directive"><a href="./mod/mod_headers.html#header">Header</a></code></li><li><code class="directive"><a href="./mod/mod_log_config.html#logformat">LogFormat</a></code></li><li><code class="directive"><a href="./mod/mod_rewrite.html#rewritecond">RewriteCond</a></code></li><li><code class="directive"><a href="./mod/mod_rewrite.html#rewriterule">RewriteRule</a></code></li></ul></td></tr></table>
-
- <h3><a name="cgi-scripts" id="cgi-scripts">Scripts CGI</a></h3>
-
-
- <p>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
- <a href="howto/cgi.html">tutoriel CGI</a>.</p>
-
-
- <h3><a name="ssi-pages" id="ssi-pages">Pages SSI</a></h3>
-
-
- <p>Les documents inclus côté serveur (SSI) traités par le filtre
- <code>INCLUDES</code> du module <code class="module"><a href="./mod/mod_include.html">mod_include</a></code>,
- peuvent afficher les
- variables d'environnement à l'aide de l'élément <code>echo</code>,
- 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
- <a href="howto/ssi.html">tutoriel SSI</a>.</p>
-
-
- <h3><a name="access-control" id="access-control">Contrôle d'accès</a></h3>
-
-
- <p>L'accès au serveur peut être contrôlé en fonction de la valeur de
- variables d'environnement à l'aide des directives
- <code>allow from env=</code> et <code>deny from env=</code>.
- En association avec la directive
- <code class="directive"><a href="./mod/mod_setenvif.html#setenvif">SetEnvIf</a></code>, 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).
- </p>
-
-
- <h3><a name="logging" id="logging">Enregistrement conditionnel des traces</a></h3>
-
-
- <p>Les variables d'environnement peuvent être enregistrées dans le
- fichier de log des accès à l'aide de l'option <code>%e</code> de la
- directive <code class="directive"><a href="./mod/mod_log_config.html#logformat">LogFormat</a></code>.
- 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
- <code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code>. En
- association avec la directive <code class="directive"><a href="./mod/mod_setenvif.html#setenvif">SetEnvIf</a></code>, 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
- <code>gif</code>, ou encore de ne tracer que les requêtes des clients
- n'appartenant pas à votre sous-réseau.</p>
-
-
- <h3><a name="response-headers" id="response-headers">En-têtes de réponse conditionnels</a></h3>
-
-
- <p>La directive <code class="directive"><a href="./mod/mod_headers.html#header">Header</a></code>
- 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.</p>
-
-
-
- <h3><a name="external-filter" id="external-filter">Activation de filtres externes</a></h3>
-
-
- <p>Les filtres externes configurés par le module
- <code class="module"><a href="./mod/mod_ext_filter.html">mod_ext_filter</a></code> à l'aide de la directive <code class="directive"><a href="./mod/mod_ext_filter.html#extfilterdefine">ExtFilterDefine</a></code> peuvent être
- activés de manière conditionnelle en fonction d'une variable
- d'environnement à l'aide des options
- <code>disableenv=</code> et <code>enableenv=</code>.</p>
-
-
- <h3><a name="url-rewriting" id="url-rewriting">Réécriture d'URL</a></h3>
-
-
- <p>La forme <code>%{ENV:<em>variable</em>}</code> de
- <em>TestString</em> dans la
- directive <code class="directive"><a href="./mod/mod_rewrite.html#rewritecond">RewriteCond</a></code>
- permet au moteur de réécriture du module
- <code class="module"><a href="./mod/mod_rewrite.html">mod_rewrite</a></code> de prendre des
- décisions conditionnées par des variables d'environnement.
- Notez que les variables accessibles dans
- <code class="module"><a href="./mod/mod_rewrite.html">mod_rewrite</a></code> sans le préfixe
- <code>ENV:</code> ne sont pas de véritables variables
- d'environnement. Ce sont plutôt des variables spécifiques à
- <code class="module"><a href="./mod/mod_rewrite.html">mod_rewrite</a></code>
- qui ne sont pas accessibles pour les autres modules.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="special" id="special">Variables d'environnement à usage spécial</a></h2>
-
-
- <p>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
- <code class="directive"><a href="./mod/mod_setenvif.html#browsermatch">BrowserMatch</a></code>, bien que les
- directives <code class="directive"><a href="./mod/mod_env.html#setenv">SetEnv</a></code> et
- <code class="directive"><a href="./mod/mod_env.html#passenv">PassEnv</a></code> puissent aussi être
- utilisées, par exemple.</p>
-
- <h3><a name="downgrade" id="downgrade">downgrade-1.0</a></h3>
-
-
- <p>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.</p>
-
-
- <h3><a name="force-gzip" id="force-gzip">force-gzip</a></h3>
-
- <p>Si le filtre <code>DEFLATE</code> est activé, cette variable
- d'environnement ignorera les réglages accept-encoding de votre
- navigateur et enverra une sortie compressée inconditionnellement.</p>
-
- <h3><a name="force-no-vary" id="force-no-vary">force-no-vary</a></h3>
-
-
- <p>Cette variable entraîne la suppression de tout champ
- <code>Vary</code> 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
- <strong>force-response-1.0</strong>.</p>
-
-
- <h3><a name="force-response" id="force-response">force-response-1.0</a></h3>
-
-
- <p>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.</p>
-
-
-
- <h3><a name="gzip-only-text-html" id="gzip-only-text-html">gzip-only-text/html</a></h3>
-
-
- <p>Positionnée à "1", cette variable désactive le filtre en sortie
- <code>DEFLATE</code> fourni par le module <code class="module"><a href="./mod/mod_deflate.html">mod_deflate</a></code> pour les
- types de contenu autres que <code>text/html</code>. Si vous préférez
- utiliser des fichiers compressés statiquement,
- <code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code> évalue aussi la variable (non
- seulement pour gzip, mais aussi pour tous les encodages autres que
- "identity").</p>
-
-
- <h3><a name="no-gzip" id="no-gzip">no-gzip</a></h3>
-
- <p>Quand cette variable est définie, le filtre <code>DEFLATE</code> du
- module <code class="module"><a href="./mod/mod_deflate.html">mod_deflate</a></code> est désactivé, et
- <code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code> refusera de délivrer des ressources
- encodées.</p>
-
-
-
- <h3><a name="no-cache" id="no-cache">no-cache</a></h3>
-
- <p>Lorsque cette variable est définie,
- <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code> 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.</p>
-
-
-
- <h3><a name="nokeepalive" id="nokeepalive">nokeepalive</a></h3>
-
-
- <p>Quand cette variable est définie, la directive
- <code class="directive"><a href="./mod/core.html#keepalive">KeepAlive</a></code> est désactivée.</p>
-
-
-
- <h3><a name="prefer-language" id="prefer-language">prefer-language</a></h3>
-
- <p>Cette variable modifie le comportement du module
- <code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code>. Si elle contient un symbole de
- langage (tel que <code>en</code>, <code>ja</code>
- ou <code>x-klingon</code>), <code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code> essaie de
- délivrer une variante dans ce langage. S'il n'existe pas de telle
- variante, le processus normal de
- <a href="content-negotiation.html">négociation</a> s'applique.</p>
-
-
-
- <h3><a name="redirect-carefully" id="redirect-carefully">redirect-carefully</a></h3>
-
-
- <p>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.</p>
-
-
-
- <h3><a name="suppress-error-charset" id="suppress-error-charset">suppress-error-charset</a></h3>
-
-
- <p><em>Disponible dans les versions postérieures à 2.0.54</em></p>
-
- <p>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.</p>
- <p> 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.</p>
- <p>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.</p>
-
- <div class="warning">
- <h3>Note concernant la sécurité</h3>
-
- <p>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".</p>
- </div>
-
-
-
- <h3><a name="proxy" id="proxy">force-proxy-request-1.0, proxy-nokeepalive, proxy-sendchunked,
- proxy-sendcl, proxy-chain-auth, proxy-interim-response, proxy-initial-not-pooled</a></h3>
-
- <p>Ces directives modifient le comportement protocolaire du module
- <code class="module"><a href="./mod/mod_proxy.html">mod_proxy</a></code>. Voir la documentation sur
- <code class="module"><a href="./mod/mod_proxy.html">mod_proxy</a></code> et <code class="module"><a href="./mod/mod_proxy_http.html">mod_proxy_http</a></code> pour plus de détails.</p>
-
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="examples" id="examples">Exemples</a></h2>
-
-
- <h3><a name="misbehaving" id="misbehaving">Modification du comportement protocolaire face à des clients
- réagissant de manière non conforme</a></h3>
-
-
- <p>Les versions antérieures recommandaient l'ajout de ces lignes dans
- httpd.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.</p>
-<div class="example"><pre>
-#
-# 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</pre></div>
-
-
- <h3><a name="no-img-log" id="no-img-log">Ne pas tracer les requêtes pour des images dans le fichier de
- trace des accès</a></h3>
-
-
- <p>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.</p>
- <div class="example"><p><code>
- SetEnvIf Request_URI \.gif image-request<br />
- SetEnvIf Request_URI \.jpg image-request<br />
- SetEnvIf Request_URI \.png image-request<br />
- CustomLog logs/access_log common env=!image-request
- </code></p></div>
-
-
- <h3><a name="image-theft" id="image-theft">Prévention du "Vol d'image"</a></h3>
-
-
- <p>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é <code>/web/images</code>.</p>
- <div class="example"><p><code>
- SetEnvIf Referer "^http://www\.example\.com/" local_referal
- # Allow browsers that do not send Referer info
- SetEnvIf Referer "^$" local_referal
- <Directory /web/images>
- <span class="indent">
- Order Deny,Allow<br />
- Deny from all<br />
- Allow from env=local_referal
- </span>
- </Directory>
- </code></p></div>
-
- <p>Pour plus d'informations sur cette technique, voir le tutoriel sur
- ServerWatch
- "<a href="http://www.serverwatch.com/tutorials/article.php/1132731">Keeping Your Images from Adorning Other Sites</a>".</p>
-
- </div></div>
-<div class="bottomlang">
-<p><span>Langues Disponibles: </span><a href="./en/env.html" hreflang="en" rel="alternate" title="English"> en </a> |
-<a href="./fr/env.html" title="Français"> fr </a> |
-<a href="./ja/env.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> |
-<a href="./ko/env.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |
-<a href="./tr/env.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>
-</div><div id="footer">
-<p class="apache">Copyright 2009 The Apache Software Foundation.<br />Authorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossaire</a> | <a href="./sitemap.html">Plan du site</a></p></div>
+<?xml version="1.0" encoding="ISO-8859-1"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head><!--\r
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r
+ This file is generated from xml source: DO NOT EDIT\r
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r
+ -->\r
+<title>Apache et les variables d'environnement - Serveur Apache HTTP</title>\r
+<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />\r
+<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />\r
+<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />\r
+<link href="./images/favicon.ico" rel="shortcut icon" /></head>\r
+<body id="manual-page"><div id="page-header">\r
+<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossaire</a> | <a href="./sitemap.html">Plan du site</a></p>\r
+<p class="apache">Serveur Apache HTTP Version 2.3</p>\r
+<img alt="" src="./images/feather.gif" /></div>\r
+<div class="up"><a href="./"><img title="<-" alt="<-" src="./images/left.gif" /></a></div>\r
+<div id="path">\r
+<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Serveur HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="./">Version 2.3</a></div><div id="page-content"><div id="preamble"><h1>Apache et les variables d'environnement</h1>\r
+<div class="toplang">\r
+<p><span>Langues Disponibles: </span><a href="./en/env.html" hreflang="en" rel="alternate" title="English"> en </a> |\r
+<a href="./fr/env.html" title="Français"> fr </a> |\r
+<a href="./ja/env.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> |\r
+<a href="./ko/env.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |\r
+<a href="./tr/env.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>\r
+</div>\r
+\r
+ <p>Le serveur HTTP Apache propose un mécanisme de stockage d'informations\r
+ dans des variables appelées <em>variables d'environnement</em>. Ces\r
+ informations peuvent servir à contrôler diverses opérations comme\r
+ l'enregistrement des traces ou le contrôle d'accès. On utilise aussi ces\r
+ variables dans le mécanisme de communication avec les programmes externes\r
+ comme les scripts CGI. Ce document présente différentes méthodes pour\r
+ manipuler et utiliser ces variables.</p>\r
+\r
+ <p>Bien que ces variables soient référencées comme <em>variables\r
+ d'environnement</em>, il ne faut pas les confondre avec les variables\r
+ d'environnement contrôlées par le système d'exploitation sous-jacent.\r
+ En fait, ces variables sont stockées et manipulées dans une structure\r
+ interne à Apache. Elles ne deviennent de véritables variables\r
+ d'environnement du système d'exploitation que lorsqu'elles sont mises à la\r
+ disposition de scripts CGI et de scripts inclus côté serveur (SSI). Si vous\r
+ souhaitez manipuler l'environnement du système d'exploitation sous lequel\r
+ le serveur s'exécute, vous devez utiliser les mécanismes standards de\r
+ manipulation de l'environnement fournis par l'interpréteur de commandes\r
+ (shell) de votre système d'exploitation.</p>\r
+ </div>\r
+<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#setting">Définition des variables d'environnement</a></li>\r
+<li><img alt="" src="./images/down.gif" /> <a href="#using">Utilisation des variables d'environnement</a></li>\r
+<li><img alt="" src="./images/down.gif" /> <a href="#special">Variables d'environnement à usage spécial</a></li>\r
+<li><img alt="" src="./images/down.gif" /> <a href="#examples">Exemples</a></li>\r
+</ul></div>\r
+<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="setting" id="setting">Définition des variables d'environnement</a></h2>\r
+ \r
+ <table class="related"><tr><th>Modules Apparentés</th><th>Directives Apparentées</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_env.html">mod_env</a></code></li><li><code class="module"><a href="./mod/mod_rewrite.html">mod_rewrite</a></code></li><li><code class="module"><a href="./mod/mod_setenvif.html">mod_setenvif</a></code></li><li><code class="module"><a href="./mod/mod_unique_id.html">mod_unique_id</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/mod_setenvif.html#browsermatch">BrowserMatch</a></code></li><li><code class="directive"><a href="./mod/mod_setenvif.html#browsermatchnocase">BrowserMatchNoCase</a></code></li><li><code class="directive"><a href="./mod/mod_env.html#passenv">PassEnv</a></code></li><li><code class="directive"><a href="./mod/mod_rewrite.html#rewriterule">RewriteRule</a></code></li><li><code class="directive"><a href="./mod/mod_env.html#setenv">SetEnv</a></code></li><li><code class="directive"><a href="./mod/mod_setenvif.html#setenvif">SetEnvIf</a></code></li><li><code class="directive"><a href="./mod/mod_setenvif.html#setenvifnocase">SetEnvIfNoCase</a></code></li><li><code class="directive"><a href="./mod/mod_env.html#unsetenv">UnsetEnv</a></code></li></ul></td></tr></table>\r
+\r
+ <h3><a name="basic-manipulation" id="basic-manipulation">Manipulations de base de l'environnement</a></h3>\r
+ \r
+\r
+ <p>La méthode la plus élémentaire pour définir une variable\r
+ d'environnement au niveau d'Apache consiste à utiliser la directive\r
+ inconditionnelle <code class="directive"><a href="./mod/mod_env.html#setenv">SetEnv</a></code>. Les variables peuvent aussi être transmises depuis\r
+ l'environnement du shell à partir duquel le serveur a été démarré en\r
+ utilisant la directive\r
+ <code class="directive"><a href="./mod/mod_env.html#passenv">PassEnv</a></code>.</p>\r
+\r
+ \r
+ <h3><a name="conditional" id="conditional">Définitions conditionnelles en fonction des requêtes</a></h3>\r
+ \r
+\r
+ <p>Pour plus de souplesse, les directives fournies par le module\r
+ <code class="module"><a href="./mod/mod_setenvif.html">mod_setenvif</a></code> permettent de définir les\r
+ variables d'environnement en tenant compte des caractéristiques\r
+ de chaque requête. Par exemple, une\r
+ variable pourrait n'être définie que lorsqu'un navigateur spécifique\r
+ (User-Agent) a généré la requête, ou seulement quand un en-tête\r
+ Referer particulier est présent. La directive\r
+ <code class="directive"><a href="./mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> du module\r
+ <code class="module"><a href="./mod/mod_rewrite.html">mod_rewrite</a></code> qui utilise l'option\r
+ <code>[E=...]</code> pour définir\r
+ les variables d'environnement apporte encore plus de souplesse.</p>\r
+\r
+ \r
+ <h3><a name="unique-identifiers" id="unique-identifiers">Identifiants uniques</a></h3>\r
+ \r
+\r
+ <p>Finalement, le module <code class="module"><a href="./mod/mod_unique_id.html">mod_unique_id</a></code> définit la variable\r
+ d'environnement <code>UNIQUE_ID</code> pour chaque requête à une valeur\r
+ qui est garantie unique parmi "toutes" les requêtes sous des\r
+ conditions très spécifiques.</p>\r
+\r
+ \r
+ <h3><a name="standard-cgi" id="standard-cgi">Variables CGI standards</a></h3>\r
+ \r
+\r
+ <p>En plus de l'ensemble des variables d'environnement internes à la\r
+ configuration d'Apache et de celles transmises depuis le shell,\r
+ les scripts CGI et les pages SSI\r
+ se voient affectés un ensemble de variables\r
+ d'environnement contenant des méta-informations à propos de la requête\r
+ comme préconisé dans la\r
+ <a href="http://cgi-spec.golux.com/">spécification\r
+ sur les CGIs</a>.</p>\r
+\r
+ \r
+ <h3><a name="caveats" id="caveats">Quelques mises en garde</a></h3>\r
+ \r
+\r
+ <ul>\r
+ <li>Les directives de manipulation de l'environnement ne permettent\r
+ pas de supplanter ou modifier les variables CGI standards.</li>\r
+\r
+ <li>Lorsqu'on utilise <code class="program"><a href="./programs/suexec.html">suexec</a></code> pour exécuter des\r
+ scripts CGI, l'environnement est nettoyé et réduit à un ensemble de\r
+ variables <em>sûres</em> avant l'exécution du script. La liste des\r
+ variables <em>sûres</em> est définie à la compilation dans\r
+ <code>suexec.c</code>.</li>\r
+\r
+ <li>Pour des raisons de portabilité, les noms des variables\r
+ d'environnement ne peuvent contenir que des lettres, des chiffres, et\r
+ le caractère "sousligné". En outre, le premier caractère ne doit pas\r
+ être un chiffre. Les caractères qui ne satisfont pas à ces conditions\r
+ seront remplacés par un caractère "sousligné" quand ils seront\r
+ transmis aux scripts CGI et aux pages SSI.</li>\r
+\r
+ <li>La directive <code class="directive"><a href="./mod/mod_env.html#setenv">SetEnv</a></code> s'exécute assez tard au\r
+ cours du traitement de la requête, ce qui signifie que des\r
+ directives telles que <code class="directive"><a href="./mod/mod_setenvif.html#setenvif">SetEnvIf</a></code> et <code class="directive"><a href="./mod/mod_rewrite.html#rewritecond">RewriteCond</a></code> ne verront pas\r
+ les variables qu'elle aura définies.</li>\r
+ </ul>\r
+ \r
+ </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="using" id="using">Utilisation des variables d'environnement</a></h2>\r
+ \r
+\r
+ <table class="related"><tr><th>Modules Apparentés</th><th>Directives Apparentées</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_authz_host.html">mod_authz_host</a></code></li><li><code class="module"><a href="./mod/mod_cgi.html">mod_cgi</a></code></li><li><code class="module"><a href="./mod/mod_ext_filter.html">mod_ext_filter</a></code></li><li><code class="module"><a href="./mod/mod_headers.html">mod_headers</a></code></li><li><code class="module"><a href="./mod/mod_include.html">mod_include</a></code></li><li><code class="module"><a href="./mod/mod_log_config.html">mod_log_config</a></code></li><li><code class="module"><a href="./mod/mod_rewrite.html">mod_rewrite</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/mod_authz_host.html#allow">Allow</a></code></li><li><code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code></li><li><code class="directive"><a href="./mod/mod_authz_host.html#deny">Deny</a></code></li><li><code class="directive"><a href="./mod/mod_ext_filter.html#extfilterdefine">ExtFilterDefine</a></code></li><li><code class="directive"><a href="./mod/mod_headers.html#header">Header</a></code></li><li><code class="directive"><a href="./mod/mod_log_config.html#logformat">LogFormat</a></code></li><li><code class="directive"><a href="./mod/mod_rewrite.html#rewritecond">RewriteCond</a></code></li><li><code class="directive"><a href="./mod/mod_rewrite.html#rewriterule">RewriteRule</a></code></li></ul></td></tr></table>\r
+\r
+ <h3><a name="cgi-scripts" id="cgi-scripts">Scripts CGI</a></h3>\r
+ \r
+\r
+ <p>La communication d'informations aux scripts CGI constitue une des\r
+ principales utilisations des variables d'environnement. Comme indiqué\r
+ plus haut, l'environnement transmis aux scripts CGI comprend des\r
+ méta-informations standards à propos de la requête, en plus des\r
+ variables définies dans la configuration d'Apache. Pour plus de\r
+ détails, se référer au\r
+ <a href="howto/cgi.html">tutoriel CGI</a>.</p>\r
+\r
+ \r
+ <h3><a name="ssi-pages" id="ssi-pages">Pages SSI</a></h3>\r
+ \r
+\r
+ <p>Les documents inclus côté serveur (SSI) traités par le filtre\r
+ <code>INCLUDES</code> du module <code class="module"><a href="./mod/mod_include.html">mod_include</a></code>,\r
+ peuvent afficher les\r
+ variables d'environnement à l'aide de l'élément <code>echo</code>,\r
+ et peuvent utiliser des variables d'environnement dans les éléments\r
+ de contrôle de flux pour rendre certaines parties d'une page\r
+ conditionnelles en fonction des caractéristiques de la requête.\r
+ Apache fournit aussi les variables d'environnement CGI standards\r
+ aux pages SSI\r
+ comme indiqué plus haut. Pour plus de détails, se référer au\r
+ <a href="howto/ssi.html">tutoriel SSI</a>.</p>\r
+\r
+ \r
+ <h3><a name="access-control" id="access-control">Contrôle d'accès</a></h3>\r
+ \r
+\r
+ <p>L'accès au serveur peut être contrôlé en fonction de la valeur de\r
+ variables d'environnement à l'aide des directives\r
+ <code>allow from env=</code> et <code>deny from env=</code>.\r
+ En association avec la directive\r
+ <code class="directive"><a href="./mod/mod_setenvif.html#setenvif">SetEnvIf</a></code>, ceci confère une\r
+ grande souplesse au contrôle d'accès au serveur en fonction des\r
+ caractéristiques du client. Par exemple, vous pouvez utiliser ces\r
+ directives pour interdire l'accès depuis un navigateur particulier\r
+ (User-Agent).\r
+ </p>\r
+\r
+ \r
+ <h3><a name="logging" id="logging">Enregistrement conditionnel des traces</a></h3>\r
+ \r
+\r
+ <p>Les variables d'environnement peuvent être enregistrées dans le\r
+ fichier de log des accès à l'aide de l'option <code>%e</code> de la\r
+ directive <code class="directive"><a href="./mod/mod_log_config.html#logformat">LogFormat</a></code>.\r
+ En outre, la décision de tracer ou non les requêtes peut être prise\r
+ en fonction de l'état de variables d'environnement en utilisant la\r
+ forme conditionnelle de la directive\r
+ <code class="directive"><a href="./mod/mod_log_config.html#customlog">CustomLog</a></code>. En\r
+ association avec la directive <code class="directive"><a href="./mod/mod_setenvif.html#setenvif">SetEnvIf</a></code>, ceci confère une grande souplesse au contrôle\r
+ du traçage des requêtes. Par exemple, vous pouvez choisir de ne pas\r
+ tracer les requêtes pour des noms de fichiers se terminant par\r
+ <code>gif</code>, ou encore de ne tracer que les requêtes des clients\r
+ n'appartenant pas à votre sous-réseau.</p>\r
+\r
+ \r
+ <h3><a name="response-headers" id="response-headers">En-têtes de réponse conditionnels</a></h3>\r
+ \r
+\r
+ <p>La directive <code class="directive"><a href="./mod/mod_headers.html#header">Header</a></code>\r
+ peut se baser sur la présence ou l'absence d'une variable\r
+ d'environnement pour décider si un certain en-tête HTTP sera placé\r
+ dans la réponse au client. Ceci permet, par exemple, de n'envoyer un\r
+ certain en-tête de réponse que si un en-tête correspondant est présent\r
+ dans la requête du client.</p>\r
+\r
+ \r
+\r
+ <h3><a name="external-filter" id="external-filter">Activation de filtres externes</a></h3>\r
+ \r
+\r
+ <p>Les filtres externes configurés par le module\r
+ <code class="module"><a href="./mod/mod_ext_filter.html">mod_ext_filter</a></code> à l'aide de la directive <code class="directive"><a href="./mod/mod_ext_filter.html#extfilterdefine">ExtFilterDefine</a></code> peuvent être\r
+ activés de manière conditionnelle en fonction d'une variable\r
+ d'environnement à l'aide des options\r
+ <code>disableenv=</code> et <code>enableenv=</code>.</p>\r
+ \r
+\r
+ <h3><a name="url-rewriting" id="url-rewriting">Réécriture d'URL</a></h3>\r
+ \r
+\r
+ <p>La forme <code>%{ENV:<em>variable</em>}</code> de\r
+ <em>TestString</em> dans la\r
+ directive <code class="directive"><a href="./mod/mod_rewrite.html#rewritecond">RewriteCond</a></code>\r
+ permet au moteur de réécriture du module\r
+ <code class="module"><a href="./mod/mod_rewrite.html">mod_rewrite</a></code> de prendre des\r
+ décisions conditionnées par des variables d'environnement.\r
+ Notez que les variables accessibles dans\r
+ <code class="module"><a href="./mod/mod_rewrite.html">mod_rewrite</a></code> sans le préfixe\r
+ <code>ENV:</code> ne sont pas de véritables variables\r
+ d'environnement. Ce sont plutôt des variables spécifiques à\r
+ <code class="module"><a href="./mod/mod_rewrite.html">mod_rewrite</a></code>\r
+ qui ne sont pas accessibles pour les autres modules.</p>\r
+ \r
+ </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="special" id="special">Variables d'environnement à usage spécial</a></h2>\r
+ \r
+\r
+ <p>Des problèmes d'interopérabilité ont conduit à l'introduction de\r
+ mécanismes permettant de modifier le comportement d'Apache lorsqu'il\r
+ dialogue avec certains clients. Afin de rendre ces mécanismes aussi\r
+ souples que possible, ils sont invoqués en définissant des variables\r
+ d'environnement, en général à l'aide de la directive\r
+ <code class="directive"><a href="./mod/mod_setenvif.html#browsermatch">BrowserMatch</a></code>, bien que les\r
+ directives <code class="directive"><a href="./mod/mod_env.html#setenv">SetEnv</a></code> et\r
+ <code class="directive"><a href="./mod/mod_env.html#passenv">PassEnv</a></code> puissent aussi être\r
+ utilisées, par exemple.</p>\r
+\r
+ <h3><a name="downgrade" id="downgrade">downgrade-1.0</a></h3>\r
+ \r
+\r
+ <p>Ceci force le traitement d'une requête comme une requête HTTP/1.0\r
+ même si elle a été rédigée dans un langage plus récent.</p>\r
+\r
+ \r
+ <h3><a name="force-gzip" id="force-gzip">force-gzip</a></h3>\r
+ \r
+ <p>Si le filtre <code>DEFLATE</code> est activé, cette variable\r
+ d'environnement ignorera les réglages accept-encoding de votre\r
+ navigateur et enverra une sortie compressée inconditionnellement.</p>\r
+ \r
+ <h3><a name="force-no-vary" id="force-no-vary">force-no-vary</a></h3>\r
+ \r
+\r
+ <p>Cette variable entraîne la suppression de tout champ\r
+ <code>Vary</code> des en-têtes de la réponse avant que cette dernière\r
+ soit renvoyée au client. Certains clients n'interprètent pas ce champ\r
+ correctement, et la définition de cette variable permet de contourner\r
+ ce problème, mais implique aussi la définition de\r
+ <strong>force-response-1.0</strong>.</p>\r
+\r
+ \r
+ <h3><a name="force-response" id="force-response">force-response-1.0</a></h3>\r
+ \r
+\r
+ <p>Cette variable force une réponse en langage HTTP/1.0 aux clients\r
+ qui envoient des requêtes dans le même langage. Elle fut implémentée à\r
+ l'origine suite à des problèmes avec les mandataires d'AOL. Certains\r
+ clients en langage HTTP/1.0 ne réagissent pas correctement face à une\r
+ réponse en langage HTTP/1.1, et cette variable peut être utilisée pour\r
+ assurer l'interopérabilité avec eux.</p>\r
+\r
+ \r
+\r
+ <h3><a name="gzip-only-text-html" id="gzip-only-text-html">gzip-only-text/html</a></h3>\r
+ \r
+\r
+ <p>Positionnée à "1", cette variable désactive le filtre en sortie\r
+ <code>DEFLATE</code> fourni par le module <code class="module"><a href="./mod/mod_deflate.html">mod_deflate</a></code> pour les\r
+ types de contenu autres que <code>text/html</code>. Si vous préférez\r
+ utiliser des fichiers compressés statiquement,\r
+ <code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code> évalue aussi la variable (non\r
+ seulement pour gzip, mais aussi pour tous les encodages autres que\r
+ "identity").</p>\r
+ \r
+\r
+ <h3><a name="no-gzip" id="no-gzip">no-gzip</a></h3>\r
+\r
+ <p>Quand cette variable est définie, le filtre <code>DEFLATE</code> du\r
+ module <code class="module"><a href="./mod/mod_deflate.html">mod_deflate</a></code> est désactivé, et\r
+ <code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code> refusera de délivrer des ressources\r
+ encodées.</p>\r
+\r
+ \r
+\r
+ <h3><a name="no-cache" id="no-cache">no-cache</a></h3>\r
+\r
+ <p>Lorsque cette variable est définie,\r
+ <code class="module"><a href="./mod/mod_cache.html">mod_cache</a></code> ne sauvegardera pas de réponse\r
+ susceptible d'être mise en cache. Cette variable d'environnement\r
+ n'a aucune incidence sur le fait qu'une réponse déjà enregistrée\r
+ dans la cache soit utilisée ou non pour la requête courante.</p>\r
+\r
+ \r
+\r
+ <h3><a name="nokeepalive" id="nokeepalive">nokeepalive</a></h3>\r
+ \r
+\r
+ <p>Quand cette variable est définie, la directive\r
+ <code class="directive"><a href="./mod/core.html#keepalive">KeepAlive</a></code> est désactivée.</p>\r
+\r
+ \r
+\r
+ <h3><a name="prefer-language" id="prefer-language">prefer-language</a></h3>\r
+\r
+ <p>Cette variable modifie le comportement du module\r
+ <code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code>. Si elle contient un symbole de\r
+ langage (tel que <code>en</code>, <code>ja</code>\r
+ ou <code>x-klingon</code>), <code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code> essaie de\r
+ délivrer une variante dans ce langage. S'il n'existe pas de telle\r
+ variante, le processus normal de\r
+ <a href="content-negotiation.html">négociation</a> s'applique.</p>\r
+\r
+ \r
+\r
+ <h3><a name="redirect-carefully" id="redirect-carefully">redirect-carefully</a></h3>\r
+ \r
+\r
+ <p>Cette variable force le serveur à être plus prudent lors de l'envoi\r
+ d'une redirection au client. Elle est en général utilisée quand un\r
+ client présente un problème connu avec les redirections. Elle fut\r
+ implémentée à l'origine suite a un problème rencontré avec le logiciel\r
+ WebFolders de Microsoft qui ne gère pas correctement les redirections\r
+ vers des ressources de type répertoire via des méthodes DAV.</p>\r
+\r
+ \r
+\r
+ <h3><a name="suppress-error-charset" id="suppress-error-charset">suppress-error-charset</a></h3>\r
+ \r
+\r
+ <p><em>Disponible dans les versions postérieures à 2.0.54</em></p>\r
+\r
+ <p>Quand Apache génère une redirection en réponse à une requête client,\r
+ la réponse inclut un texte destiné à être affiché au cas où le client ne\r
+ suivrait pas, ou ne pourrait pas suivre automatiquement la redirection.\r
+ Habituellement, Apache marque ce texte en accord avec le jeu de caractères\r
+ qu'il utilise, à savoir ISO-8859-1.</p>\r
+ <p> Cependant, si la redirection fait référence à une page qui utilise un\r
+ jeu de caractères différent, certaines versions de navigateurs obsolètes\r
+ essaieront d'utiliser le jeu de caractères du texte de la redirection\r
+ plutôt que celui de la page réelle.\r
+ Ceci peut entraîner, par exemple, un rendu incorrect du Grec.</p>\r
+ <p>Si cette variable d'environnement est définie, Apache omettra le jeu de\r
+ caractères pour le texte de la redirection, et les navigateurs obsolètes\r
+ précités utiliseront correctement celui de la page de destination.</p>\r
+\r
+ <div class="warning">\r
+ <h3>Note concernant la sécurité</h3>\r
+\r
+ <p>L'envoi de pages d'erreur sans spécifier un jeu de caractères peut\r
+ conduire à des attaques de type "cross-site-scripting" pour les\r
+ navigateurs qui ne respectent pas la spécification HTTP/1.1 (MSIE) et\r
+ tentent de déduire le jeu de caractères à partir du contenu. De tels\r
+ navigateurs peuvent être facilement trompés et utiliser le jeu de\r
+ caractères UTF-7 ; les contenus des données en entrée de type UTF-7\r
+ (comme les URI de requête) ne seront alors plus protégés par les\r
+ mécanismes d'échappement usuels conçus pour prévenir les attaques\r
+ de type "cross-site-scripting".</p>\r
+ </div>\r
+\r
+ \r
+\r
+ <h3><a name="proxy" id="proxy">force-proxy-request-1.0, proxy-nokeepalive, proxy-sendchunked,\r
+ proxy-sendcl, proxy-chain-auth, proxy-interim-response, proxy-initial-not-pooled</a></h3>\r
+\r
+ <p>Ces directives modifient le comportement protocolaire du module\r
+ <code class="module"><a href="./mod/mod_proxy.html">mod_proxy</a></code>. Voir la documentation sur\r
+ <code class="module"><a href="./mod/mod_proxy.html">mod_proxy</a></code> et <code class="module"><a href="./mod/mod_proxy_http.html">mod_proxy_http</a></code> pour plus de détails.</p>\r
+ \r
+\r
+ </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="examples" id="examples">Exemples</a></h2>\r
+ \r
+\r
+ <h3><a name="misbehaving" id="misbehaving">Modification du comportement protocolaire face à des clients\r
+ réagissant de manière non conforme</a></h3>\r
+ \r
+\r
+ <p>Les versions antérieures recommandaient l'ajout de ces lignes dans\r
+ httpd.conf pour tenir compte de problèmes connus avec certains clients.\r
+ Comme les clients concernés sont maintenant très peu utilisés, cet\r
+ ajout n'est pratiquement plus nécessaire.</p>\r
+<div class="example"><pre>\r
+#\r
+# The following directives modify normal HTTP response behavior.\r
+# The first directive disables keepalive for Netscape 2.x and browsers that\r
+# spoof it. There are known problems with these browser implementations.\r
+# The second directive is for Microsoft Internet Explorer 4.0b2\r
+# which has a broken HTTP/1.1 implementation and does not properly\r
+# support keepalive when it is used on 301 or 302 (redirect) responses.\r
+#\r
+BrowserMatch "Mozilla/2" nokeepalive\r
+BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0\r
+\r
+#\r
+# The following directive disables HTTP/1.1 responses to browsers which\r
+# are in violation of the HTTP/1.0 spec by not being able to grok a\r
+# basic 1.1 response.\r
+#\r
+BrowserMatch "RealPlayer 4\.0" force-response-1.0\r
+BrowserMatch "Java/1\.0" force-response-1.0\r
+BrowserMatch "JDK/1\.0" force-response-1.0</pre></div>\r
+\r
+ \r
+ <h3><a name="no-img-log" id="no-img-log">Ne pas tracer les requêtes pour des images dans le fichier de\r
+ trace des accès</a></h3>\r
+ \r
+\r
+ <p>Dans cet exemple, les requêtes pour des images n'apparaissent pas\r
+ dans le fichier de trace des accès. Il peut être facilement adapté pour\r
+ empêcher le traçage de répertoires particuliers, ou de requêtes\r
+ en provenance de certains hôtes.</p>\r
+ <div class="example"><p><code>\r
+ SetEnvIf Request_URI \.gif image-request<br />\r
+ SetEnvIf Request_URI \.jpg image-request<br />\r
+ SetEnvIf Request_URI \.png image-request<br />\r
+ CustomLog logs/access_log common env=!image-request\r
+ </code></p></div>\r
+\r
+ \r
+ <h3><a name="image-theft" id="image-theft">Prévention du "Vol d'image"</a></h3>\r
+ \r
+\r
+ <p>Cet exemple montre comment empêcher les utilisateurs ne faisant pas\r
+ partie de votre serveur d'utiliser des images de votre serveur comme\r
+ images en ligne dans leurs pages. Cette configuration n'est pas\r
+ recommandée, mais elle peut fonctionner dans des circonstances bien\r
+ définies. Nous supposons que toutes vos images sont enregistrées dans\r
+ un répertoire nommé <code>/web/images</code>.</p>\r
+ <div class="example"><p><code>\r
+ SetEnvIf Referer "^http://www\.example\.com/" local_referal\r
+ # Allow browsers that do not send Referer info\r
+ SetEnvIf Referer "^$" local_referal\r
+ <Directory /web/images>\r
+ <span class="indent">\r
+ Order Deny,Allow<br />\r
+ Deny from all<br />\r
+ Allow from env=local_referal\r
+ </span>\r
+ </Directory>\r
+ </code></p></div>\r
+\r
+ <p>Pour plus d'informations sur cette technique, voir le tutoriel sur\r
+ ServerWatch\r
+ "<a href="http://www.serverwatch.com/tutorials/article.php/1132731">Keeping Your Images from Adorning Other Sites</a>".</p>\r
+ \r
+ </div></div>\r
+<div class="bottomlang">\r
+<p><span>Langues Disponibles: </span><a href="./en/env.html" hreflang="en" rel="alternate" title="English"> en </a> |\r
+<a href="./fr/env.html" title="Français"> fr </a> |\r
+<a href="./ja/env.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> |\r
+<a href="./ko/env.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |\r
+<a href="./tr/env.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>\r
+</div><div id="footer">\r
+<p class="apache">Copyright 2009 The Apache Software Foundation.<br />Authorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>\r
+<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossaire</a> | <a href="./sitemap.html">Plan du site</a></p></div>\r
</body></html>
\ No newline at end of file
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Foire aux questions - Serveur Apache HTTP</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p>
-<p class="apache">Serveur Apache HTTP Version 2.3</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="../"><img title="<-" alt="<-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Serveur HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.3</a></div><div id="page-content"><div id="preamble"><h1>Foire aux questions</h1>
-<div class="toplang">
-<p><span>Langues Disponibles: </span><a href="../en/faq/" hreflang="en" rel="alternate" title="English"> en </a> |
-<a href="../fr/faq/" title="Français"> fr </a> |
-<a href="../tr/faq/" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>
-</div>
-
-
- <p>Ce document n'est pas une FAQ traditionnelle, mais plutôt un
- guide sommaire vous indiquant ce qu'il faut faire lorsque vous
- rencontrez des problèmes avec le serveur HTTP Apache.</p>
-
- <p>La <a href="http://httpd.apache.org/docs/misc/FAQ.html">FAQ Apache 1.3</a>
- constitue un document plus traditionnel, quoique légèrement
- obsolète.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#support.what2do">"Pourquoi ne puis-je pas ... ? Pourquoi ... ne fonctionne
- pas ?" Que faire en cas de problème ?</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#support.support">Qui contacter pour obtenir du support
- ?</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="support.what2do" id="support.what2do">"Pourquoi ne puis-je pas ... ? Pourquoi ... ne fonctionne
- pas ?" Que faire en cas de problème ?</a></h2>
-
-
- <p>Si vous rencontrez des problèmes avec le serveur Apache, vous
- devez effectuer les actions suivantes :</p>
-
- <dl>
- <dt>Consultez le journal des erreurs !</dt>
- <dd><p>Apache essaie de vous aider à résoudre les problèmes
- rencontrés. Dans de nombreux cas, il fournira certains détails en
- enregistrant un ou plusieurs messages dans le journal des erreurs
- du serveur. Cela vous suffit parfois pour diagnostiquer et
- résoudre le problème vous-même (en corrigeant les permissions sur
- certains fichiers par exemple). La localisation du
- journal des erreurs de votre serveur est définie dans votre
- fichier de configuration par la directive <code class="directive"><a href="../mod/core.html#errorlog">ErrorLog</a></code>, et sa valeur par défaut est
- <code>/usr/local/apache2/logs/error_log</code>.</p>
-
- <p>Si vous avez fini par poster un message dans un des forums de
- support, c'est probablement le premier endroit dans lequel on vous
- demandera de rechercher des informations. S'il vous plait,
- assurez-vous de savoir où trouver votre journal des erreurs. Si
- vous n'en êtes pas sûr, cette <a href="http://wiki.apache.org/httpd/DistrosDefaultLayout">page du
- wiki</a> peut vous orienter dans vos recherches.</p></dd>
-
- <dt>Consultez le wiki</dt>
- <dd>Le <a href="http://wiki.apache.org/httpd/">Wiki du serveur
- HTTP Apache</a> vous guidera pour résoudre de nombreux problèmes
- courants.</dd>
-
- <dt>Consultez la base de données des bogues d'Apache</dt>
- <dd>La plupart des problèmes signalés au Groupe Apache sont
- enregistrés dans la <a href="http://httpd.apache.org/bug_report.html">base de données des
- bogues</a>. <strong>Ne soumettez pas</strong> de nouveau rapport
- de bogue avant d'avoir consulté les rapports existants (ouverts
- <em>et</em> fermés), et exposé votre problème dans un forum de
- support des utilisateurs (voir ci-dessous). Si votre problème a
- déjà été signalé, merci de <em>ne pas</em> ajouter un commentaire
- du style "Je rencontre le même problème . . .".</dd>
-
- <dt><a id="support.what2do.user-support" name="support.what2do.user-support">Exposez votre problème dans un
- forum de support</a></dt>
- <dd><p>Apache possède une communauté active d'utilisateurs prêts à
- partager leurs connaissances. Prendre part à cette communauté est
- en général le moyen le plus rapide et le plus efficace pour
- obtenir des réponses à vos questions ou problèmes.</p>
-
- <p><a href="http://httpd.apache.org/userslist.html">Liste de
- diffusion des utilisateurs</a></p>
-
- <p>Les utilisateurs peuvent aussi soumettre leurs problèmes à <a href="irc://irc.freenode.net/#apache">#apache</a> sur <a href="http://freenode.net">Freenode IRC</a>.</p>
- </dd>
-
- <dt>Merci d'utiliser la base de données des bogues pour les bogues
- !</dt>
- <dd><p>Si vous avez suivi toutes ces étapes sans trouver la
- solution à votre problème, <em>merci</em> de le signaler aux
- développeurs de httpd en <a href="http://httpd.apache.org/bug_report.html">enregistrant un
- rapport de bogue</a>.</p>
-
- <p>Si votre problème provoque un crash du serveur et génère un
- vidage mémoire (core dump), merci de <a href="http://httpd.apache.org/dev/debugging.html">joindre ce
- dernier</a> (dans la mesure du possible).</p>
- </dd>
- </dl>
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="support.support" id="support.support">Qui contacter pour obtenir du support
- ?</a></h2>
- <p>Avec des millions d'utilisateurs et moins de soixante
- développeurs bénévoles, nous ne sommes pas en mesure de proposer
- un support personnalisé pour Apache. Pour un support gratuit, nous
- vous suggérons de participer à un forum utilisateur (voir plus
- haut).</p>
-
- <p>De nombreuses sociétés proposent un support Apache
- professionnel et commercial.</p>
- </div></div>
-<div class="bottomlang">
-<p><span>Langues Disponibles: </span><a href="../en/faq/" hreflang="en" rel="alternate" title="English"> en </a> |
-<a href="../fr/faq/" title="Français"> fr </a> |
-<a href="../tr/faq/" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>
-</div><div id="footer">
-<p class="apache">Copyright 2009 The Apache Software Foundation.<br />Authorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p></div>
+<?xml version="1.0" encoding="ISO-8859-1"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head><!--\r
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r
+ This file is generated from xml source: DO NOT EDIT\r
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r
+ -->\r
+<title>Foire aux questions - Serveur Apache HTTP</title>\r
+<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />\r
+<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />\r
+<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />\r
+<link href="../images/favicon.ico" rel="shortcut icon" /></head>\r
+<body id="manual-page"><div id="page-header">\r
+<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p>\r
+<p class="apache">Serveur Apache HTTP Version 2.3</p>\r
+<img alt="" src="../images/feather.gif" /></div>\r
+<div class="up"><a href="../"><img title="<-" alt="<-" src="../images/left.gif" /></a></div>\r
+<div id="path">\r
+<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Serveur HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.3</a></div><div id="page-content"><div id="preamble"><h1>Foire aux questions</h1>\r
+<div class="toplang">\r
+<p><span>Langues Disponibles: </span><a href="../en/faq/" hreflang="en" rel="alternate" title="English"> en </a> |\r
+<a href="../fr/faq/" title="Français"> fr </a> |\r
+<a href="../tr/faq/" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>\r
+</div>\r
+\r
+\r
+ <p>Ce document n'est pas une FAQ traditionnelle, mais plutôt un\r
+ guide sommaire vous indiquant ce qu'il faut faire lorsque vous\r
+ rencontrez des problèmes avec le serveur HTTP Apache.</p>\r
+\r
+ <p>La <a href="http://httpd.apache.org/docs/misc/FAQ.html">FAQ Apache 1.3</a>\r
+ constitue un document plus traditionnel, quoique légèrement\r
+ obsolète.</p>\r
+</div>\r
+<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#support.what2do">"Pourquoi ne puis-je pas ... ? Pourquoi ... ne fonctionne\r
+ pas ?" Que faire en cas de problème ?</a></li>\r
+<li><img alt="" src="../images/down.gif" /> <a href="#support.support">Qui contacter pour obtenir du support\r
+ ?</a></li>\r
+</ul></div>\r
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="support.what2do" id="support.what2do">"Pourquoi ne puis-je pas ... ? Pourquoi ... ne fonctionne\r
+ pas ?" Que faire en cas de problème ?</a></h2>\r
+ \r
+\r
+ <p>Si vous rencontrez des problèmes avec le serveur Apache, vous\r
+ devez effectuer les actions suivantes :</p>\r
+\r
+ <dl>\r
+ <dt>Consultez le journal des erreurs !</dt>\r
+ <dd><p>Apache essaie de vous aider à résoudre les problèmes\r
+ rencontrés. Dans de nombreux cas, il fournira certains détails en\r
+ enregistrant un ou plusieurs messages dans le journal des erreurs\r
+ du serveur. Cela vous suffit parfois pour diagnostiquer et\r
+ résoudre le problème vous-même (en corrigeant les permissions sur\r
+ certains fichiers par exemple). La localisation du\r
+ journal des erreurs de votre serveur est définie dans votre\r
+ fichier de configuration par la directive <code class="directive"><a href="../mod/core.html#errorlog">ErrorLog</a></code>, et sa valeur par défaut est\r
+ <code>/usr/local/apache2/logs/error_log</code>.</p>\r
+\r
+ <p>Si vous avez fini par poster un message dans un des forums de\r
+ support, c'est probablement le premier endroit dans lequel on vous\r
+ demandera de rechercher des informations. S'il vous plait,\r
+ assurez-vous de savoir où trouver votre journal des erreurs. Si\r
+ vous n'en êtes pas sûr, cette <a href="http://wiki.apache.org/httpd/DistrosDefaultLayout">page du\r
+ wiki</a> peut vous orienter dans vos recherches.</p></dd>\r
+\r
+ <dt>Consultez le wiki</dt>\r
+ <dd>Le <a href="http://wiki.apache.org/httpd/">Wiki du serveur\r
+ HTTP Apache</a> vous guidera pour résoudre de nombreux problèmes\r
+ courants.</dd>\r
+\r
+ <dt>Consultez la base de données des bogues d'Apache</dt>\r
+ <dd>La plupart des problèmes signalés au Groupe Apache sont\r
+ enregistrés dans la <a href="http://httpd.apache.org/bug_report.html">base de données des\r
+ bogues</a>. <strong>Ne soumettez pas</strong> de nouveau rapport\r
+ de bogue avant d'avoir consulté les rapports existants (ouverts\r
+ <em>et</em> fermés), et exposé votre problème dans un forum de\r
+ support des utilisateurs (voir ci-dessous). Si votre problème a\r
+ déjà été signalé, merci de <em>ne pas</em> ajouter un commentaire\r
+ du style "Je rencontre le même problème . . .".</dd>\r
+\r
+ <dt><a id="support.what2do.user-support" name="support.what2do.user-support">Exposez votre problème dans un\r
+ forum de support</a></dt>\r
+ <dd><p>Apache possède une communauté active d'utilisateurs prêts à\r
+ partager leurs connaissances. Prendre part à cette communauté est\r
+ en général le moyen le plus rapide et le plus efficace pour\r
+ obtenir des réponses à vos questions ou problèmes.</p>\r
+\r
+ <p><a href="http://httpd.apache.org/userslist.html">Liste de\r
+ diffusion des utilisateurs</a></p>\r
+\r
+ <p>Les utilisateurs peuvent aussi soumettre leurs problèmes à <a href="irc://irc.freenode.net/#apache">#apache</a> sur <a href="http://freenode.net">Freenode IRC</a>.</p>\r
+ </dd>\r
+\r
+ <dt>Merci d'utiliser la base de données des bogues pour les bogues\r
+ !</dt>\r
+ <dd><p>Si vous avez suivi toutes ces étapes sans trouver la\r
+ solution à votre problème, <em>merci</em> de le signaler aux\r
+ développeurs de httpd en <a href="http://httpd.apache.org/bug_report.html">enregistrant un\r
+ rapport de bogue</a>.</p>\r
+\r
+ <p>Si votre problème provoque un crash du serveur et génère un\r
+ vidage mémoire (core dump), merci de <a href="http://httpd.apache.org/dev/debugging.html">joindre ce\r
+ dernier</a> (dans la mesure du possible).</p>\r
+ </dd>\r
+ </dl>\r
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="support.support" id="support.support">Qui contacter pour obtenir du support\r
+ ?</a></h2>\r
+ <p>Avec des millions d'utilisateurs et moins de soixante\r
+ développeurs bénévoles, nous ne sommes pas en mesure de proposer\r
+ un support personnalisé pour Apache. Pour un support gratuit, nous\r
+ vous suggérons de participer à un forum utilisateur (voir plus\r
+ haut).</p>\r
+\r
+ <p>De nombreuses sociétés proposent un support Apache\r
+ professionnel et commercial.</p>\r
+ </div></div>\r
+<div class="bottomlang">\r
+<p><span>Langues Disponibles: </span><a href="../en/faq/" hreflang="en" rel="alternate" title="English"> en </a> |\r
+<a href="../fr/faq/" title="Français"> fr </a> |\r
+<a href="../tr/faq/" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>\r
+</div><div id="footer">\r
+<p class="apache">Copyright 2009 The Apache Software Foundation.<br />Authorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>\r
+<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p></div>\r
</body></html>
\ No newline at end of file
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Authentification, autorisation et contrôle d'accès - Serveur Apache HTTP</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p>
-<p class="apache">Serveur Apache HTTP Version 2.3</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Serveur HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.3</a> > <a href="./">Recettes / Tutoriels</a></div><div id="page-content"><div id="preamble"><h1>Authentification, autorisation et contrôle d'accès</h1>
-<div class="toplang">
-<p><span>Langues Disponibles: </span><a href="../en/howto/auth.html" hreflang="en" rel="alternate" title="English"> en </a> |
-<a href="../fr/howto/auth.html" title="Français"> fr </a> |
-<a href="../ja/howto/auth.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> |
-<a href="../ko/howto/auth.html" hreflang="ko" rel="alternate" title="Korean"> ko </a></p>
-</div>
-
- <p>L'authentification est un processus qui vous permet de vérifier
- qu'une personne est bien celle qu'elle prétend être. L'autorisation
- est un processus qui permet à une personne d'aller là où elle veut
- aller, ou d'obtenir les informations qu'elle désire.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#related">Modules et directives concernés</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#introduction">Introduction</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#theprerequisites">Les prérequis</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#gettingitworking">Mise en oeuvre</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#lettingmorethanonepersonin">Autorisation d'accès à
-plusieurs personnes</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#possibleproblems">Problèmes possibles</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#dbmdbd">Autre méthode de stockage des mots de
-passe</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#multprovider">Utilisation de plusieurs fournisseurs
-d'authentification</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#beyond">Pour aller plus loin qu'une simple
-autorisation</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#moreinformation">Pour aller plus loin . . .</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="related" id="related">Modules et directives concernés</a></h2>
-
-<p>Trois groupes de modules sont concernés par le processus
-d'authentification et d'autorisation. Vous devrez utiliser au moins un
-module de chaque groupe.</p>
-
-<ul>
- <li>Type d'authentification (voir la directive <code class="directive"><a href="../mod/mod_authn_core.html#authtype">AuthType</a></code>)
- <ul>
- <li><code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code></li>
- <li><code class="module"><a href="../mod/mod_auth_digest.html">mod_auth_digest</a></code></li>
- </ul>
- </li>
- <li>Fournisseur d'authentification (voir les directives <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code> et <code class="directive"><a href="../mod/mod_auth_digest.html#authdigestprovider">AuthDigestProvider</a></code>)
-
- <ul>
- <li><code class="module"><a href="../mod/mod_authn_anon.html">mod_authn_anon</a></code></li>
- <li><code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code></li>
- <li><code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code></li>
- <li><code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code></li>
- <li><code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code></li>
- </ul>
- </li>
- <li>Autorisation (voir la directive <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code>)
- <ul>
- <li><code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code></li>
- <li><code class="module"><a href="../mod/mod_authz_dbd.html">mod_authz_dbd</a></code></li>
- <li><code class="module"><a href="../mod/mod_authz_dbm.html">mod_authz_dbm</a></code></li>
- <li><code class="module"><a href="../mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code></li>
- <li><code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code></li>
- <li><code class="module"><a href="../mod/mod_authz_owner.html">mod_authz_owner</a></code></li>
- <li><code class="module"><a href="../mod/mod_authz_user.html">mod_authz_user</a></code></li>
- </ul>
- </li>
-</ul>
-
- <p>On peut aussi ajouter <code class="module"><a href="../mod/mod_authn_core.html">mod_authn_core</a></code> et
- <code class="module"><a href="../mod/mod_authz_core.html">mod_authz_core</a></code>. Ces modules implémentent des
- directives générales qui opèrent au dessus de tous les modules
- d'authentification.</p>
-
- <p>Le module <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> est un fournisseur
- d'authentification et d'autorisation. Le module
- <code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code> fournit une autorisation et un
- contrôle d'accès basés sur le nom du serveur, l'adresse IP ou
- certaines caractéristiques de la requête, mais ne fait pas partie du
- système fournisseur d'authentification. Le module
- <code class="module"><a href="../mod/mod_access_compat.html">mod_access_compat</a></code> a été créé à des fins de
- compatibilité ascendante avec mod_access.</p>
-
- <p>Vous devriez aussi jeter un coup d'oeil au manuel de recettes de <a href="access.html">Contrôle d'accès</a>, qui décrit les différentes
- méthodes de contrôle d'accès à votre serveur.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="introduction" id="introduction">Introduction</a></h2>
- <p>Si votre site web contient des informations sensibles ou
- destinées seulement à un groupe de personnes restreint, les
- techniques exposées dans cet article vont vous aider à vous assurer
- que les personnes qui ont accès à ces pages sont bien celles
- auxquelles vous avez donné l'autorisation d'accès.</p>
-
- <p>Cet article décrit les méthodes "standards" de protection de
- parties de votre site web que la plupart d'entre vous sont appelés à
- utiliser.</p>
-
- <div class="note"><h3>Note :</h3>
- <p>Si vos données ont un réel besoin de sécurisation, prévoyez
- l'utilisation de <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> en plus de toute méthode
- d'authentification.</p>
- </div>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="theprerequisites" id="theprerequisites">Les prérequis</a></h2>
- <p>Les directives décrites dans cet article devront être insérées
- soit au niveau de la configuration de votre serveur principal (en
- général dans une section <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code>), soit au niveau de la
- configuration des répertoires (fichiers <code>.htaccess</code>)</p>
-
- <p>Si vous envisagez l'utilisation de fichiers
- <code>.htaccess</code>, la configuration de votre serveur devra
- permettre l'ajout de directives d'authentification dans ces
- fichiers. Pour ce faire, on utilise la directive <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code>, qui spécifie quelles
- directives pourront éventuellement contenir les fichiers de
- configuration de niveau répertoire.</p>
-
- <p>Comme il est ici question d'authentification, vous aurez besoin
- d'une directive <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code>
- du style :</p>
-
- <div class="example"><p><code>
- AllowOverride AuthConfig
- </code></p></div>
-
- <p>Si vous avez l'intention d'ajouter les directives directement
- dans le fichier de configuration principal, vous devrez bien entendu
- posséder les droits en écriture sur ce fichier.</p>
-
- <p>Vous devrez aussi connaître un tant soit peu la structure des
- répertoires de votre serveur, ne serait-ce que pour savoir où se
- trouvent certains fichiers. Cela ne devrait pas présenter de grandes
- difficultés, et nous essaierons de clarifier tout ça lorsque le besoin
- s'en fera sentir.</p>
-
- <p>Enfin, vous devrez vous assurer que les modules
- <code class="module"><a href="../mod/mod_authn_core.html">mod_authn_core</a></code> et <code class="module"><a href="../mod/mod_authz_core.html">mod_authz_core</a></code>
- ont été soit compilés avec le binaire httpd, soit chargés par le
- fichier de configuration httpd.conf. Ces deux modules fournissent
- des directives générales et des fonctionnalités qui sont critiques
- quant à la configuration et l'utilisation de l'authentification et
- de l'autorisation au sein du serveur web.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="gettingitworking" id="gettingitworking">Mise en oeuvre</a></h2>
- <p>Nous décrivons ici les bases de la protection par mot de passe
- d'un répertoire de votre serveur.</p>
-
- <p>Vous devez en premier lieu créer un fichier de mots de passe. La
- méthode exacte selon laquelle vous allez créer ce fichier va varier
- en fonction du fournisseur d'authentification choisi. Mais nous
- entrerons dans les détails plus loin, et pour le moment, nous nous
- contenterons d'un fichier de mots de passe en mode texte.</p>
-
- <p>Ce fichier doit être enregistré à un endroit non accessible
- depuis le web, de façon à ce que les clients ne puissent pas le
- télécharger. Par exemple, si vos documents sont servis à partir de
- <code>/usr/local/apache/htdocs</code>, vous pouvez enregistrer le
- fichier des mots de passe dans
- <code>/usr/local/apache/passwd</code>.</p>
-
- <p>L'utilitaire <code class="program"><a href="../programs/htpasswd.html">htpasswd</a></code> fourni avec Apache
- permet de créer ce fichier. Vous le trouverez dans le répertoire
- <code>bin</code> de votre installation d'Apache. Si vous avez
- installé Apache à partir d'un paquetage tiers, il sera probablement
- dans le chemin par défaut de vos exécutables.</p>
-
- <p>Pour créer le fichier, tapez :</p>
-
- <div class="example"><p><code>
- htpasswd -c /usr/local/apache/passwd/passwords rbowen
- </code></p></div>
-
- <p><code class="program"><a href="../programs/htpasswd.html">htpasswd</a></code> vous demandera d'entrer le mot de
- passe, et de le retaper pour confirmation :</p>
-
- <div class="example"><p><code>
- # htpasswd -c /usr/local/apache/passwd/passwords rbowen<br />
- New password: mot-de-passe<br />
- Re-type new password: mot-de-passe<br />
- Adding password for user rbowen
- </code></p></div>
-
- <p>Si <code class="program"><a href="../programs/htpasswd.html">htpasswd</a></code> n'est pas dans le chemin par
- défaut de vos exécutables, vous devrez bien entendu entrer le chemin
- complet du fichier. Dans le cas d'une installation par défaut, il se
- trouve à <code>/usr/local/apache2/bin/htpasswd</code>.</p>
-
- <p>Ensuite, vous allez devoir configurer le serveur de façon à ce
- qu'il demande un mot de passe et lui préciser quels utilisateurs ont
- l'autorisation d'accès. Pour ce faire, vous pouvez soit éditer le
- fichier <code>httpd.conf</code>, soit utiliser un fichier
- <code>.htaccess</code>. Par exemple, si vous voulez protéger le
- répertoire <code>/usr/local/apache/htdocs/secret</code>, vous pouvez
- utiliser les directives suivantes, soit dans le fichier
- <code>/usr/local/apache/htdocs/secret/.htaccess</code>, soit dans le
- fichier <code>httpd.conf</code> à l'intérieur d'une section <Directory
- /usr/local/apache/htdocs/secret> :</p>
-
- <div class="example"><p><code>
- AuthType Basic<br />
- AuthName "Fichiers réservés"<br />
- # (La ligne suivante est facultative)<br />
- AuthBasicProvider file<br />
- AuthUserFile /usr/local/apache/passwd/passwords<br />
- Require user rbowen
- </code></p></div>
-
- <p>Examinons ces directives une à une. La directive <code class="directive"><a href="../mod/mod_authn_core.html#authtype">AuthType</a></code> définit la méthode
- utilisée pour authentifier l'utilisateur. La méthode la plus
- courante est <code>Basic</code>, et elle est implémentée par
- <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code>. Il faut cependant garder à l'esprit
- que l'authentification Basic transmet le mot de passe depuis le
- client vers le serveur en clair. Cette méthode ne devra donc pas
- être utilisée pour la transmission de données hautement sensibles si
- elle n'est pas associée au module <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code>. Apache
- supporte une autre méthode d'authentification : <code>AuthType
- Digest</code>. Cette méthode est implémentée par le module <code class="module"><a href="../mod/mod_auth_digest.html">mod_auth_digest</a></code> et est beaucoup plus sécurisée. La plupart
- des navigateurs récents supportent l'authentification Digest.</p>
-
- <p>La directive <code class="directive"><a href="../mod/mod_authn_core.html#authname">AuthName</a></code> définit
- l'<dfn>Identificateur</dfn> (Realm) à utiliser avec
- l'authentification. L'identificateur possède deux fonctions. Tout
- d'abord, le client présente en général cette information à
- l'utilisateur dans le cadre de la boîte de dialogue de mot de passe.
- Ensuite, le client l'utilise pour déterminer quel mot de passe
- envoyer pour une zone authentifiée donnée.</p>
-
- <p>Ainsi par exemple, une fois un client authentifié dans la zone
- <code>"Fichiers réservés"</code>, il soumettra à nouveau
- automatiquement le même mot de passe pour toute zone du même serveur
- marquée de l'identificateur <code>"Fichiers réservés"</code>. De
- cette façon, vous pouvez éviter à un utilisateur d'avoir à saisir
- plusieurs fois le même mot de passe en faisant partager le même
- identificateur entre plusieurs zones réservées. Bien entendu et pour
- des raisons de sécurité, le client devra redemander le mot
- de passe chaque fois que le nom d'hôte du serveur sera modifié.</p>
-
- <p>La directive <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code> est, dans ce
- cas, facultative, car <code>file</code> est la valeur par défaut
- pour cette directive. Par contre, cette directive sera obligatoire
- si vous utilisez une autre source d'authentification comme
- <code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code> ou
- <code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code>.</p>
-
- <p>La directive <code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code> définit le chemin
- du fichier de mots de passe que nous venons de créer avec
- <code class="program"><a href="../programs/htpasswd.html">htpasswd</a></code>. Si vous possédez un grand nombre
- d'utilisateurs, la durée de la recherche dans un fichier texte pour
- authentifier un utilisateur à chaque requête va augmenter
- rapidement, et pour pallier cet inconvénient, Apache peut aussi
- stocker les données relatives aux
- utilisateurs dans des bases de données rapides. Le module
- <code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code> fournit la directive <code class="directive"><a href="../mod/mod_authn_dbm.html#authdbmuserfile">AuthDBMUserFile</a></code>. Le programme <code class="program"><a href="../programs/dbmmanage.html">dbmmanage</a></code> permet de créer et manipuler ces fichiers. Vous
- trouverez de nombreuses options d'autres types d'authentification
- fournies par des modules tiers dans la <a href="http://modules.apache.org/">Base de données des modules
- d'Apache</a>.</p>
-
- <p>Enfin, la directive <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> implémente la partie
- autorisation du processus en définissant l'utilisateur autorisé à
- accéder à cette zone du serveur. Dans la section suivante, nous
- décrirons les différentes méthodes d'utilisation de la directive
- <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code>.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="lettingmorethanonepersonin" id="lettingmorethanonepersonin">Autorisation d'accès à
-plusieurs personnes</a></h2>
- <p>Les directives ci-dessus n'autorisent qu'une personne (quelqu'un
- possédant le nom d'utilisateur <code>rbowen</code>) à accéder au
- répertoire. Dans la plupart des cas, vous devrez autoriser
- l'accès à plusieurs personnes. C'est ici
- qu'intervient la directive <code class="directive"><a href="../mod/mod_authz_groupfile.html#authgroupfile">AuthGroupFile</a></code>.</p>
-
- <p>Si vous voulez autoriser l'accès à plusieurs personnes, vous
- devez créer un fichier de groupes qui associe des noms de groupes
- avec une liste d'utilisateurs de ce groupe. Le format de ce fichier
- est très simple, et vous pouvez le créer avec votre éditeur favori.
- Son contenu se présente comme suit :</p>
-
- <div class="example"><p><code>
- Nom-de-groupe: rbowen dpitts sungo rshersey
- </code></p></div>
-
- <p>Il s'agit simplement une liste des membres du groupe sous la
- forme d'une ligne séparée par des espaces.</p>
-
- <p>Pour ajouter un utilisateur à votre fichier de mots de passe
- préexistant, entrez :</p>
-
- <div class="example"><p><code>
- htpasswd /usr/local/apache/passwd/passwords dpitts
- </code></p></div>
-
- <p>Vous obtiendrez le même effet qu'auparavant, mais le mot de passe
- sera ajouté au fichier, plutôt que d'en créer un nouveau (C'est le
- drapeau <code>-c</code> qui permet de créer un nouveau fichier de
- mots de passe)..</p>
-
- <p>Maintenant, vous devez modifier votre fichier
- <code>.htaccess</code> comme suit :</p>
-
- <div class="example"><p><code>
- AuthType Basic<br />
- AuthName "By Invitation Only"<br />
- # Ligne facultative :<br />
- AuthBasicProvider file<br />
- AuthUserFile /usr/local/apache/passwd/passwords<br />
- AuthGroupFile /usr/local/apache/passwd/groups<br />
- Require group Nom-de-groupe
- </code></p></div>
-
- <p>Maintenant, quiconque appartient au groupe
- <code>Nom-de-groupe</code>, et possède une entrée dans le fichier
- <code>password</code> pourra accéder au répertoire s'il tape le bon
- mot de passe.</p>
-
- <p>Il existe une autre méthode moins contraignante pour autoriser
- l'accès à plusieurs personnes. Plutôt que de créer un fichier de
- groupes, il vous suffit d'ajouter la directive suivante :</p>
-
- <div class="example"><p><code>
- Require valid-user
- </code></p></div>
-
- <p>Le remplacement de la ligne <code>Require user rbowen</code> par
- la ligne <code>Require valid-user</code> autorisera l'accès à
- quiconque possédant une entrée dans le fichier password, et ayant
- tapé le bon mot de passe. Vous pouvez même simuler le comportement
- des groupes en associant un fichier de mots de passe différent pour
- chaque groupe. L'avantage de cette approche réside dans le fait
- qu'Apache ne doit consulter qu'un fichier au lieu de deux. Par
- contre, vous devez maintenir un nombre plus ou moins important de
- fichiers de mots de passe, et vous assurer de faire référence au bon
- fichier dans la directive <code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code>.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="possibleproblems" id="possibleproblems">Problèmes possibles</a></h2>
- <p>L'authentification Basic est spécifiée d'une telle manière que
- vos nom d'utilisateur et mot de passe doivent être vérifiés chaque
- fois que vous demandez un document au serveur, et ceci même si vous
- rechargez la même page, et pour chaque image contenue dans la page
- (si elles sont situées dans un répertoire protégé). Comme vous
- pouvez l'imaginer, ceci ralentit un peu le fonctionnement. La mesure
- dans laquelle le fonctionnement est ralenti est proportionnelle à la
- taille du fichier des mots de passe, car ce dernier doit être ouvert
- et la liste des utilisateurs parcourue jusqu'à ce que votre nom soit
- trouvé, et ceci chaque fois qu'une page est chargée.</p>
-
- <p>En conséquence, ce ralentissement impose une limite pratique au
- nombre d'utilisateurs que vous pouvez enregistrer dans un fichier de
- mots de passe. Cette limite va varier en fonction des performances
- de votre serveur, mais vous commencerez à remarquer un
- ralentissement lorsque vous atteindrez quelques centaines
- d'utilisateurs, et serez alors appelés à utiliser une méthode
- d'authentification différente.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="dbmdbd" id="dbmdbd">Autre méthode de stockage des mots de
-passe</a></h2>
-
- <p>Suite au problème évoqué précédemment et induit par le stockage
- des mots de passe dans un fichier texte, vous pouvez être appelé à
- stocker vos mots de passe d'une autre manière, par exemple dans une
- base de données.</p>
-
- <p>Pour y parvenir, on peut utiliser les modules
- <code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code> ou <code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code>.
- Vous pouvez choisir comme format de stockage <code>dbm</code> ou
- <code>dbd</code> à la place de <code>file</code> pour la directive
- <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code>.</p>
-
- <p>Par exemple, pour sélectionner un fichier dbm à la place d'un
- fichier texte :</p>
-
- <div class="example"><p><code>
- <Directory /www/docs/private><br />
- AuthName "Private"<br />
- AuthType Basic<br />
- AuthBasicProvider dbm<br />
- AuthDBMUserFile /www/passwords/passwd.dbm<br />
- Require valid-user<br />
- </Directory>
- </code></p></div>
-
- <p>D'autres options sont disponibles. Consultez la documentation de
- <code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code> pour plus de détails.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="multprovider" id="multprovider">Utilisation de plusieurs fournisseurs
-d'authentification</a></h2>
-
- <p>Depuis l'arrivée des nouvelles architecture d'autorisation et
- d'authentification basées sur les fournisseurs, vous n'êtes plus
- limité à une méthode d'authentification et d'autorisation
- unique. En fait, on peut panacher autant de fournisseurs que l'on
- veut, ce qui vous permet d'élaborer l'architecture qui correspond
- exactement à vos besoins. Dans l'exemple suivant, on utilise
- conjointement les fournisseurs d'authentification
- file et LDAP :</p>
-
- <div class="example"><p><code>
- <Directory /www/docs/private><br />
- AuthName "Private"<br />
- AuthType Basic<br />
- AuthBasicProvider file ldap<br />
- AuthUserFile /usr/local/apache/passwd/passwords<br />
- AuthLDAPURL ldap://ldaphost/o=yourorg<br />
- Require valid-user<br />
- </Directory>
- </code></p></div>
-
- <p>Dans cet exemple, le fournisseur file va tenter d'authentifier
- l'utilisateur en premier. S'il n'y parvient pas, le fournisseur LDAP
- sera sollicité. Ceci permet l'élargissement des possibilités
- d'authentification si votre organisation implémente plusieurs types
- de bases d'authentification. D'autres scénarios d'authentification
- et d'autorisation peuvent associer un type d'authentification avec
- un autre type d'autorisation. Par exemple, une authentification
- basée sur un fichier de mots de passe peut permettre l'attribution
- d'autorisations basée sur un annuaire LDAP.</p>
-
- <p>Tout comme plusieurs fournisseurs d'authentification peuvent être
- implémentés, on peut aussi utiliser plusieurs méthodes
- d'autorisation. Dans l'exemple suivant, on utilise à la fois une
- autorisation à base de fichier de groupes et une autorisation à base
- de groupes LDAP.</p>
-
- <div class="example"><p><code>
- <Directory /www/docs/private><br />
- AuthName "Private"<br />
- AuthType Basic<br />
- AuthBasicProvider file<br />
- AuthUserFile /usr/local/apache/passwd/passwords<br />
- AuthLDAPURL ldap://ldaphost/o=yourorg
- AuthGroupFile /usr/local/apache/passwd/groups<br />
- Require group GroupName<br />
- Require ldap-group cn=mygroup,o=yourorg<br />
- </Directory>
- </code></p></div>
-
- <p>Pour un scénario d'autorisation un peu plus avancé, des
- directives de conteneur d'autorisation comme <code class="directive"><a href="../mod/mod_authz_core.html#requireall"><RequireAll></a></code> et
- <code class="directive"><a href="../mod/mod_authz_core.html#requireany"><RequireAny></a></code> permettent d'appliquer une
- logique telle que l'ordre dans lequel les autorisations sont
- appliquées peut être entièrement contrôlé au niveau de la
- configuration. Voir <a href="../mod/mod_authz_core.html#logic">Conteneurs
- d'autorisations</a> pour un exemple de ce contrôle.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="beyond" id="beyond">Pour aller plus loin qu'une simple
-autorisation</a></h2>
-
- <p>La manière dont les autorisations sont accordées est désormais
- beaucoup plus souple qu'une simple vérification auprès d'une seule
- base de données. Il est maintenant possible de choisir l'ordre, la
- logique et la manière selon lesquels une autorisation est
- accordée.</p>
-
- <h3><a name="authandororder" id="authandororder">Appliquer logique et
- ordonnancement</a></h3>
- <p>Le contrôle de la manière et de l'ordre selon lesquels le
- processus d'autorisation était appliqué
- constituait une sorte de mystère par
- le passé. Dans Apache 2.2, un mécanisme d'authentification basé
- sur les fournisseurs a été développé afin de séparer le
- véritable processus d'authentification de l'autorisation et ses
- différentes fonctionnalités. Un des avantages colatéraux
- résidait dans le fait que les fournisseurs d'authentification
- pouvaient être configurés et appelés selon un ordre particulier
- indépendant de l'ordre de chargement du module auth proprement
- dit. Ce mécanisme basé sur les fournisseurs a été étendu au
- processus d'autorisation. Ceci signifie que la directive
- <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> définit
- non seulement quelles méthodes d'autorisation doivent être
- utilisées, mais aussi l'ordre dans lequel elles sont appelées.
- Les méthodes d'autorisation sont appelées selon l'ordre dans
- lequel les directives <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> apparaissent dans la
- configuration.</p>
-
- <p>Avec l'introduction des directives de conteneur
- d'autorisations <code class="directive"><a href="../mod/mod_authz_core.html#requireall"><RequireAll></a></code>
- et <code class="directive"><a href="../mod/mod_authz_core.html#requireany"><RequireAny></a></code>, la
- configuration contrôle aussi le moment où les méthodes
- d'autorisation sont appelées, et quels critères déterminent
- l'autorisation d'accès. Voir <a href="../mod/mod_authz_core.html#logic">Conteneurs
- d'autorisations</a> pour un exemple de la manière de les
- utiliser pour exprimer des logiques d'autorisation
- complexes.</p>
-
- <p>Par défaut, toutes les directives <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> sont
- traitées comme si elles étaient contenues dans une directive
- <code class="directive"><a href="../mod/mod_authz_core.html#requireany"><RequireAny></a></code>. En d'autres termes, il
- suffit
- qu'une méthode d'autorisation s'applique avec succès pour que
- l'autorisation soit accordée.</p>
-
-
-
- <h3><a name="reqaccessctrl" id="reqaccessctrl">Utilisation de fournisseurs
- d'autorisation pour le contrôle d'accès</a></h3>
- <p>La vérification du nom d'utilisateur et du mot de passe ne
- constituent qu'un aspect des méthodes d'authentification.
- Souvent, le contrôle d'accès à certaines personnes n'est pas
- basé sur leur identité ; il peut dépendre, par exemple de leur
- provenance.</p>
-
- <p>Les fournisseurs d'autorisation <code class="directive"><a href="../mod/mod_authz_host.html# all">
- all</a></code>, <code class="directive"><a href="../mod/mod_authz_host.html# env">
- env</a></code>, <code class="directive"><a href="../mod/mod_authz_host.html# host">
- host</a></code> et <code class="directive"><a href="../mod/mod_authz_host.html# ip">
- ip</a></code> vous permettent d'accorder ou refuser l'accès en
- fonction de critères tels que le nom d'hôte ou l'adresse
- IP de la machine qui effectue la requête.</p>
-
- <p>L'utilisation de ces fournisseurs est spécifiée à l'aide de
- la directive <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code>. Cette directive
- permet d'enregistrer quels fournisseurs d'autorisation
- seront appelés dans le processus d'autorisation au cours du
- traitement de la requête. Par exemple :</p>
-
- <div class="example"><p><code>
- Require ip <var>adresse</var>
- </code></p></div>
-
- <p>où <var>adresse</var> est une adresse IP (ou une adresse IP
- partielle) ou :</p>
-
- <div class="example"><p><code>
- Require host <var>nom_domaine</var>
- </code></p></div>
-
- <p>où <var>nom_domaine</var> est un nom de domaine entièrement
- qualifé (ou un nom de domaine partiel) ; vous pouvez indiquer
- plusieurs adresses ou noms de domaines, si vous le désirez.</p>
-
- <p>Par exemple, si vous voulez rejeter les spams dont une
- machine vous inonde, vous pouvez utiliser ceci :</p>
-
- <div class="example"><p><code>
- <RequireAll>
- <span class="indent">
- Require all granted<br />
- Require not ip 10.252.46.165
- </span>
- </RequireAll>
- </code></p></div>
-
- <p>Ainsi, les visiteurs en provenance de cette adresse ne
- pourront pas voir le contenu concerné par cette directive. Si,
- par contre, vous connaissez le nom de la machine, vous pouvez
- utiliser ceci :</p>
-
- <div class="example"><p><code>
- <RequireAll>
- <span class="indent">
- Require all granted<br />
- Require not host <var>serveur.exemple.com</var>
- </span>
- </RequireAll>
- </code></p></div>
-
- <p>Et si vous voulez interdire l'accès à toutes les machines
- d'un domaine, vous pouvez spécifier une partie seulement de
- l'adresse ou du nom de domaine :</p>
-
- <div class="example"><p><code>
- <RequireAll>
- <span class="indent">
- Require all granted<br />
- <RequireNone>
- <span class="indent">
- Require ip 192.168.205<br />
- Require host phishers.exemple.com autres-idiots.exemple<br />
- Require host ke
- </span>
- </RequireNone>
- </span>
- </RequireAll>
- </code></p></div>
-
- <p>Dans l'exemple ci-dessus, on utilise la directive du
- conteneur <code class="directive"><a href="../mod/mod_authz_core.html#requirenone"><RequireNone></a></code> afin de s'assurer
- qu'aucune des directives <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> qu'il contient ne
- fasse correspondre ses paramètres avant d'accorder
- l'autorisation.</p>
-
-
-
- <h3><a name="filesystem" id="filesystem">Compatibilité ascendante du contrôle
- d'accès</a></h3>
- <p>L'adoption d'un mécanisme à base de fournisseurs pour
- l'authentification, a pour effet colatéral de rendre inutiles
- les directives <code class="directive"><a href="../mod/mod_access_compat.html#order">Order</a></code>, <code class="directive"><a href="../mod/mod_access_compat.html#allow">Allow</a></code>, <code class="directive"><a href="../mod/mod_access_compat.html#deny">Deny</a></code> et <code class="directive"><a href="../mod/mod_access_compat.html#satisfy">Satisfy</a></code>. Cependant, et à
- des fins de compatibilité ascendante vers les anciennes
- configurations, ces directives ont été déplacées vers le module
- <code class="module"><a href="../mod/mod_access_compat.html">mod_access_compat</a></code>.</p>
-
-
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="moreinformation" id="moreinformation">Pour aller plus loin . . .</a></h2>
- <p>Vous pouvez aussi lire la documentation de
- <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code> et <code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code>
- qui contient des informations supplémentaires à propos du
- fonctionnement de tout ceci.
- Certaines configurations d'authentification peuvent aussi être
- simplifiées à l'aide de la directive <code class="directive"><a href="../mod/mod_authn_core.html#<authnprovideralias>"><AuthnProviderAlias></a></code>.</p>
-
- <p>Les différents algorithmes de chiffrement supportés par Apache
- pour authentifier les données sont expliqués dans <a href="../misc/password_encryptions.html">PasswordEncryptions</a>.</p>
-
- <p>Enfin vous pouvez consulter la recette <a href="access.html">Contrôle
- d'accès</a>, qui décrit un certain nombre de situations en relation
- avec le sujet.</p>
-
-</div></div>
-<div class="bottomlang">
-<p><span>Langues Disponibles: </span><a href="../en/howto/auth.html" hreflang="en" rel="alternate" title="English"> en </a> |
-<a href="../fr/howto/auth.html" title="Français"> fr </a> |
-<a href="../ja/howto/auth.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> |
-<a href="../ko/howto/auth.html" hreflang="ko" rel="alternate" title="Korean"> ko </a></p>
-</div><div id="footer">
-<p class="apache">Copyright 2009 The Apache Software Foundation.<br />Authorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p></div>
+<?xml version="1.0" encoding="ISO-8859-1"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head><!--\r
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r
+ This file is generated from xml source: DO NOT EDIT\r
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r
+ -->\r
+<title>Authentification, autorisation et contrôle d'accès - Serveur Apache HTTP</title>\r
+<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />\r
+<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />\r
+<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />\r
+<link href="../images/favicon.ico" rel="shortcut icon" /></head>\r
+<body id="manual-page"><div id="page-header">\r
+<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p>\r
+<p class="apache">Serveur Apache HTTP Version 2.3</p>\r
+<img alt="" src="../images/feather.gif" /></div>\r
+<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div>\r
+<div id="path">\r
+<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Serveur HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.3</a> > <a href="./">Recettes / Tutoriels</a></div><div id="page-content"><div id="preamble"><h1>Authentification, autorisation et contrôle d'accès</h1>\r
+<div class="toplang">\r
+<p><span>Langues Disponibles: </span><a href="../en/howto/auth.html" hreflang="en" rel="alternate" title="English"> en </a> |\r
+<a href="../fr/howto/auth.html" title="Français"> fr </a> |\r
+<a href="../ja/howto/auth.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> |\r
+<a href="../ko/howto/auth.html" hreflang="ko" rel="alternate" title="Korean"> ko </a></p>\r
+</div>\r
+\r
+ <p>L'authentification est un processus qui vous permet de vérifier\r
+ qu'une personne est bien celle qu'elle prétend être. L'autorisation\r
+ est un processus qui permet à une personne d'aller là où elle veut\r
+ aller, ou d'obtenir les informations qu'elle désire.</p>\r
+</div>\r
+<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#related">Modules et directives concernés</a></li>\r
+<li><img alt="" src="../images/down.gif" /> <a href="#introduction">Introduction</a></li>\r
+<li><img alt="" src="../images/down.gif" /> <a href="#theprerequisites">Les prérequis</a></li>\r
+<li><img alt="" src="../images/down.gif" /> <a href="#gettingitworking">Mise en oeuvre</a></li>\r
+<li><img alt="" src="../images/down.gif" /> <a href="#lettingmorethanonepersonin">Autorisation d'accès à\r
+plusieurs personnes</a></li>\r
+<li><img alt="" src="../images/down.gif" /> <a href="#possibleproblems">Problèmes possibles</a></li>\r
+<li><img alt="" src="../images/down.gif" /> <a href="#dbmdbd">Autre méthode de stockage des mots de\r
+passe</a></li>\r
+<li><img alt="" src="../images/down.gif" /> <a href="#multprovider">Utilisation de plusieurs fournisseurs\r
+d'authentification</a></li>\r
+<li><img alt="" src="../images/down.gif" /> <a href="#beyond">Pour aller plus loin qu'une simple\r
+autorisation</a></li>\r
+<li><img alt="" src="../images/down.gif" /> <a href="#moreinformation">Pour aller plus loin . . .</a></li>\r
+</ul></div>\r
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="related" id="related">Modules et directives concernés</a></h2>\r
+\r
+<p>Trois groupes de modules sont concernés par le processus\r
+d'authentification et d'autorisation. Vous devrez utiliser au moins un\r
+module de chaque groupe.</p>\r
+\r
+<ul>\r
+ <li>Type d'authentification (voir la directive <code class="directive"><a href="../mod/mod_authn_core.html#authtype">AuthType</a></code>)\r
+ <ul>\r
+ <li><code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code></li>\r
+ <li><code class="module"><a href="../mod/mod_auth_digest.html">mod_auth_digest</a></code></li>\r
+ </ul>\r
+ </li>\r
+ <li>Fournisseur d'authentification (voir les directives <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code> et <code class="directive"><a href="../mod/mod_auth_digest.html#authdigestprovider">AuthDigestProvider</a></code>)\r
+\r
+ <ul>\r
+ <li><code class="module"><a href="../mod/mod_authn_anon.html">mod_authn_anon</a></code></li>\r
+ <li><code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code></li>\r
+ <li><code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code></li>\r
+ <li><code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code></li>\r
+ <li><code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code></li>\r
+ </ul>\r
+ </li>\r
+ <li>Autorisation (voir la directive <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code>)\r
+ <ul>\r
+ <li><code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code></li>\r
+ <li><code class="module"><a href="../mod/mod_authz_dbd.html">mod_authz_dbd</a></code></li>\r
+ <li><code class="module"><a href="../mod/mod_authz_dbm.html">mod_authz_dbm</a></code></li>\r
+ <li><code class="module"><a href="../mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code></li>\r
+ <li><code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code></li>\r
+ <li><code class="module"><a href="../mod/mod_authz_owner.html">mod_authz_owner</a></code></li>\r
+ <li><code class="module"><a href="../mod/mod_authz_user.html">mod_authz_user</a></code></li>\r
+ </ul>\r
+ </li>\r
+</ul>\r
+\r
+ <p>On peut aussi ajouter <code class="module"><a href="../mod/mod_authn_core.html">mod_authn_core</a></code> et\r
+ <code class="module"><a href="../mod/mod_authz_core.html">mod_authz_core</a></code>. Ces modules implémentent des\r
+ directives générales qui opèrent au dessus de tous les modules\r
+ d'authentification.</p>\r
+\r
+ <p>Le module <code class="module"><a href="../mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> est un fournisseur\r
+ d'authentification et d'autorisation. Le module\r
+ <code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code> fournit une autorisation et un\r
+ contrôle d'accès basés sur le nom du serveur, l'adresse IP ou\r
+ certaines caractéristiques de la requête, mais ne fait pas partie du\r
+ système fournisseur d'authentification. Le module\r
+ <code class="module"><a href="../mod/mod_access_compat.html">mod_access_compat</a></code> a été créé à des fins de\r
+ compatibilité ascendante avec mod_access.</p>\r
+\r
+ <p>Vous devriez aussi jeter un coup d'oeil au manuel de recettes de <a href="access.html">Contrôle d'accès</a>, qui décrit les différentes\r
+ méthodes de contrôle d'accès à votre serveur.</p>\r
+\r
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="introduction" id="introduction">Introduction</a></h2>\r
+ <p>Si votre site web contient des informations sensibles ou\r
+ destinées seulement à un groupe de personnes restreint, les\r
+ techniques exposées dans cet article vont vous aider à vous assurer\r
+ que les personnes qui ont accès à ces pages sont bien celles\r
+ auxquelles vous avez donné l'autorisation d'accès.</p>\r
+\r
+ <p>Cet article décrit les méthodes "standards" de protection de\r
+ parties de votre site web que la plupart d'entre vous sont appelés à\r
+ utiliser.</p>\r
+\r
+ <div class="note"><h3>Note :</h3>\r
+ <p>Si vos données ont un réel besoin de sécurisation, prévoyez\r
+ l'utilisation de <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> en plus de toute méthode\r
+ d'authentification.</p>\r
+ </div>\r
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="theprerequisites" id="theprerequisites">Les prérequis</a></h2>\r
+ <p>Les directives décrites dans cet article devront être insérées\r
+ soit au niveau de la configuration de votre serveur principal (en\r
+ général dans une section <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code>), soit au niveau de la\r
+ configuration des répertoires (fichiers <code>.htaccess</code>)</p>\r
+\r
+ <p>Si vous envisagez l'utilisation de fichiers\r
+ <code>.htaccess</code>, la configuration de votre serveur devra\r
+ permettre l'ajout de directives d'authentification dans ces\r
+ fichiers. Pour ce faire, on utilise la directive <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code>, qui spécifie quelles\r
+ directives pourront éventuellement contenir les fichiers de\r
+ configuration de niveau répertoire.</p>\r
+\r
+ <p>Comme il est ici question d'authentification, vous aurez besoin\r
+ d'une directive <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code>\r
+ du style :</p>\r
+\r
+ <div class="example"><p><code>\r
+ AllowOverride AuthConfig\r
+ </code></p></div>\r
+\r
+ <p>Si vous avez l'intention d'ajouter les directives directement\r
+ dans le fichier de configuration principal, vous devrez bien entendu\r
+ posséder les droits en écriture sur ce fichier.</p>\r
+\r
+ <p>Vous devrez aussi connaître un tant soit peu la structure des\r
+ répertoires de votre serveur, ne serait-ce que pour savoir où se\r
+ trouvent certains fichiers. Cela ne devrait pas présenter de grandes\r
+ difficultés, et nous essaierons de clarifier tout ça lorsque le besoin\r
+ s'en fera sentir.</p>\r
+\r
+ <p>Enfin, vous devrez vous assurer que les modules\r
+ <code class="module"><a href="../mod/mod_authn_core.html">mod_authn_core</a></code> et <code class="module"><a href="../mod/mod_authz_core.html">mod_authz_core</a></code>\r
+ ont été soit compilés avec le binaire httpd, soit chargés par le\r
+ fichier de configuration httpd.conf. Ces deux modules fournissent\r
+ des directives générales et des fonctionnalités qui sont critiques\r
+ quant à la configuration et l'utilisation de l'authentification et\r
+ de l'autorisation au sein du serveur web.</p>\r
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="gettingitworking" id="gettingitworking">Mise en oeuvre</a></h2>\r
+ <p>Nous décrivons ici les bases de la protection par mot de passe\r
+ d'un répertoire de votre serveur.</p>\r
+\r
+ <p>Vous devez en premier lieu créer un fichier de mots de passe. La\r
+ méthode exacte selon laquelle vous allez créer ce fichier va varier\r
+ en fonction du fournisseur d'authentification choisi. Mais nous\r
+ entrerons dans les détails plus loin, et pour le moment, nous nous\r
+ contenterons d'un fichier de mots de passe en mode texte.</p>\r
+\r
+ <p>Ce fichier doit être enregistré à un endroit non accessible\r
+ depuis le web, de façon à ce que les clients ne puissent pas le\r
+ télécharger. Par exemple, si vos documents sont servis à partir de\r
+ <code>/usr/local/apache/htdocs</code>, vous pouvez enregistrer le\r
+ fichier des mots de passe dans\r
+ <code>/usr/local/apache/passwd</code>.</p>\r
+\r
+ <p>L'utilitaire <code class="program"><a href="../programs/htpasswd.html">htpasswd</a></code> fourni avec Apache\r
+ permet de créer ce fichier. Vous le trouverez dans le répertoire\r
+ <code>bin</code> de votre installation d'Apache. Si vous avez\r
+ installé Apache à partir d'un paquetage tiers, il sera probablement\r
+ dans le chemin par défaut de vos exécutables.</p>\r
+\r
+ <p>Pour créer le fichier, tapez :</p>\r
+\r
+ <div class="example"><p><code>\r
+ htpasswd -c /usr/local/apache/passwd/passwords rbowen\r
+ </code></p></div>\r
+\r
+ <p><code class="program"><a href="../programs/htpasswd.html">htpasswd</a></code> vous demandera d'entrer le mot de\r
+ passe, et de le retaper pour confirmation :</p>\r
+\r
+ <div class="example"><p><code>\r
+ # htpasswd -c /usr/local/apache/passwd/passwords rbowen<br />\r
+ New password: mot-de-passe<br />\r
+ Re-type new password: mot-de-passe<br />\r
+ Adding password for user rbowen\r
+ </code></p></div>\r
+\r
+ <p>Si <code class="program"><a href="../programs/htpasswd.html">htpasswd</a></code> n'est pas dans le chemin par\r
+ défaut de vos exécutables, vous devrez bien entendu entrer le chemin\r
+ complet du fichier. Dans le cas d'une installation par défaut, il se\r
+ trouve à <code>/usr/local/apache2/bin/htpasswd</code>.</p>\r
+\r
+ <p>Ensuite, vous allez devoir configurer le serveur de façon à ce\r
+ qu'il demande un mot de passe et lui préciser quels utilisateurs ont\r
+ l'autorisation d'accès. Pour ce faire, vous pouvez soit éditer le\r
+ fichier <code>httpd.conf</code>, soit utiliser un fichier\r
+ <code>.htaccess</code>. Par exemple, si vous voulez protéger le\r
+ répertoire <code>/usr/local/apache/htdocs/secret</code>, vous pouvez\r
+ utiliser les directives suivantes, soit dans le fichier\r
+ <code>/usr/local/apache/htdocs/secret/.htaccess</code>, soit dans le\r
+ fichier <code>httpd.conf</code> à l'intérieur d'une section <Directory\r
+ /usr/local/apache/htdocs/secret> :</p>\r
+\r
+ <div class="example"><p><code>\r
+ AuthType Basic<br />\r
+ AuthName "Fichiers réservés"<br />\r
+ # (La ligne suivante est facultative)<br />\r
+ AuthBasicProvider file<br />\r
+ AuthUserFile /usr/local/apache/passwd/passwords<br />\r
+ Require user rbowen\r
+ </code></p></div>\r
+\r
+ <p>Examinons ces directives une à une. La directive <code class="directive"><a href="../mod/mod_authn_core.html#authtype">AuthType</a></code> définit la méthode\r
+ utilisée pour authentifier l'utilisateur. La méthode la plus\r
+ courante est <code>Basic</code>, et elle est implémentée par\r
+ <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code>. Il faut cependant garder à l'esprit\r
+ que l'authentification Basic transmet le mot de passe depuis le\r
+ client vers le serveur en clair. Cette méthode ne devra donc pas\r
+ être utilisée pour la transmission de données hautement sensibles si\r
+ elle n'est pas associée au module <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code>. Apache\r
+ supporte une autre méthode d'authentification : <code>AuthType\r
+ Digest</code>. Cette méthode est implémentée par le module <code class="module"><a href="../mod/mod_auth_digest.html">mod_auth_digest</a></code> et est beaucoup plus sécurisée. La plupart\r
+ des navigateurs récents supportent l'authentification Digest.</p>\r
+\r
+ <p>La directive <code class="directive"><a href="../mod/mod_authn_core.html#authname">AuthName</a></code> définit\r
+ l'<dfn>Identificateur</dfn> (Realm) à utiliser avec\r
+ l'authentification. L'identificateur possède deux fonctions. Tout\r
+ d'abord, le client présente en général cette information à\r
+ l'utilisateur dans le cadre de la boîte de dialogue de mot de passe.\r
+ Ensuite, le client l'utilise pour déterminer quel mot de passe\r
+ envoyer pour une zone authentifiée donnée.</p>\r
+\r
+ <p>Ainsi par exemple, une fois un client authentifié dans la zone\r
+ <code>"Fichiers réservés"</code>, il soumettra à nouveau\r
+ automatiquement le même mot de passe pour toute zone du même serveur\r
+ marquée de l'identificateur <code>"Fichiers réservés"</code>. De\r
+ cette façon, vous pouvez éviter à un utilisateur d'avoir à saisir\r
+ plusieurs fois le même mot de passe en faisant partager le même\r
+ identificateur entre plusieurs zones réservées. Bien entendu et pour\r
+ des raisons de sécurité, le client devra redemander le mot\r
+ de passe chaque fois que le nom d'hôte du serveur sera modifié.</p>\r
+\r
+ <p>La directive <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code> est, dans ce\r
+ cas, facultative, car <code>file</code> est la valeur par défaut\r
+ pour cette directive. Par contre, cette directive sera obligatoire\r
+ si vous utilisez une autre source d'authentification comme\r
+ <code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code> ou\r
+ <code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code>.</p>\r
+\r
+ <p>La directive <code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code> définit le chemin\r
+ du fichier de mots de passe que nous venons de créer avec\r
+ <code class="program"><a href="../programs/htpasswd.html">htpasswd</a></code>. Si vous possédez un grand nombre\r
+ d'utilisateurs, la durée de la recherche dans un fichier texte pour\r
+ authentifier un utilisateur à chaque requête va augmenter\r
+ rapidement, et pour pallier cet inconvénient, Apache peut aussi\r
+ stocker les données relatives aux\r
+ utilisateurs dans des bases de données rapides. Le module\r
+ <code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code> fournit la directive <code class="directive"><a href="../mod/mod_authn_dbm.html#authdbmuserfile">AuthDBMUserFile</a></code>. Le programme <code class="program"><a href="../programs/dbmmanage.html">dbmmanage</a></code> permet de créer et manipuler ces fichiers. Vous\r
+ trouverez de nombreuses options d'autres types d'authentification\r
+ fournies par des modules tiers dans la <a href="http://modules.apache.org/">Base de données des modules\r
+ d'Apache</a>.</p>\r
+\r
+ <p>Enfin, la directive <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> implémente la partie\r
+ autorisation du processus en définissant l'utilisateur autorisé à\r
+ accéder à cette zone du serveur. Dans la section suivante, nous\r
+ décrirons les différentes méthodes d'utilisation de la directive\r
+ <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code>.</p>\r
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="lettingmorethanonepersonin" id="lettingmorethanonepersonin">Autorisation d'accès à\r
+plusieurs personnes</a></h2>\r
+ <p>Les directives ci-dessus n'autorisent qu'une personne (quelqu'un\r
+ possédant le nom d'utilisateur <code>rbowen</code>) à accéder au\r
+ répertoire. Dans la plupart des cas, vous devrez autoriser\r
+ l'accès à plusieurs personnes. C'est ici\r
+ qu'intervient la directive <code class="directive"><a href="../mod/mod_authz_groupfile.html#authgroupfile">AuthGroupFile</a></code>.</p>\r
+\r
+ <p>Si vous voulez autoriser l'accès à plusieurs personnes, vous\r
+ devez créer un fichier de groupes qui associe des noms de groupes\r
+ avec une liste d'utilisateurs de ce groupe. Le format de ce fichier\r
+ est très simple, et vous pouvez le créer avec votre éditeur favori.\r
+ Son contenu se présente comme suit :</p>\r
+\r
+ <div class="example"><p><code>\r
+ Nom-de-groupe: rbowen dpitts sungo rshersey\r
+ </code></p></div>\r
+\r
+ <p>Il s'agit simplement une liste des membres du groupe sous la\r
+ forme d'une ligne séparée par des espaces.</p>\r
+\r
+ <p>Pour ajouter un utilisateur à votre fichier de mots de passe\r
+ préexistant, entrez :</p>\r
+\r
+ <div class="example"><p><code>\r
+ htpasswd /usr/local/apache/passwd/passwords dpitts\r
+ </code></p></div>\r
+\r
+ <p>Vous obtiendrez le même effet qu'auparavant, mais le mot de passe\r
+ sera ajouté au fichier, plutôt que d'en créer un nouveau (C'est le\r
+ drapeau <code>-c</code> qui permet de créer un nouveau fichier de\r
+ mots de passe)..</p>\r
+\r
+ <p>Maintenant, vous devez modifier votre fichier\r
+ <code>.htaccess</code> comme suit :</p>\r
+\r
+ <div class="example"><p><code>\r
+ AuthType Basic<br />\r
+ AuthName "By Invitation Only"<br />\r
+ # Ligne facultative :<br />\r
+ AuthBasicProvider file<br />\r
+ AuthUserFile /usr/local/apache/passwd/passwords<br />\r
+ AuthGroupFile /usr/local/apache/passwd/groups<br />\r
+ Require group Nom-de-groupe\r
+ </code></p></div>\r
+\r
+ <p>Maintenant, quiconque appartient au groupe\r
+ <code>Nom-de-groupe</code>, et possède une entrée dans le fichier\r
+ <code>password</code> pourra accéder au répertoire s'il tape le bon\r
+ mot de passe.</p>\r
+\r
+ <p>Il existe une autre méthode moins contraignante pour autoriser\r
+ l'accès à plusieurs personnes. Plutôt que de créer un fichier de\r
+ groupes, il vous suffit d'ajouter la directive suivante :</p>\r
+\r
+ <div class="example"><p><code>\r
+ Require valid-user\r
+ </code></p></div>\r
+\r
+ <p>Le remplacement de la ligne <code>Require user rbowen</code> par\r
+ la ligne <code>Require valid-user</code> autorisera l'accès à\r
+ quiconque possédant une entrée dans le fichier password, et ayant\r
+ tapé le bon mot de passe. Vous pouvez même simuler le comportement\r
+ des groupes en associant un fichier de mots de passe différent pour\r
+ chaque groupe. L'avantage de cette approche réside dans le fait\r
+ qu'Apache ne doit consulter qu'un fichier au lieu de deux. Par\r
+ contre, vous devez maintenir un nombre plus ou moins important de\r
+ fichiers de mots de passe, et vous assurer de faire référence au bon\r
+ fichier dans la directive <code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code>.</p>\r
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="possibleproblems" id="possibleproblems">Problèmes possibles</a></h2>\r
+ <p>L'authentification Basic est spécifiée d'une telle manière que\r
+ vos nom d'utilisateur et mot de passe doivent être vérifiés chaque\r
+ fois que vous demandez un document au serveur, et ceci même si vous\r
+ rechargez la même page, et pour chaque image contenue dans la page\r
+ (si elles sont situées dans un répertoire protégé). Comme vous\r
+ pouvez l'imaginer, ceci ralentit un peu le fonctionnement. La mesure\r
+ dans laquelle le fonctionnement est ralenti est proportionnelle à la\r
+ taille du fichier des mots de passe, car ce dernier doit être ouvert\r
+ et la liste des utilisateurs parcourue jusqu'à ce que votre nom soit\r
+ trouvé, et ceci chaque fois qu'une page est chargée.</p>\r
+\r
+ <p>En conséquence, ce ralentissement impose une limite pratique au\r
+ nombre d'utilisateurs que vous pouvez enregistrer dans un fichier de\r
+ mots de passe. Cette limite va varier en fonction des performances\r
+ de votre serveur, mais vous commencerez à remarquer un\r
+ ralentissement lorsque vous atteindrez quelques centaines\r
+ d'utilisateurs, et serez alors appelés à utiliser une méthode\r
+ d'authentification différente.</p>\r
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="dbmdbd" id="dbmdbd">Autre méthode de stockage des mots de\r
+passe</a></h2>\r
+\r
+ <p>Suite au problème évoqué précédemment et induit par le stockage\r
+ des mots de passe dans un fichier texte, vous pouvez être appelé à\r
+ stocker vos mots de passe d'une autre manière, par exemple dans une\r
+ base de données.</p>\r
+\r
+ <p>Pour y parvenir, on peut utiliser les modules\r
+ <code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code> ou <code class="module"><a href="../mod/mod_authn_dbd.html">mod_authn_dbd</a></code>.\r
+ Vous pouvez choisir comme format de stockage <code>dbm</code> ou\r
+ <code>dbd</code> à la place de <code>file</code> pour la directive\r
+ <code class="directive"><a href="../mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code>.</p>\r
+\r
+ <p>Par exemple, pour sélectionner un fichier dbm à la place d'un\r
+ fichier texte :</p>\r
+\r
+ <div class="example"><p><code>\r
+ <Directory /www/docs/private><br />\r
+ AuthName "Private"<br />\r
+ AuthType Basic<br />\r
+ AuthBasicProvider dbm<br />\r
+ AuthDBMUserFile /www/passwords/passwd.dbm<br />\r
+ Require valid-user<br />\r
+ </Directory>\r
+ </code></p></div>\r
+\r
+ <p>D'autres options sont disponibles. Consultez la documentation de\r
+ <code class="module"><a href="../mod/mod_authn_dbm.html">mod_authn_dbm</a></code> pour plus de détails.</p>\r
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="multprovider" id="multprovider">Utilisation de plusieurs fournisseurs\r
+d'authentification</a></h2>\r
+\r
+ <p>Depuis l'arrivée des nouvelles architecture d'autorisation et\r
+ d'authentification basées sur les fournisseurs, vous n'êtes plus\r
+ limité à une méthode d'authentification et d'autorisation\r
+ unique. En fait, on peut panacher autant de fournisseurs que l'on\r
+ veut, ce qui vous permet d'élaborer l'architecture qui correspond\r
+ exactement à vos besoins. Dans l'exemple suivant, on utilise\r
+ conjointement les fournisseurs d'authentification\r
+ file et LDAP :</p>\r
+\r
+ <div class="example"><p><code>\r
+ <Directory /www/docs/private><br />\r
+ AuthName "Private"<br />\r
+ AuthType Basic<br />\r
+ AuthBasicProvider file ldap<br />\r
+ AuthUserFile /usr/local/apache/passwd/passwords<br />\r
+ AuthLDAPURL ldap://ldaphost/o=yourorg<br />\r
+ Require valid-user<br />\r
+ </Directory>\r
+ </code></p></div>\r
+\r
+ <p>Dans cet exemple, le fournisseur file va tenter d'authentifier\r
+ l'utilisateur en premier. S'il n'y parvient pas, le fournisseur LDAP\r
+ sera sollicité. Ceci permet l'élargissement des possibilités\r
+ d'authentification si votre organisation implémente plusieurs types\r
+ de bases d'authentification. D'autres scénarios d'authentification\r
+ et d'autorisation peuvent associer un type d'authentification avec\r
+ un autre type d'autorisation. Par exemple, une authentification\r
+ basée sur un fichier de mots de passe peut permettre l'attribution\r
+ d'autorisations basée sur un annuaire LDAP.</p>\r
+\r
+ <p>Tout comme plusieurs fournisseurs d'authentification peuvent être\r
+ implémentés, on peut aussi utiliser plusieurs méthodes\r
+ d'autorisation. Dans l'exemple suivant, on utilise à la fois une\r
+ autorisation à base de fichier de groupes et une autorisation à base\r
+ de groupes LDAP.</p>\r
+\r
+ <div class="example"><p><code>\r
+ <Directory /www/docs/private><br />\r
+ AuthName "Private"<br />\r
+ AuthType Basic<br />\r
+ AuthBasicProvider file<br />\r
+ AuthUserFile /usr/local/apache/passwd/passwords<br />\r
+ AuthLDAPURL ldap://ldaphost/o=yourorg\r
+ AuthGroupFile /usr/local/apache/passwd/groups<br />\r
+ Require group GroupName<br />\r
+ Require ldap-group cn=mygroup,o=yourorg<br />\r
+ </Directory>\r
+ </code></p></div>\r
+\r
+ <p>Pour un scénario d'autorisation un peu plus avancé, des\r
+ directives de conteneur d'autorisation comme <code class="directive"><a href="../mod/mod_authz_core.html#requireall"><RequireAll></a></code> et\r
+ <code class="directive"><a href="../mod/mod_authz_core.html#requireany"><RequireAny></a></code> permettent d'appliquer une\r
+ logique telle que l'ordre dans lequel les autorisations sont\r
+ appliquées peut être entièrement contrôlé au niveau de la\r
+ configuration. Voir <a href="../mod/mod_authz_core.html#logic">Conteneurs\r
+ d'autorisations</a> pour un exemple de ce contrôle.</p>\r
+\r
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="beyond" id="beyond">Pour aller plus loin qu'une simple\r
+autorisation</a></h2>\r
+\r
+ <p>La manière dont les autorisations sont accordées est désormais\r
+ beaucoup plus souple qu'une simple vérification auprès d'une seule\r
+ base de données. Il est maintenant possible de choisir l'ordre, la\r
+ logique et la manière selon lesquels une autorisation est\r
+ accordée.</p>\r
+\r
+ <h3><a name="authandororder" id="authandororder">Appliquer logique et\r
+ ordonnancement</a></h3>\r
+ <p>Le contrôle de la manière et de l'ordre selon lesquels le\r
+ processus d'autorisation était appliqué\r
+ constituait une sorte de mystère par\r
+ le passé. Dans Apache 2.2, un mécanisme d'authentification basé\r
+ sur les fournisseurs a été développé afin de séparer le\r
+ véritable processus d'authentification de l'autorisation et ses\r
+ différentes fonctionnalités. Un des avantages colatéraux\r
+ résidait dans le fait que les fournisseurs d'authentification\r
+ pouvaient être configurés et appelés selon un ordre particulier\r
+ indépendant de l'ordre de chargement du module auth proprement\r
+ dit. Ce mécanisme basé sur les fournisseurs a été étendu au\r
+ processus d'autorisation. Ceci signifie que la directive\r
+ <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> définit\r
+ non seulement quelles méthodes d'autorisation doivent être\r
+ utilisées, mais aussi l'ordre dans lequel elles sont appelées.\r
+ Les méthodes d'autorisation sont appelées selon l'ordre dans\r
+ lequel les directives <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> apparaissent dans la\r
+ configuration.</p>\r
+\r
+ <p>Avec l'introduction des directives de conteneur\r
+ d'autorisations <code class="directive"><a href="../mod/mod_authz_core.html#requireall"><RequireAll></a></code>\r
+ et <code class="directive"><a href="../mod/mod_authz_core.html#requireany"><RequireAny></a></code>, la\r
+ configuration contrôle aussi le moment où les méthodes\r
+ d'autorisation sont appelées, et quels critères déterminent\r
+ l'autorisation d'accès. Voir <a href="../mod/mod_authz_core.html#logic">Conteneurs\r
+ d'autorisations</a> pour un exemple de la manière de les\r
+ utiliser pour exprimer des logiques d'autorisation\r
+ complexes.</p>\r
+\r
+ <p>Par défaut, toutes les directives <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> sont\r
+ traitées comme si elles étaient contenues dans une directive\r
+ <code class="directive"><a href="../mod/mod_authz_core.html#requireany"><RequireAny></a></code>. En d'autres termes, il\r
+ suffit\r
+ qu'une méthode d'autorisation s'applique avec succès pour que\r
+ l'autorisation soit accordée.</p>\r
+\r
+ \r
+\r
+ <h3><a name="reqaccessctrl" id="reqaccessctrl">Utilisation de fournisseurs\r
+ d'autorisation pour le contrôle d'accès</a></h3>\r
+ <p>La vérification du nom d'utilisateur et du mot de passe ne\r
+ constituent qu'un aspect des méthodes d'authentification.\r
+ Souvent, le contrôle d'accès à certaines personnes n'est pas\r
+ basé sur leur identité ; il peut dépendre, par exemple de leur\r
+ provenance.</p>\r
+\r
+ <p>Les fournisseurs d'autorisation <code class="directive"><a href="../mod/mod_authz_host.html# all">\r
+ all</a></code>, <code class="directive"><a href="../mod/mod_authz_host.html# env">\r
+ env</a></code>, <code class="directive"><a href="../mod/mod_authz_host.html# host">\r
+ host</a></code> et <code class="directive"><a href="../mod/mod_authz_host.html# ip">\r
+ ip</a></code> vous permettent d'accorder ou refuser l'accès en\r
+ fonction de critères tels que le nom d'hôte ou l'adresse\r
+ IP de la machine qui effectue la requête.</p>\r
+\r
+ <p>L'utilisation de ces fournisseurs est spécifiée à l'aide de\r
+ la directive <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code>. Cette directive\r
+ permet d'enregistrer quels fournisseurs d'autorisation\r
+ seront appelés dans le processus d'autorisation au cours du\r
+ traitement de la requête. Par exemple :</p>\r
+\r
+ <div class="example"><p><code>\r
+ Require ip <var>adresse</var>\r
+ </code></p></div>\r
+\r
+ <p>où <var>adresse</var> est une adresse IP (ou une adresse IP\r
+ partielle) ou :</p>\r
+\r
+ <div class="example"><p><code>\r
+ Require host <var>nom_domaine</var>\r
+ </code></p></div>\r
+\r
+ <p>où <var>nom_domaine</var> est un nom de domaine entièrement\r
+ qualifé (ou un nom de domaine partiel) ; vous pouvez indiquer\r
+ plusieurs adresses ou noms de domaines, si vous le désirez.</p>\r
+\r
+ <p>Par exemple, si vous voulez rejeter les spams dont une\r
+ machine vous inonde, vous pouvez utiliser ceci :</p>\r
+\r
+ <div class="example"><p><code>\r
+ <RequireAll>\r
+ <span class="indent">\r
+ Require all granted<br />\r
+ Require not ip 10.252.46.165\r
+ </span>\r
+ </RequireAll>\r
+ </code></p></div>\r
+\r
+ <p>Ainsi, les visiteurs en provenance de cette adresse ne\r
+ pourront pas voir le contenu concerné par cette directive. Si,\r
+ par contre, vous connaissez le nom de la machine, vous pouvez\r
+ utiliser ceci :</p>\r
+\r
+ <div class="example"><p><code>\r
+ <RequireAll>\r
+ <span class="indent">\r
+ Require all granted<br />\r
+ Require not host <var>serveur.exemple.com</var>\r
+ </span>\r
+ </RequireAll>\r
+ </code></p></div>\r
+\r
+ <p>Et si vous voulez interdire l'accès à toutes les machines\r
+ d'un domaine, vous pouvez spécifier une partie seulement de\r
+ l'adresse ou du nom de domaine :</p>\r
+\r
+ <div class="example"><p><code>\r
+ <RequireAll>\r
+ <span class="indent">\r
+ Require all granted<br />\r
+ <RequireNone>\r
+ <span class="indent">\r
+ Require ip 192.168.205<br />\r
+ Require host phishers.exemple.com autres-idiots.exemple<br />\r
+ Require host ke\r
+ </span>\r
+ </RequireNone>\r
+ </span>\r
+ </RequireAll>\r
+ </code></p></div>\r
+\r
+ <p>Dans l'exemple ci-dessus, on utilise la directive du\r
+ conteneur <code class="directive"><a href="../mod/mod_authz_core.html#requirenone"><RequireNone></a></code> afin de s'assurer\r
+ qu'aucune des directives <code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code> qu'il contient ne\r
+ fasse correspondre ses paramètres avant d'accorder\r
+ l'autorisation.</p>\r
+\r
+ \r
+\r
+ <h3><a name="filesystem" id="filesystem">Compatibilité ascendante du contrôle\r
+ d'accès</a></h3>\r
+ <p>L'adoption d'un mécanisme à base de fournisseurs pour\r
+ l'authentification, a pour effet colatéral de rendre inutiles\r
+ les directives <code class="directive"><a href="../mod/mod_access_compat.html#order">Order</a></code>, <code class="directive"><a href="../mod/mod_access_compat.html#allow">Allow</a></code>, <code class="directive"><a href="../mod/mod_access_compat.html#deny">Deny</a></code> et <code class="directive"><a href="../mod/mod_access_compat.html#satisfy">Satisfy</a></code>. Cependant, et à\r
+ des fins de compatibilité ascendante vers les anciennes\r
+ configurations, ces directives ont été déplacées vers le module\r
+ <code class="module"><a href="../mod/mod_access_compat.html">mod_access_compat</a></code>.</p>\r
+\r
+ \r
+\r
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="moreinformation" id="moreinformation">Pour aller plus loin . . .</a></h2>\r
+ <p>Vous pouvez aussi lire la documentation de\r
+ <code class="module"><a href="../mod/mod_auth_basic.html">mod_auth_basic</a></code> et <code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code>\r
+ qui contient des informations supplémentaires à propos du\r
+ fonctionnement de tout ceci.\r
+ Certaines configurations d'authentification peuvent aussi être\r
+ simplifiées à l'aide de la directive <code class="directive"><a href="../mod/mod_authn_core.html#<authnprovideralias>"><AuthnProviderAlias></a></code>.</p>\r
+\r
+ <p>Les différents algorithmes de chiffrement supportés par Apache\r
+ pour authentifier les données sont expliqués dans <a href="../misc/password_encryptions.html">PasswordEncryptions</a>.</p>\r
+\r
+ <p>Enfin vous pouvez consulter la recette <a href="access.html">Contrôle\r
+ d'accès</a>, qui décrit un certain nombre de situations en relation\r
+ avec le sujet.</p>\r
+\r
+</div></div>\r
+<div class="bottomlang">\r
+<p><span>Langues Disponibles: </span><a href="../en/howto/auth.html" hreflang="en" rel="alternate" title="English"> en </a> |\r
+<a href="../fr/howto/auth.html" title="Français"> fr </a> |\r
+<a href="../ja/howto/auth.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> |\r
+<a href="../ko/howto/auth.html" hreflang="ko" rel="alternate" title="Korean"> ko </a></p>\r
+</div><div id="footer">\r
+<p class="apache">Copyright 2009 The Apache Software Foundation.<br />Authorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>\r
+<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p></div>\r
</body></html>
\ No newline at end of file
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Tutoriel Apache : Contenu dynamique basé sur CGI - Serveur Apache HTTP</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p>
-<p class="apache">Serveur Apache HTTP Version 2.3</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Serveur HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.3</a> > <a href="./">Recettes et tutoriels</a></div><div id="page-content"><div id="preamble"><h1>Tutoriel Apache : Contenu dynamique basé sur CGI</h1>
-<div class="toplang">
-<p><span>Langues Disponibles: </span><a href="../en/howto/cgi.html" hreflang="en" rel="alternate" title="English"> en </a> |
-<a href="../fr/howto/cgi.html" title="Français"> fr </a> |
-<a href="../ja/howto/cgi.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> |
-<a href="../ko/howto/cgi.html" hreflang="ko" rel="alternate" title="Korean"> ko </a></p>
-</div>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#intro">Introduction</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#configuring">Configurer Apache pour autoriser CGI</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#writing">Ecrire un programme CGI</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#troubleshoot">Mais ça ne marche toujours pas !</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#behindscenes">Que se passe-t-il en coulisse</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#libraries">Bibliothèques et modules CGI</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#moreinfo">Pour plus d'informations</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="intro" id="intro">Introduction</a></h2>
-
-
- <table class="related"><tr><th>Modules Apparentés</th><th>Directives Apparentées</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code></li><li><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code></li><li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li><li><code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code></li></ul></td></tr></table>
-
- <p>CGI (Common Gateway Interface) définit une méthode d'interaction
- entre un serveur web et des programmes générateurs de contenu
- externes, plus souvent appelés programmes CGI ou scripts CGI. Il
- s'agit de la méthode la plus simple, et la plus
- courante, pour ajouter du contenu dynamique à votre site web. Ce
- document est une introduction à la configuration de CGI sur votre
- serveur web Apache, et une initiation à l'écriture de programmes
- CGI.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="configuring" id="configuring">Configurer Apache pour autoriser CGI</a></h2>
-
-
- <p>Apache doit être configuré pour permettre l'exécution des
- programmes CGI, pour que vos programmes CGI puissent fonctionner
- correctement. Il existe plusieurs méthodes pour y parvenir.</p>
-
- <div class="warning">Note: si Apache a été compilé avec le support
- des modules partagés (DSO), vous devez vous assurer que le module CGI est
- chargé ; vous devez pour cela vérifier que la directive <code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code> correspondante n'a pas été
- commentée dans votre <code>httpd.conf</code>. Une directive correcte
- doit ressembler à ceci :
-
- <div class="example"><p><code>
- LoadModule cgi_module modules/mod_cgi.so
- </code></p></div></div>
-
- <h3><a name="scriptalias" id="scriptalias">ScriptAlias</a></h3>
-
-
- <p>La directive <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> indique à Apache qu'un
- répertoire particulier est dédié aux programmes CGI. Apache
- considérera que tout fichier situé dans ce répertoire est un
- programme CGI, et tentera de l'exécuter lorsque cette ressource
- fera l'objet d'une requête client.</p>
-
- <p>La directive <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> se présente comme suit
- :</p>
-
- <div class="example"><p><code>
- ScriptAlias /cgi-bin/ /usr/local/apache2/cgi-bin/
- </code></p></div>
-
- <p>Cet exemple est tiré de votre fichier de configuration
- <code>httpd.conf</code> par défaut, si vous avez installé Apache
- dans son répertoire par défaut. La directive <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> est similaire à la
- directive <code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code>, qui
- définit à quel répertoire particulier doit correspondre un préfixe
- d'URL. <code class="directive">Alias</code> et
- <code class="directive">ScriptAlias</code> sont généralement utilisés pour
- accéder à des répertoires situés en dehors du répertoire défini
- par la directive <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>. La différence entre
- <code class="directive">Alias</code> et <code class="directive">ScriptAlias</code>
- réside dans le fait que <code class="directive">ScriptAlias</code> indique
- en plus que tout ce qui se trouve sous le préfixe d'URL doit être
- considéré comme un programme CGI. Ainsi, l'exemple ci-dessus
- indique à Apache que toute requête pour une ressource commençant
- par <code>/cgi-bin/</code> doit être servie depuis le répertoire
- <code>/usr/local/apache2/cgi-bin/</code>, et doit être traitée en
- tant que programme CGI.</p>
-
- <p>Par exemple, si une requête pour l'URL
- <code>http://www.example.com/cgi-bin/test.pl</code> est
- effectuée, Apache tentera d'exécuter le fichier
- <code>/usr/local/apache2/cgi-bin/test.pl</code> et en renverra la
- sortie. Bien entendu, le fichier doit exister, être exécutable, et
- retourner sa sortie d'une manière particulière, sinon Apache
- renverra un message d'erreur.</p>
-
-
- <h3><a name="nonscriptalias" id="nonscriptalias">CGI en dehors des répertoires ScripAlias</a></h3>
-
-
- <p>Pour des raisons de sécurité, la localisation des programmes
- CGI est souvent restreinte aux
- répertoires définis par <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code>. De cette manière, les administrateurs
- peuvent contrôler précisément qui est autorisé à utiliser les
- programmes CGI. Cependant, si les précautions adéquates quant à
- la sécurité sont prises, il n'y a aucune raison pour que les
- programmes CGI ne puissent pas être exécutés depuis d'autres
- répertoires. Par exemple, vous pouvez autoriser les utilisateurs à
- enregistrer des contenus web dans leurs répertoires home à l'aide
- de la directive <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code>. S'ils veulent mettre en
- oeuvre leurs propres programmes CGI, mais n'ont pas l'autorisation
- d'accès au répertoire <code>cgi-bin</code> principal, ils devront
- être en mesure d'exécuter ces programmes depuis un autre
- répertoire.</p>
-
- <p>L'autorisation d'exécution des programmes CGI dans un
- répertoire arbitraire se fait en deux étapes. En premier lieu, le
- gestionnaire <code>cgi-script</code> doit être activé à l'aide
- d'une directive <code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code> ou <code class="directive"><a href="../mod/core.html#sethandler">SetHandler</a></code>. En second lieu,
- <code>ExecCGI</code> doit être spécifié dans la directive <code class="directive"><a href="../mod/core.html#options">Options</a></code>.</p>
-
-
- <h3><a name="options" id="options">Utilisation d'options explicites pour permettre l'exécution
- des programmes CGI</a></h3>
-
-
- <p>Vous pouvez utiliser de manière explicite la directive
- <code class="directive"><a href="../mod/core.html#options">Options</a></code> dans le fichier de
- configuration de votre serveur principal, pour indiquer que
- l'exécution des programmes CGI est permise depuis un répertoire
- particulier :</p>
-
- <div class="example"><p><code>
- <Directory /usr/local/apache2/htdocs/un-repertoire><br />
- <span class="indent">
- Options +ExecCGI<br />
- </span>
- </Directory>
- </code></p></div>
-
- <p>La directive ci-dessus indique à Apache qu'il doit permettre
- l'exécution des fichiers CGI. Vous devez aussi indiquer au serveur
- quels fichiers sont des fichiers CGI. La directive <code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code> suivante indique au
- serveur qu'il doit traiter tous les fichiers possédant une
- extension <code>cgi</code> ou <code>pl</code> en tant que
- programmes CGI :</p>
-
- <div class="example"><p><code>
- AddHandler cgi-script .cgi .pl
- </code></p></div>
-
-
- <h3><a name="htaccess" id="htaccess">Fichiers .htaccess</a></h3>
-
-
- <p>Le <a href="htaccess.html"><code>tutoriel
- .htaccess</code></a> montre comment activer les programmes
- CGI si vous n'avez pas accès au
- fichier <code>httpd.conf</code>.</p>
-
-
- <h3><a name="userdir" id="userdir">Répertoires utilisateurs</a></h3>
-
-
- <p>Pour permettre l'exécution en tant que programme CGI de tout
- fichier possédant l'extension <code>.cgi</code> et situé dans un
- répertoire utilisateur, vous pouvez utiliser la configuration
- suivante :</p>
-
- <div class="example"><p><code>
- <Directory /home/*/public_html><br />
- <span class="indent">
- Options +ExecCGI<br />
- AddHandler cgi-script .cgi<br />
- </span>
- </Directory>
- </code></p></div>
-
- <p>Pour indiquer un sous-répertoire <code>cgi-bin</code> d'un
- répertoire utilisateur où tout fichier sera traité en tant que
- programme CGI, vous pouvez utiliser ceci :</p>
-
- <div class="example"><p><code>
- <Directory /home/*/public_html/cgi-bin><br />
- <span class="indent">
- Options ExecCGI<br />
- SetHandler cgi-script<br />
- </span>
- </Directory>
- </code></p></div>
-
-
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="writing" id="writing">Ecrire un programme CGI</a></h2>
-
-
- <p>Il y a deux différences principales entre la programmation
- "standard" et la programmation CGI.</p>
-
- <p>En premier lieu, toute sortie de votre programme CGI doit être
- précédée d'un en-tête <a class="glossarylink" href="../glossary.html#mime-type" title="see glossary">MIME-type</a>. Il s'agit d'un
- en-tête HTTP qui indique au client quel type de contenu il reçoit.
- La plupart du temps, il se présente comme suit :</p>
-
- <div class="example"><p><code>
- Content-type: text/html
- </code></p></div>
-
- <p>En second lieu, votre sortie doit être en HTML, ou tout autre
- format qu'un navigateur est en mesure d'afficher. La plupart du
- temps, il s'agira de HTML, mais occasionnellement, vous pouvez être
- amené à écrire un programme CGI qui renvoie une image gif, ou un
- autre type de contenu non-HTML.</p>
-
- <p>A part ces deux différences, un programme CGI ressemblera à tout
- autre programme que vous pourriez être amené à écrire.</p>
-
- <h3><a name="firstcgi" id="firstcgi">Votre premier programme CGI</a></h3>
-
-
- <p>L'exemple suivant est un exemple de programme CGI qui permet
- d'afficher une ligne de caractères dans votre navigateur. Ecrivez
- ce qui suit, enregistrez le dans un fichier nommé
- <code>premier.pl</code>, et placez le dans votre répertoire
- <code>cgi-bin</code>.</p>
-
- <div class="example"><p><code>
- #!/usr/bin/perl<br />
- print "Content-type: text/html\n\n";<br />
- print "Bonjour tout le monde . . .";
- </code></p></div>
-
- <p>Même si Perl ne vous est pas familier, vous devriez être
- capable de comprendre le fonctionnement de ce programme. La
- première ligne indique à Apache (ou à toute interface à partir de
- laquelle le programme s'exécute) que ce programme peut être
- exécuté en fournissant son fichier à l'interpréteur
- <code>/usr/bin/perl</code>. La seconde ligne affiche la
- déclaration du type de contenu considéré, suivie de deux paires
- "Retour chariot - Nouvelle ligne". Ceci a pour effet d'insérer une
- ligne vide après l'en-tête pour marquer la fin des en-têtes HTTP,
- et le début du corps du document. La troisième ligne affiche la
- chaîne de caractères "Bonjour tout le monde . . .". Et c'est tout
- ce dont vous avez besoin.</p>
-
- <p>Si vous ouvrez votre navigateur favori et lui indiquez
- l'adresse</p>
-
- <div class="example"><p><code>
- http://www.exemple.com/cgi-bin/premier.pl
- </code></p></div>
-
- <p>ou toute autre URL correspondant à votre programme CGI, Vous
- verrez la ligne <code>Bonjour tout le monde . . .</code>
- s'afficher dans la fenêtre de votre navigateur. Ce n'est pas
- extraordinaire, mais si vous y êtes parvenu, vous avez de bonnes
- chances d'y parvenir pour tout autre programme plus
- sophistiqué.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="troubleshoot" id="troubleshoot">Mais ça ne marche toujours pas !</a></h2>
-
-
- <p>Vous devriez voir au moins une des quatre sorties suivantes dans
- votre navigateur lorsque vous essayez d'accéder à votre programme
- CGI depuis le web :</p>
-
- <dl>
- <dt>Le flux de sortie de votre programme CGI</dt>
- <dd>Impeccable ! Cela signifie que tout fonctionne correctement.
- Si la sortie est correcte mais n'est pas traitée correctement par
- le navigateur, assurez-vous d'avoir défini
- <code>Content-Type</code> de manière appropriée dans votre
- programme CGI.</dd>
-
- <dt>Le code source de votre programme CGI ou un message "POST
- Method Not Allowed"</dt>
- <dd>Cela signifie que vous n'avez pas configuré Apache de manière
- à ce qu'il puisse traiter votre programme CGI. Relisez la section
- sur la <a href="#configuring">configuration d'Apache</a>, et
- essayez de trouver votre erreur.</dd>
-
- <dt>Un message commençant par "Forbidden"</dt>
- <dd>Ce type de message est révélateur d'un problème de
- droits. Consultez le <a href="#errorlogs">journal des erreurs
- d'Apache</a> et la section ci-dessous sur les <a href="#permissions">droits des fichiers</a>.</dd>
-
- <dt>Un message contenant "Internal Server Error"</dt>
- <dd>Si vous consultez le <a href="#errorlogs">journal des erreurs
- d'Apache</a>, vous y trouverez probablement des messages du type
- "Premature end of script headers" (Fin prématurée des en-têtes de
- script), éventuellement accompagnés d'un message d'erreur généré
- par votre programme CGI. Dans ce cas, il va vous falloir lire
- chacune des sections ci-dessous pour déterminer ce qui empêche
- votre programme CGI de générer les en-têtes appropriés.</dd>
- </dl>
-
- <h3><a name="permissions" id="permissions">Droits des fichiers</a></h3>
-
-
- <p>Souvenez-vous que le serveur ne s'exécute pas sous votre nom.
- En d'autres termes, lorsque le serveur a démarré, il s'exécute
- avec les droits d'un utilisateur non privilégié - en général
- <code>nobody</code>, ou <code>www</code> - et en conséquence, il
- aura besoin de droits supplémentaires pour pouvoir exécuter des
- fichiers dont vous êtes le propriétaire. En général, pour qu'un
- fichier ait des droits suffisants pour être exécutable par
- <code>nobody</code>, il suffit de lui attribuer des droits
- d'exécution pour tout le monde :</p>
-
- <div class="example"><p><code>
- chmod a+x premier.pl
- </code></p></div>
-
- <p>En outre, si votre programme doit pouvoir accéder en lecture
- et/ou écriture à d'autres fichiers, ces derniers devront avoir les
- droits appropriés.</p>
-
-
-
- <h3><a name="pathinformation" id="pathinformation">Chemin des exécutables (PATH) et variables
- d'environnement</a></h3>
-
-
- <p>Lorsque vous lancez un programme depuis la ligne de commande,
- certaines informations sont passées au shell sans que vous vous en
- doutiez. Par exemple, la variable <code>PATH</code> indique au
- shell où il doit rechercher les exécutables auxquels vous faites
- référence.</p>
-
- <p>Lorsqu'un programme s'exécute depuis le serveur web en tant que
- programme CGI, sa variable <code>PATH</code> n'aura peut-être pas
- la même valeur. Tout programme que vous invoquez dans votre
- programme CGI ( comme par exemple <code>sendmail</code>) devra
- être spécifié par son chemin complet, de façon à ce que le shell
- puisse le trouver lorsqu'il tentera d'exécuter votre programme
- CGI.</p>
-
- <p>Un exemple typique de spécification de programme est le chemin
- vers l'interpréteur de script (souvent <code>perl</code>) que l'on
- trouve à la première ligne de votre programme CGI et qui va
- ressembler à ceci :</p>
-
- <div class="example"><p><code>
- #!/usr/bin/perl
- </code></p></div>
-
- <p>Assurez-vous qu'il s'agit bien du chemin correct vers
- l'interpréteur.</p>
-
- <p>De plus, si votre programme CGI dépend d'autres <a href="#env">variables d'environnement</a>, vous devrez vous
- assurer qu'elles lui sont bien transmises par Apache.</p>
-
-
-
- <h3><a name="syntaxerrors" id="syntaxerrors">Erreurs inhérentes au programme</a></h3>
-
-
- <p>La plupart des échecs dans l'exécution d'un programme CGI
- proviennent du programme lui-même. Ceci est particulièrement vrai
- lorsque ce satané programme CGI se bloque, alors que vous avez
- appris à ne plus commettre les deux erreurs précédentes. La
- première chose à faire est de vous assurer que votre programme
- s'exécute depuis la ligne de commande, avant de le tester à partir
- du serveur web. Par exemple, essayez :</p>
-
- <div class="example"><p><code>
- cd /usr/local/apache2/cgi-bin<br />
- ./premier.pl
- </code></p></div>
-
- <p>(N'invoquez pas l'interpréteur <code>perl</code>. Le shell et
- Apache doivent être capable de le déterminer à partir de <a href="#pathinformation">l'information sur le chemin</a> située sur
- la première ligne du script.)</p>
-
- <p>La première chose que vous devriez voir affichée par votre
- programme est un ensemble d'en-têtes HTTP, comprenant entre autres
- le <code>Content-Type</code>, et suivi d'une ligne vide. Si vous
- voyez quoi que ce soit d'autre, Apache renverra l'erreur
- <code>Premature end of script headers</code> si vous tentez
- d'exécuter le programme depuis le serveur. Voir <a href="#writing">Ecriture d'un programme CGI</a> ci-dessus pour
- plus de détails.</p>
-
-
- <h3><a name="errorlogs" id="errorlogs">Journalisation des erreurs</a></h3>
-
-
- <p>Les journaux d'erreurs sont vos amis. Toute anomalie de
- fonctionnement est consignée dans le journal des erreurs et c'est
- ici que vous devez regarder en premier en cas de problème. Si
- l'hébergeur de votre site ne vous donne pas accès au journal des
- erreurs, vous avez tout intérêt à vous tourner vers quelqu'un
- d'autre. Apprenez à déchiffrer les journaux d'erreurs, et vous
- vous apercevrez que la plupart des problèmes seront rapidement
- identifiés . . . et résolus.</p>
-
-
- <h3><a name="suexec" id="suexec">Suexec</a></h3>
-
-
- <p>Le programme <a href="../suexec.html">suexec</a> permet
- d'exécuter les programmes CGI avec des droits différents selon le
- serveur virtuel ou le répertoire utilisateur dans lequel ils
- se situent. Suexec effectue une vérification des droits très
- stricte, et toute anomalie détectée au cours de cette vérification
- entraînera un echec d'exécution de votre programme CGI avec
- affichage de l'erreur <code>Premature end of script
- headers</code>.</p>
-
- <p>Pour savoir si vous pouvez utiliser suexec, tapez la commande
- <code>apachectl -V</code>, et regardez le chemin indiqué par
- <code>SUEXEC_BIN</code>. Si au démarrage d'Apache, ce dernier
- trouve un exécutable <code class="program"><a href="../programs/suexec.html">suexec</a></code> dans ce chemin,
- suexec sera activé.</p>
-
- <p>Si vous ne maîtrisez pas le fonctionnement de suexec, il vous
- est déconseillé de l'utiliser. Pour désactiver suexec, supprimer
- simplement (ou renommez) l'exécutable <code class="program"><a href="../programs/suexec.html">suexec</a></code>
- pointé par <code>SUEXEC_BIN</code> et redémarrez le serveur. Si
- après une lecture de <a href="../suexec.html">suexec</a>, vous
- décidez quand-même de l'utiliser, tapez la commande <code>suexec
- -V</code> pour voir où se situe le journal de suexec, et utilisez
- ce dernier pour déterminer quelles règles vous violez
- éventuellement.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="behindscenes" id="behindscenes">Que se passe-t-il en coulisse</a></h2>
-
-
- <p>Lorsque vos compétences en programmation CGI seront plus
- poussées, il s'avérera intéressant pour vous de mieux comprendre ce
- qui se passe en coulisse, et en particulier la manière dont le
- navigateur et le serveur dialoguent entre eux. En effet, bien qu'il
- soit tout à fait louable d'écrire un programme qui affiche "Bonjour
- tout le monde . . .", cela ne sert pas à grand chose.</p>
-
- <h3><a name="env" id="env">Variables d'environnement</a></h3>
-
-
- <p>Les variables d'environnement sont des valeurs qui gravitent
- autour de vous lorsque vous utilisez votre ordinateur. Elles sont
- très utiles, à l'instar de votre chemin par défaut (où votre
- ordinateur va rechercher le fichier physique correspondant à la
- commande que vous avez tapée), votre nom d'utilisateur, le type de
- votre terminal, etc... Pour obtenir une liste complète des
- variables d'environnement standards que vous utilisez tous les
- jours, tapez <code>env</code> dans votre interpréteur
- de commandes.</p>
-
- <p>Au cours de la transaction CGI, le serveur et le navigateur
- définissent aussi des variables d'environnement, de façon à ce
- qu'ils puissent communiquer entre eux. Ces variables définissent
- entre autre le type de navigateur (Netscape, IE, Lynx), le type de
- serveur (Apache, IIS, WebSite), le nom du programme CGI en cours
- d'exécution, etc...</p>
-
- <p>Ces variables sont à la disposition du programmeur CGI, et
- elles constituent 50% de la communication client-serveur. La liste
- complète des variables requises se trouve à
- <a href="http://hoohoo.ncsa.uiuc.edu/cgi/env.html">http://hoohoo.ncsa.uiuc.edu/cgi/env.html</a>.</p>
-
- <p>Ce programme CGI basique en Perl permet d'afficher toutes les
- variables d'environnement qui sont échangées. Deux programmes
- similaires sont fournis avec la distribution d'Apache et situés
- dans le répertoire <code>cgi-bin</code>.
- Notez que certaines variables sont
- obligatoires, alors que d'autres sont optionnelles, si bien que
- vous verrez s'afficher certaines variables qui ne font pas partie
- de la liste officielle. De plus, Apache vous propose de nombreuses
- méthodes pour <a href="../env.html">ajouter vos propres
- variables d'environnement</a> aux variables de base fournies par
- défaut.</p>
-
- <div class="example"><p><code>
- #!/usr/bin/perl<br />
- print "Content-type: text/html\n\n";<br />
- foreach $key (keys %ENV) {<br />
- <span class="indent">
- print "$key --> $ENV{$key}<br>";<br />
- </span>
- }
- </code></p></div>
-
-
- <h3><a name="stdin" id="stdin">STDIN et STDOUT</a></h3>
-
-
- <p>L'entrée standard (<code>STDIN</code>) et la sortie standard
- (<code>STDOUT</code>) constituent d'autres voies de communication
- entre le client et le serveur. Dans un contexte normal,
- <code>STDIN</code> correspond au clavier, ou à un fichier fourni
- au programme à des fins de traitement, et <code>STDOUT</code> à la
- console ou à l'écran.</p>
-
- <p>Lorsque vous transmettez un formulaire web à un programme CGI
- par la méthode <code>POST</code>, les données de ce formulaire
- sont transcrites dans un format spécial et transmises à votre
- programme CGI via <code>STDIN</code>. Le programme peut alors les
- traiter comme si elles provenaient du clavier ou d'un
- fichier.</p>
-
- <p>Ce "format spécial" est très simple. Un nom de champ et sa
- valeur sont reliés entre eux par un signe "égal" (=), et chacune
- de ces paires nom champ/valeur est séparée de la suivante par un
- "et" commercial (&). Les caractères
- spéciaux comme les espaces, les "et" commerciaux, et les signes
- "égal" sont convertis en leur équivalent hexadécimal pour éviter
- qu'ils ne gâchent le travail. La chaîne contenant les données doit
- ressembler à ceci :</p>
-
- <div class="example"><p><code>
- name=Rich%20Bowen&city=Lexington&state=KY&sidekick=Squirrel%20Monkey
- </code></p></div>
-
- <p>Vous verrez aussi parfois une chaîne de ce type accolée à une
- URL. Dans ce cas, le serveur enregistre cette chaîne dans la
- variable d'environnement appelée <code>QUERY_STRING</code>. On a
- alors affaire à une requête de type <code>GET</code>. Votre
- formulaire HTML indique laquelle des méthodes <code>GET</code> ou
- <code>POST</code> est utilisée pour transmettre les données, en
- définissant l'attribut <code>METHOD</code> au niveau de la balise
- <code>FORM</code>.</p>
-
- <p>Votre programme est ensuite chargé d'extraire les informations
- utiles de cette chaîne. Heureusement, des bibliothèques et des
- modules sont à votre disposition pour vous aider à traiter ces
- données, et à gérer les différents aspects de votre programme
- CGI.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="libraries" id="libraries">Bibliothèques et modules CGI</a></h2>
-
-
- <p>Pour écrire un programme CGI, il vous est conseillé d'utiliser
- une bibliothèque de code, ou un module, qui effectueront une grande
- partie du travail de base pour vous. Ceci vous permettra de diminuer
- le nombre d'erreurs et d'accélérer le développement.</p>
-
- <p>Si vous écrivez des programmes CGI en Perl, des modules sont à
- votre disposition à <a href="http://www.cpan.org/">CPAN</a>. A ce
- sujet, le module le plus populaire est <code>CGI.pm</code>. Vous
- pouvez aussi essayer <code>CGI::Lite</code>, qui implémente les
- fonctionnalités strictement nécessaires, mais suffisantes pour
- la majorité des programmes.</p>
-
- <p>Si vous écrivez des programmes CGI en C, vous disposez de
- nombreuses options. L'une d'elles est la bibliothèque
- <code>CGIC</code> de <a href="http://www.boutell.com/cgic/">http://www.boutell.com/cgic/</a>.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="moreinfo" id="moreinfo">Pour plus d'informations</a></h2>
-
-
- <p>Il existe un grand nombre de ressources CGI sur le web. Vous
- pouvez discuter de problèmes CGI avec d'autres utilisateurs dans le
- groupe Usenet <a href="news:comp.infosystems.www.authoring.cgi">
- comp.infosystems.www.authoring.cgi</a>. En outre, la liste de
- diffusion de la Guilde des Ecrivains HTML est une source
- intarissable de réponses à vos questions. Vous en saurez plus en
- vous rendant à <a href="http://www.hwg.org/lists/hwg-servers/">http://www.hwg.org/lists/hwg-servers/</a>.</p>
-
- <p>Et bien entendu, vous devez lire la spécification CGI, qui
- présente tous les détails en rapport avec les opérations des
- programmes CGI. La version originale se trouve au <a href="http://hoohoo.ncsa.uiuc.edu/cgi/interface.html">NCSA</a>, et
- dans la RFC IETF actuelle <a href="http://www.ietf.org/rfc/rfc3875">Common Gateway
- Interface RFC</a>.</p>
-
- <p>Lorsque vous postez une question à propos d'un problème CGI que
- vous rencontrez, que ce soit dans une liste de diffusion ou dans un
- newsgroup, faites en sorte de fournir suffisamment d'informations
- sur le problème rencontré, ce que vous attendiez exactement, et en
- quoi ce qui se produit est réellement différent de ce que vous
- attendiez, quel serveur vous utilisez, en quel langage votre
- programme CGI a été écrit, et, si possible, son code source. Ceci
- permettra une résolution plus aisée de votre problème.</p>
-
- <p>Notez que les questions à propos de problèmes CGI ne doivent
- <strong>jamais</strong> être postées dans la base de données de
- bogues d'Apache, à moins que vous ne soyez sûr d'avoir trouvé un
- problème dans le code source d'Apache.</p>
- </div></div>
-<div class="bottomlang">
-<p><span>Langues Disponibles: </span><a href="../en/howto/cgi.html" hreflang="en" rel="alternate" title="English"> en </a> |
-<a href="../fr/howto/cgi.html" title="Français"> fr </a> |
-<a href="../ja/howto/cgi.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> |
-<a href="../ko/howto/cgi.html" hreflang="ko" rel="alternate" title="Korean"> ko </a></p>
-</div><div id="footer">
-<p class="apache">Copyright 2009 The Apache Software Foundation.<br />Authorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p></div>
+<?xml version="1.0" encoding="ISO-8859-1"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head><!--\r
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r
+ This file is generated from xml source: DO NOT EDIT\r
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r
+ -->\r
+<title>Tutoriel Apache : Contenu dynamique basé sur CGI - Serveur Apache HTTP</title>\r
+<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />\r
+<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />\r
+<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />\r
+<link href="../images/favicon.ico" rel="shortcut icon" /></head>\r
+<body id="manual-page"><div id="page-header">\r
+<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p>\r
+<p class="apache">Serveur Apache HTTP Version 2.3</p>\r
+<img alt="" src="../images/feather.gif" /></div>\r
+<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div>\r
+<div id="path">\r
+<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Serveur HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.3</a> > <a href="./">Recettes et tutoriels</a></div><div id="page-content"><div id="preamble"><h1>Tutoriel Apache : Contenu dynamique basé sur CGI</h1>\r
+<div class="toplang">\r
+<p><span>Langues Disponibles: </span><a href="../en/howto/cgi.html" hreflang="en" rel="alternate" title="English"> en </a> |\r
+<a href="../fr/howto/cgi.html" title="Français"> fr </a> |\r
+<a href="../ja/howto/cgi.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> |\r
+<a href="../ko/howto/cgi.html" hreflang="ko" rel="alternate" title="Korean"> ko </a></p>\r
+</div>\r
+</div>\r
+<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#intro">Introduction</a></li>\r
+<li><img alt="" src="../images/down.gif" /> <a href="#configuring">Configurer Apache pour autoriser CGI</a></li>\r
+<li><img alt="" src="../images/down.gif" /> <a href="#writing">Ecrire un programme CGI</a></li>\r
+<li><img alt="" src="../images/down.gif" /> <a href="#troubleshoot">Mais ça ne marche toujours pas !</a></li>\r
+<li><img alt="" src="../images/down.gif" /> <a href="#behindscenes">Que se passe-t-il en coulisse</a></li>\r
+<li><img alt="" src="../images/down.gif" /> <a href="#libraries">Bibliothèques et modules CGI</a></li>\r
+<li><img alt="" src="../images/down.gif" /> <a href="#moreinfo">Pour plus d'informations</a></li>\r
+</ul></div>\r
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="intro" id="intro">Introduction</a></h2>\r
+ \r
+\r
+ <table class="related"><tr><th>Modules Apparentés</th><th>Directives Apparentées</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code></li><li><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code></li><li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li><li><code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code></li></ul></td></tr></table>\r
+\r
+ <p>CGI (Common Gateway Interface) définit une méthode d'interaction\r
+ entre un serveur web et des programmes générateurs de contenu\r
+ externes, plus souvent appelés programmes CGI ou scripts CGI. Il\r
+ s'agit de la méthode la plus simple, et la plus\r
+ courante, pour ajouter du contenu dynamique à votre site web. Ce\r
+ document est une introduction à la configuration de CGI sur votre\r
+ serveur web Apache, et une initiation à l'écriture de programmes\r
+ CGI.</p>\r
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="configuring" id="configuring">Configurer Apache pour autoriser CGI</a></h2>\r
+ \r
+\r
+ <p>Apache doit être configuré pour permettre l'exécution des\r
+ programmes CGI, pour que vos programmes CGI puissent fonctionner\r
+ correctement. Il existe plusieurs méthodes pour y parvenir.</p>\r
+\r
+ <div class="warning">Note: si Apache a été compilé avec le support\r
+ des modules partagés (DSO), vous devez vous assurer que le module CGI est\r
+ chargé ; vous devez pour cela vérifier que la directive <code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code> correspondante n'a pas été\r
+ commentée dans votre <code>httpd.conf</code>. Une directive correcte\r
+ doit ressembler à ceci :\r
+\r
+ <div class="example"><p><code>\r
+ LoadModule cgi_module modules/mod_cgi.so\r
+ </code></p></div></div>\r
+\r
+ <h3><a name="scriptalias" id="scriptalias">ScriptAlias</a></h3>\r
+ \r
+\r
+ <p>La directive <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> indique à Apache qu'un\r
+ répertoire particulier est dédié aux programmes CGI. Apache\r
+ considérera que tout fichier situé dans ce répertoire est un\r
+ programme CGI, et tentera de l'exécuter lorsque cette ressource\r
+ fera l'objet d'une requête client.</p>\r
+\r
+ <p>La directive <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> se présente comme suit\r
+ :</p>\r
+\r
+ <div class="example"><p><code>\r
+ ScriptAlias /cgi-bin/ /usr/local/apache2/cgi-bin/\r
+ </code></p></div>\r
+\r
+ <p>Cet exemple est tiré de votre fichier de configuration\r
+ <code>httpd.conf</code> par défaut, si vous avez installé Apache\r
+ dans son répertoire par défaut. La directive <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> est similaire à la\r
+ directive <code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code>, qui\r
+ définit à quel répertoire particulier doit correspondre un préfixe\r
+ d'URL. <code class="directive">Alias</code> et\r
+ <code class="directive">ScriptAlias</code> sont généralement utilisés pour\r
+ accéder à des répertoires situés en dehors du répertoire défini\r
+ par la directive <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>. La différence entre\r
+ <code class="directive">Alias</code> et <code class="directive">ScriptAlias</code>\r
+ réside dans le fait que <code class="directive">ScriptAlias</code> indique\r
+ en plus que tout ce qui se trouve sous le préfixe d'URL doit être\r
+ considéré comme un programme CGI. Ainsi, l'exemple ci-dessus\r
+ indique à Apache que toute requête pour une ressource commençant\r
+ par <code>/cgi-bin/</code> doit être servie depuis le répertoire\r
+ <code>/usr/local/apache2/cgi-bin/</code>, et doit être traitée en\r
+ tant que programme CGI.</p>\r
+\r
+ <p>Par exemple, si une requête pour l'URL\r
+ <code>http://www.example.com/cgi-bin/test.pl</code> est\r
+ effectuée, Apache tentera d'exécuter le fichier\r
+ <code>/usr/local/apache2/cgi-bin/test.pl</code> et en renverra la\r
+ sortie. Bien entendu, le fichier doit exister, être exécutable, et\r
+ retourner sa sortie d'une manière particulière, sinon Apache\r
+ renverra un message d'erreur.</p>\r
+ \r
+\r
+ <h3><a name="nonscriptalias" id="nonscriptalias">CGI en dehors des répertoires ScripAlias</a></h3>\r
+ \r
+\r
+ <p>Pour des raisons de sécurité, la localisation des programmes\r
+ CGI est souvent restreinte aux\r
+ répertoires définis par <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code>. De cette manière, les administrateurs\r
+ peuvent contrôler précisément qui est autorisé à utiliser les\r
+ programmes CGI. Cependant, si les précautions adéquates quant à\r
+ la sécurité sont prises, il n'y a aucune raison pour que les\r
+ programmes CGI ne puissent pas être exécutés depuis d'autres\r
+ répertoires. Par exemple, vous pouvez autoriser les utilisateurs à\r
+ enregistrer des contenus web dans leurs répertoires home à l'aide\r
+ de la directive <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code>. S'ils veulent mettre en\r
+ oeuvre leurs propres programmes CGI, mais n'ont pas l'autorisation\r
+ d'accès au répertoire <code>cgi-bin</code> principal, ils devront\r
+ être en mesure d'exécuter ces programmes depuis un autre\r
+ répertoire.</p>\r
+\r
+ <p>L'autorisation d'exécution des programmes CGI dans un\r
+ répertoire arbitraire se fait en deux étapes. En premier lieu, le\r
+ gestionnaire <code>cgi-script</code> doit être activé à l'aide\r
+ d'une directive <code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code> ou <code class="directive"><a href="../mod/core.html#sethandler">SetHandler</a></code>. En second lieu,\r
+ <code>ExecCGI</code> doit être spécifié dans la directive <code class="directive"><a href="../mod/core.html#options">Options</a></code>.</p>\r
+ \r
+\r
+ <h3><a name="options" id="options">Utilisation d'options explicites pour permettre l'exécution\r
+ des programmes CGI</a></h3>\r
+ \r
+\r
+ <p>Vous pouvez utiliser de manière explicite la directive\r
+ <code class="directive"><a href="../mod/core.html#options">Options</a></code> dans le fichier de\r
+ configuration de votre serveur principal, pour indiquer que\r
+ l'exécution des programmes CGI est permise depuis un répertoire\r
+ particulier :</p>\r
+\r
+ <div class="example"><p><code>\r
+ <Directory /usr/local/apache2/htdocs/un-repertoire><br />\r
+ <span class="indent">\r
+ Options +ExecCGI<br />\r
+ </span>\r
+ </Directory>\r
+ </code></p></div>\r
+\r
+ <p>La directive ci-dessus indique à Apache qu'il doit permettre\r
+ l'exécution des fichiers CGI. Vous devez aussi indiquer au serveur\r
+ quels fichiers sont des fichiers CGI. La directive <code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code> suivante indique au\r
+ serveur qu'il doit traiter tous les fichiers possédant une\r
+ extension <code>cgi</code> ou <code>pl</code> en tant que\r
+ programmes CGI :</p>\r
+\r
+ <div class="example"><p><code>\r
+ AddHandler cgi-script .cgi .pl\r
+ </code></p></div>\r
+ \r
+\r
+ <h3><a name="htaccess" id="htaccess">Fichiers .htaccess</a></h3>\r
+ \r
+\r
+ <p>Le <a href="htaccess.html"><code>tutoriel\r
+ .htaccess</code></a> montre comment activer les programmes\r
+ CGI si vous n'avez pas accès au\r
+ fichier <code>httpd.conf</code>.</p>\r
+ \r
+\r
+ <h3><a name="userdir" id="userdir">Répertoires utilisateurs</a></h3>\r
+ \r
+\r
+ <p>Pour permettre l'exécution en tant que programme CGI de tout\r
+ fichier possédant l'extension <code>.cgi</code> et situé dans un\r
+ répertoire utilisateur, vous pouvez utiliser la configuration\r
+ suivante :</p>\r
+\r
+ <div class="example"><p><code>\r
+ <Directory /home/*/public_html><br />\r
+ <span class="indent">\r
+ Options +ExecCGI<br />\r
+ AddHandler cgi-script .cgi<br />\r
+ </span>\r
+ </Directory>\r
+ </code></p></div>\r
+\r
+ <p>Pour indiquer un sous-répertoire <code>cgi-bin</code> d'un\r
+ répertoire utilisateur où tout fichier sera traité en tant que\r
+ programme CGI, vous pouvez utiliser ceci :</p>\r
+\r
+ <div class="example"><p><code>\r
+ <Directory /home/*/public_html/cgi-bin><br />\r
+ <span class="indent">\r
+ Options ExecCGI<br />\r
+ SetHandler cgi-script<br />\r
+ </span>\r
+ </Directory>\r
+ </code></p></div>\r
+\r
+ \r
+\r
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="writing" id="writing">Ecrire un programme CGI</a></h2>\r
+ \r
+\r
+ <p>Il y a deux différences principales entre la programmation\r
+ "standard" et la programmation CGI.</p>\r
+\r
+ <p>En premier lieu, toute sortie de votre programme CGI doit être\r
+ précédée d'un en-tête <a class="glossarylink" href="../glossary.html#mime-type" title="see glossary">MIME-type</a>. Il s'agit d'un\r
+ en-tête HTTP qui indique au client quel type de contenu il reçoit.\r
+ La plupart du temps, il se présente comme suit :</p>\r
+\r
+ <div class="example"><p><code>\r
+ Content-type: text/html\r
+ </code></p></div>\r
+\r
+ <p>En second lieu, votre sortie doit être en HTML, ou tout autre\r
+ format qu'un navigateur est en mesure d'afficher. La plupart du\r
+ temps, il s'agira de HTML, mais occasionnellement, vous pouvez être\r
+ amené à écrire un programme CGI qui renvoie une image gif, ou un\r
+ autre type de contenu non-HTML.</p>\r
+\r
+ <p>A part ces deux différences, un programme CGI ressemblera à tout\r
+ autre programme que vous pourriez être amené à écrire.</p>\r
+\r
+ <h3><a name="firstcgi" id="firstcgi">Votre premier programme CGI</a></h3>\r
+ \r
+\r
+ <p>L'exemple suivant est un exemple de programme CGI qui permet\r
+ d'afficher une ligne de caractères dans votre navigateur. Ecrivez\r
+ ce qui suit, enregistrez le dans un fichier nommé\r
+ <code>premier.pl</code>, et placez le dans votre répertoire\r
+ <code>cgi-bin</code>.</p>\r
+\r
+ <div class="example"><p><code>\r
+ #!/usr/bin/perl<br />\r
+ print "Content-type: text/html\n\n";<br />\r
+ print "Bonjour tout le monde . . .";\r
+ </code></p></div>\r
+\r
+ <p>Même si Perl ne vous est pas familier, vous devriez être\r
+ capable de comprendre le fonctionnement de ce programme. La\r
+ première ligne indique à Apache (ou à toute interface à partir de\r
+ laquelle le programme s'exécute) que ce programme peut être\r
+ exécuté en fournissant son fichier à l'interpréteur\r
+ <code>/usr/bin/perl</code>. La seconde ligne affiche la\r
+ déclaration du type de contenu considéré, suivie de deux paires\r
+ "Retour chariot - Nouvelle ligne". Ceci a pour effet d'insérer une\r
+ ligne vide après l'en-tête pour marquer la fin des en-têtes HTTP,\r
+ et le début du corps du document. La troisième ligne affiche la\r
+ chaîne de caractères "Bonjour tout le monde . . .". Et c'est tout\r
+ ce dont vous avez besoin.</p>\r
+\r
+ <p>Si vous ouvrez votre navigateur favori et lui indiquez\r
+ l'adresse</p>\r
+\r
+ <div class="example"><p><code>\r
+ http://www.exemple.com/cgi-bin/premier.pl\r
+ </code></p></div>\r
+\r
+ <p>ou toute autre URL correspondant à votre programme CGI, Vous\r
+ verrez la ligne <code>Bonjour tout le monde . . .</code>\r
+ s'afficher dans la fenêtre de votre navigateur. Ce n'est pas\r
+ extraordinaire, mais si vous y êtes parvenu, vous avez de bonnes\r
+ chances d'y parvenir pour tout autre programme plus\r
+ sophistiqué.</p>\r
+ \r
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="troubleshoot" id="troubleshoot">Mais ça ne marche toujours pas !</a></h2>\r
+ \r
+\r
+ <p>Vous devriez voir au moins une des quatre sorties suivantes dans\r
+ votre navigateur lorsque vous essayez d'accéder à votre programme\r
+ CGI depuis le web :</p>\r
+\r
+ <dl>\r
+ <dt>Le flux de sortie de votre programme CGI</dt>\r
+ <dd>Impeccable ! Cela signifie que tout fonctionne correctement.\r
+ Si la sortie est correcte mais n'est pas traitée correctement par\r
+ le navigateur, assurez-vous d'avoir défini\r
+ <code>Content-Type</code> de manière appropriée dans votre\r
+ programme CGI.</dd>\r
+\r
+ <dt>Le code source de votre programme CGI ou un message "POST\r
+ Method Not Allowed"</dt>\r
+ <dd>Cela signifie que vous n'avez pas configuré Apache de manière\r
+ à ce qu'il puisse traiter votre programme CGI. Relisez la section\r
+ sur la <a href="#configuring">configuration d'Apache</a>, et\r
+ essayez de trouver votre erreur.</dd>\r
+\r
+ <dt>Un message commençant par "Forbidden"</dt>\r
+ <dd>Ce type de message est révélateur d'un problème de\r
+ droits. Consultez le <a href="#errorlogs">journal des erreurs\r
+ d'Apache</a> et la section ci-dessous sur les <a href="#permissions">droits des fichiers</a>.</dd>\r
+\r
+ <dt>Un message contenant "Internal Server Error"</dt>\r
+ <dd>Si vous consultez le <a href="#errorlogs">journal des erreurs\r
+ d'Apache</a>, vous y trouverez probablement des messages du type\r
+ "Premature end of script headers" (Fin prématurée des en-têtes de\r
+ script), éventuellement accompagnés d'un message d'erreur généré\r
+ par votre programme CGI. Dans ce cas, il va vous falloir lire\r
+ chacune des sections ci-dessous pour déterminer ce qui empêche\r
+ votre programme CGI de générer les en-têtes appropriés.</dd>\r
+ </dl>\r
+\r
+ <h3><a name="permissions" id="permissions">Droits des fichiers</a></h3>\r
+ \r
+\r
+ <p>Souvenez-vous que le serveur ne s'exécute pas sous votre nom.\r
+ En d'autres termes, lorsque le serveur a démarré, il s'exécute\r
+ avec les droits d'un utilisateur non privilégié - en général\r
+ <code>nobody</code>, ou <code>www</code> - et en conséquence, il\r
+ aura besoin de droits supplémentaires pour pouvoir exécuter des\r
+ fichiers dont vous êtes le propriétaire. En général, pour qu'un\r
+ fichier ait des droits suffisants pour être exécutable par\r
+ <code>nobody</code>, il suffit de lui attribuer des droits\r
+ d'exécution pour tout le monde :</p>\r
+\r
+ <div class="example"><p><code>\r
+ chmod a+x premier.pl\r
+ </code></p></div>\r
+\r
+ <p>En outre, si votre programme doit pouvoir accéder en lecture\r
+ et/ou écriture à d'autres fichiers, ces derniers devront avoir les\r
+ droits appropriés.</p>\r
+\r
+ \r
+\r
+ <h3><a name="pathinformation" id="pathinformation">Chemin des exécutables (PATH) et variables\r
+ d'environnement</a></h3>\r
+ \r
+\r
+ <p>Lorsque vous lancez un programme depuis la ligne de commande,\r
+ certaines informations sont passées au shell sans que vous vous en\r
+ doutiez. Par exemple, la variable <code>PATH</code> indique au\r
+ shell où il doit rechercher les exécutables auxquels vous faites\r
+ référence.</p>\r
+\r
+ <p>Lorsqu'un programme s'exécute depuis le serveur web en tant que\r
+ programme CGI, sa variable <code>PATH</code> n'aura peut-être pas\r
+ la même valeur. Tout programme que vous invoquez dans votre\r
+ programme CGI ( comme par exemple <code>sendmail</code>) devra\r
+ être spécifié par son chemin complet, de façon à ce que le shell\r
+ puisse le trouver lorsqu'il tentera d'exécuter votre programme\r
+ CGI.</p>\r
+\r
+ <p>Un exemple typique de spécification de programme est le chemin\r
+ vers l'interpréteur de script (souvent <code>perl</code>) que l'on\r
+ trouve à la première ligne de votre programme CGI et qui va\r
+ ressembler à ceci :</p>\r
+\r
+ <div class="example"><p><code>\r
+ #!/usr/bin/perl\r
+ </code></p></div>\r
+\r
+ <p>Assurez-vous qu'il s'agit bien du chemin correct vers\r
+ l'interpréteur.</p>\r
+\r
+ <p>De plus, si votre programme CGI dépend d'autres <a href="#env">variables d'environnement</a>, vous devrez vous\r
+ assurer qu'elles lui sont bien transmises par Apache.</p>\r
+\r
+ \r
+\r
+ <h3><a name="syntaxerrors" id="syntaxerrors">Erreurs inhérentes au programme</a></h3>\r
+ \r
+\r
+ <p>La plupart des échecs dans l'exécution d'un programme CGI\r
+ proviennent du programme lui-même. Ceci est particulièrement vrai\r
+ lorsque ce satané programme CGI se bloque, alors que vous avez\r
+ appris à ne plus commettre les deux erreurs précédentes. La\r
+ première chose à faire est de vous assurer que votre programme\r
+ s'exécute depuis la ligne de commande, avant de le tester à partir\r
+ du serveur web. Par exemple, essayez :</p>\r
+\r
+ <div class="example"><p><code>\r
+ cd /usr/local/apache2/cgi-bin<br />\r
+ ./premier.pl\r
+ </code></p></div>\r
+\r
+ <p>(N'invoquez pas l'interpréteur <code>perl</code>. Le shell et\r
+ Apache doivent être capable de le déterminer à partir de <a href="#pathinformation">l'information sur le chemin</a> située sur\r
+ la première ligne du script.)</p>\r
+\r
+ <p>La première chose que vous devriez voir affichée par votre\r
+ programme est un ensemble d'en-têtes HTTP, comprenant entre autres\r
+ le <code>Content-Type</code>, et suivi d'une ligne vide. Si vous\r
+ voyez quoi que ce soit d'autre, Apache renverra l'erreur\r
+ <code>Premature end of script headers</code> si vous tentez\r
+ d'exécuter le programme depuis le serveur. Voir <a href="#writing">Ecriture d'un programme CGI</a> ci-dessus pour\r
+ plus de détails.</p>\r
+ \r
+\r
+ <h3><a name="errorlogs" id="errorlogs">Journalisation des erreurs</a></h3>\r
+ \r
+\r
+ <p>Les journaux d'erreurs sont vos amis. Toute anomalie de\r
+ fonctionnement est consignée dans le journal des erreurs et c'est\r
+ ici que vous devez regarder en premier en cas de problème. Si\r
+ l'hébergeur de votre site ne vous donne pas accès au journal des\r
+ erreurs, vous avez tout intérêt à vous tourner vers quelqu'un\r
+ d'autre. Apprenez à déchiffrer les journaux d'erreurs, et vous\r
+ vous apercevrez que la plupart des problèmes seront rapidement\r
+ identifiés . . . et résolus.</p>\r
+ \r
+\r
+ <h3><a name="suexec" id="suexec">Suexec</a></h3>\r
+ \r
+\r
+ <p>Le programme <a href="../suexec.html">suexec</a> permet\r
+ d'exécuter les programmes CGI avec des droits différents selon le\r
+ serveur virtuel ou le répertoire utilisateur dans lequel ils\r
+ se situent. Suexec effectue une vérification des droits très\r
+ stricte, et toute anomalie détectée au cours de cette vérification\r
+ entraînera un echec d'exécution de votre programme CGI avec\r
+ affichage de l'erreur <code>Premature end of script\r
+ headers</code>.</p>\r
+\r
+ <p>Pour savoir si vous pouvez utiliser suexec, tapez la commande\r
+ <code>apachectl -V</code>, et regardez le chemin indiqué par\r
+ <code>SUEXEC_BIN</code>. Si au démarrage d'Apache, ce dernier\r
+ trouve un exécutable <code class="program"><a href="../programs/suexec.html">suexec</a></code> dans ce chemin,\r
+ suexec sera activé.</p>\r
+\r
+ <p>Si vous ne maîtrisez pas le fonctionnement de suexec, il vous\r
+ est déconseillé de l'utiliser. Pour désactiver suexec, supprimer\r
+ simplement (ou renommez) l'exécutable <code class="program"><a href="../programs/suexec.html">suexec</a></code>\r
+ pointé par <code>SUEXEC_BIN</code> et redémarrez le serveur. Si\r
+ après une lecture de <a href="../suexec.html">suexec</a>, vous\r
+ décidez quand-même de l'utiliser, tapez la commande <code>suexec\r
+ -V</code> pour voir où se situe le journal de suexec, et utilisez\r
+ ce dernier pour déterminer quelles règles vous violez\r
+ éventuellement.</p>\r
+ \r
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="behindscenes" id="behindscenes">Que se passe-t-il en coulisse</a></h2>\r
+ \r
+\r
+ <p>Lorsque vos compétences en programmation CGI seront plus\r
+ poussées, il s'avérera intéressant pour vous de mieux comprendre ce\r
+ qui se passe en coulisse, et en particulier la manière dont le\r
+ navigateur et le serveur dialoguent entre eux. En effet, bien qu'il\r
+ soit tout à fait louable d'écrire un programme qui affiche "Bonjour\r
+ tout le monde . . .", cela ne sert pas à grand chose.</p>\r
+\r
+ <h3><a name="env" id="env">Variables d'environnement</a></h3>\r
+ \r
+\r
+ <p>Les variables d'environnement sont des valeurs qui gravitent\r
+ autour de vous lorsque vous utilisez votre ordinateur. Elles sont\r
+ très utiles, à l'instar de votre chemin par défaut (où votre\r
+ ordinateur va rechercher le fichier physique correspondant à la\r
+ commande que vous avez tapée), votre nom d'utilisateur, le type de\r
+ votre terminal, etc... Pour obtenir une liste complète des\r
+ variables d'environnement standards que vous utilisez tous les\r
+ jours, tapez <code>env</code> dans votre interpréteur\r
+ de commandes.</p>\r
+\r
+ <p>Au cours de la transaction CGI, le serveur et le navigateur\r
+ définissent aussi des variables d'environnement, de façon à ce\r
+ qu'ils puissent communiquer entre eux. Ces variables définissent\r
+ entre autre le type de navigateur (Netscape, IE, Lynx), le type de\r
+ serveur (Apache, IIS, WebSite), le nom du programme CGI en cours\r
+ d'exécution, etc...</p>\r
+\r
+ <p>Ces variables sont à la disposition du programmeur CGI, et\r
+ elles constituent 50% de la communication client-serveur. La liste\r
+ complète des variables requises se trouve à\r
+ <a href="http://hoohoo.ncsa.uiuc.edu/cgi/env.html">http://hoohoo.ncsa.uiuc.edu/cgi/env.html</a>.</p>\r
+\r
+ <p>Ce programme CGI basique en Perl permet d'afficher toutes les\r
+ variables d'environnement qui sont échangées. Deux programmes\r
+ similaires sont fournis avec la distribution d'Apache et situés\r
+ dans le répertoire <code>cgi-bin</code>.\r
+ Notez que certaines variables sont\r
+ obligatoires, alors que d'autres sont optionnelles, si bien que\r
+ vous verrez s'afficher certaines variables qui ne font pas partie\r
+ de la liste officielle. De plus, Apache vous propose de nombreuses\r
+ méthodes pour <a href="../env.html">ajouter vos propres\r
+ variables d'environnement</a> aux variables de base fournies par\r
+ défaut.</p>\r
+\r
+ <div class="example"><p><code>\r
+ #!/usr/bin/perl<br />\r
+ print "Content-type: text/html\n\n";<br />\r
+ foreach $key (keys %ENV) {<br />\r
+ <span class="indent">\r
+ print "$key --> $ENV{$key}<br>";<br />\r
+ </span>\r
+ }\r
+ </code></p></div>\r
+ \r
+\r
+ <h3><a name="stdin" id="stdin">STDIN et STDOUT</a></h3>\r
+ \r
+\r
+ <p>L'entrée standard (<code>STDIN</code>) et la sortie standard\r
+ (<code>STDOUT</code>) constituent d'autres voies de communication\r
+ entre le client et le serveur. Dans un contexte normal,\r
+ <code>STDIN</code> correspond au clavier, ou à un fichier fourni\r
+ au programme à des fins de traitement, et <code>STDOUT</code> à la\r
+ console ou à l'écran.</p>\r
+\r
+ <p>Lorsque vous transmettez un formulaire web à un programme CGI\r
+ par la méthode <code>POST</code>, les données de ce formulaire\r
+ sont transcrites dans un format spécial et transmises à votre\r
+ programme CGI via <code>STDIN</code>. Le programme peut alors les\r
+ traiter comme si elles provenaient du clavier ou d'un\r
+ fichier.</p>\r
+\r
+ <p>Ce "format spécial" est très simple. Un nom de champ et sa\r
+ valeur sont reliés entre eux par un signe "égal" (=), et chacune\r
+ de ces paires nom champ/valeur est séparée de la suivante par un\r
+ "et" commercial (&). Les caractères\r
+ spéciaux comme les espaces, les "et" commerciaux, et les signes\r
+ "égal" sont convertis en leur équivalent hexadécimal pour éviter\r
+ qu'ils ne gâchent le travail. La chaîne contenant les données doit\r
+ ressembler à ceci :</p>\r
+\r
+ <div class="example"><p><code>\r
+ name=Rich%20Bowen&city=Lexington&state=KY&sidekick=Squirrel%20Monkey\r
+ </code></p></div>\r
+\r
+ <p>Vous verrez aussi parfois une chaîne de ce type accolée à une\r
+ URL. Dans ce cas, le serveur enregistre cette chaîne dans la\r
+ variable d'environnement appelée <code>QUERY_STRING</code>. On a\r
+ alors affaire à une requête de type <code>GET</code>. Votre\r
+ formulaire HTML indique laquelle des méthodes <code>GET</code> ou\r
+ <code>POST</code> est utilisée pour transmettre les données, en\r
+ définissant l'attribut <code>METHOD</code> au niveau de la balise\r
+ <code>FORM</code>.</p>\r
+\r
+ <p>Votre programme est ensuite chargé d'extraire les informations\r
+ utiles de cette chaîne. Heureusement, des bibliothèques et des\r
+ modules sont à votre disposition pour vous aider à traiter ces\r
+ données, et à gérer les différents aspects de votre programme\r
+ CGI.</p>\r
+ \r
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="libraries" id="libraries">Bibliothèques et modules CGI</a></h2>\r
+ \r
+\r
+ <p>Pour écrire un programme CGI, il vous est conseillé d'utiliser\r
+ une bibliothèque de code, ou un module, qui effectueront une grande\r
+ partie du travail de base pour vous. Ceci vous permettra de diminuer\r
+ le nombre d'erreurs et d'accélérer le développement.</p>\r
+\r
+ <p>Si vous écrivez des programmes CGI en Perl, des modules sont à\r
+ votre disposition à <a href="http://www.cpan.org/">CPAN</a>. A ce\r
+ sujet, le module le plus populaire est <code>CGI.pm</code>. Vous\r
+ pouvez aussi essayer <code>CGI::Lite</code>, qui implémente les\r
+ fonctionnalités strictement nécessaires, mais suffisantes pour\r
+ la majorité des programmes.</p>\r
+\r
+ <p>Si vous écrivez des programmes CGI en C, vous disposez de\r
+ nombreuses options. L'une d'elles est la bibliothèque\r
+ <code>CGIC</code> de <a href="http://www.boutell.com/cgic/">http://www.boutell.com/cgic/</a>.</p>\r
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="moreinfo" id="moreinfo">Pour plus d'informations</a></h2>\r
+ \r
+\r
+ <p>Il existe un grand nombre de ressources CGI sur le web. Vous\r
+ pouvez discuter de problèmes CGI avec d'autres utilisateurs dans le\r
+ groupe Usenet <a href="news:comp.infosystems.www.authoring.cgi">\r
+ comp.infosystems.www.authoring.cgi</a>. En outre, la liste de\r
+ diffusion de la Guilde des Ecrivains HTML est une source\r
+ intarissable de réponses à vos questions. Vous en saurez plus en\r
+ vous rendant à <a href="http://www.hwg.org/lists/hwg-servers/">http://www.hwg.org/lists/hwg-servers/</a>.</p>\r
+\r
+ <p>Et bien entendu, vous devez lire la spécification CGI, qui\r
+ présente tous les détails en rapport avec les opérations des\r
+ programmes CGI. La version originale se trouve au <a href="http://hoohoo.ncsa.uiuc.edu/cgi/interface.html">NCSA</a>, et\r
+ dans la RFC IETF actuelle <a href="http://www.ietf.org/rfc/rfc3875">Common Gateway\r
+ Interface RFC</a>.</p>\r
+\r
+ <p>Lorsque vous postez une question à propos d'un problème CGI que\r
+ vous rencontrez, que ce soit dans une liste de diffusion ou dans un\r
+ newsgroup, faites en sorte de fournir suffisamment d'informations\r
+ sur le problème rencontré, ce que vous attendiez exactement, et en\r
+ quoi ce qui se produit est réellement différent de ce que vous\r
+ attendiez, quel serveur vous utilisez, en quel langage votre\r
+ programme CGI a été écrit, et, si possible, son code source. Ceci\r
+ permettra une résolution plus aisée de votre problème.</p>\r
+\r
+ <p>Notez que les questions à propos de problèmes CGI ne doivent\r
+ <strong>jamais</strong> être postées dans la base de données de\r
+ bogues d'Apache, à moins que vous ne soyez sûr d'avoir trouvé un\r
+ problème dans le code source d'Apache.</p>\r
+ </div></div>\r
+<div class="bottomlang">\r
+<p><span>Langues Disponibles: </span><a href="../en/howto/cgi.html" hreflang="en" rel="alternate" title="English"> en </a> |\r
+<a href="../fr/howto/cgi.html" title="Français"> fr </a> |\r
+<a href="../ja/howto/cgi.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> |\r
+<a href="../ko/howto/cgi.html" hreflang="ko" rel="alternate" title="Korean"> ko </a></p>\r
+</div><div id="footer">\r
+<p class="apache">Copyright 2009 The Apache Software Foundation.<br />Authorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>\r
+<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p></div>\r
</body></html>
\ No newline at end of file
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Tutoriel Apache : fichiers .htaccess - Serveur Apache HTTP</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p>
-<p class="apache">Serveur Apache HTTP Version 2.3</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Serveur HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.3</a> > <a href="./">Recettes / Tutoriels</a></div><div id="page-content"><div id="preamble"><h1>Tutoriel Apache : fichiers .htaccess</h1>
-<div class="toplang">
-<p><span>Langues Disponibles: </span><a href="../en/howto/htaccess.html" hreflang="en" rel="alternate" title="English"> en </a> |
-<a href="../fr/howto/htaccess.html" title="Français"> fr </a> |
-<a href="../ja/howto/htaccess.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> |
-<a href="../ko/howto/htaccess.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |
-<a href="../pt-br/howto/htaccess.html" hreflang="pt-br" rel="alternate" title="Português (Brasil)"> pt-br </a></p>
-</div>
-
-<p>Les fichiers <code>.htaccess</code> fournissent une méthode pour
-modifier la configuration du serveur au niveau de chaque répertoire.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#related">Fichiers .htaccess</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#what">Que sont ce fichiers, comment les utiliser ?</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#when">Quand doit-on (ne doit-on pas) utiliser
- les fichiers .htaccess ?</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#how">Comment sont appliquées les directives ?</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#auth">Exemple d'authentification</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#ssi">Exemple d'Inclusion Côté Serveur (Server Side
-Includes - SSI)</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cgi">Exemple de CGI</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#troubleshoot">Résolution des problèmes</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="related" id="related">Fichiers .htaccess</a></h2>
- <table class="related"><tr><th>Modules Apparentés</th><th>Directives Apparentées</th></tr><tr><td><ul><li><code class="module"><a href="../mod/core.html">core</a></code></li><li><code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code></li><li><code class="module"><a href="../mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code></li><li><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code></li><li><code class="module"><a href="../mod/mod_include.html">mod_include</a></code></li><li><code class="module"><a href="../mod/mod_mime.html">mod_mime</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/core.html#accessfilename">AccessFileName</a></code></li><li><code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code></li><li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li><li><code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code></li><li><code class="directive"><a href="../mod/core.html#sethandler">SetHandler</a></code></li><li><code class="directive"><a href="../mod/mod_authn_core.html#authtype">AuthType</a></code></li><li><code class="directive"><a href="../mod/mod_authn_core.html#authname">AuthName</a></code></li><li><code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code></li><li><code class="directive"><a href="../mod/mod_authz_groupfile.html#authgroupfile">AuthGroupFile</a></code></li><li><code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code></li></ul></td></tr></table>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="what" id="what">Que sont ce fichiers, comment les utiliser ?</a></h2>
-
-
- <p>Les fichiers <code>.htaccess</code> (ou "fichiers de
- configuration distribués") fournissent une méthode pour modifier la
- configuration du serveur au niveau d'un répertoire. Un fichier,
- contenant une ou plusieurs directives de configuration, est placé
- dans un répertoire de documents particulier, et ses directives
- s'appliquent à ce répertoire et à tous ses sous-répertoires.</p>
-
- <div class="note"><h3>Note :</h3>
- <p>Si vous voulez donner un autre nom à votre fichier
- <code>.htaccess</code>, vous pouvez le faire en utilisant la
- directive <code class="directive"><a href="../mod/core.html#accessfilename">AccessFileName</a></code>. Par
- exemple, si vous préférez nommer votre fichier
- <code>.config</code>, vous pouvez mettre ceci dans le fichier de
- configuration de votre serveur :</p>
-
- <div class="example"><p><code>
- AccessFileName .config
- </code></p></div>
- </div>
-
- <p>En général, les fichiers <code>.htaccess</code> utilisent la même
- syntaxe que les <a href="../configuring.html#syntax">fichiers de
- configuration principaux</a>. Ce que vous pouvez mettre dans ces
- fichier est déterminé par la directive <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code>. Cette directive spécifie,
- sous forme de catégories, quelles directives seront traitées si
- elles se trouvent dans un fichier <code>.htaccess</code>. Si une
- directive est permise dans un fichier <code>.htaccess</code> file,
- la documentation de cette directive contiendra une section Override,
- spécifiant quelle valeur doit prendre <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> pour que cette directive
- soit traitée.</p>
-
- <p>Par exemple, si vous regardez la documentation de la directive
- <code class="directive"><a href="../mod/core.html#adddefaultcharset">AddDefaultCharset</a></code>, vous verrez
- que cette dernière est permise dans les fichiers
- <code>.htaccess</code> (Voir la ligne de contexte dans le résumé de
- la directive). La ligne <a href="../mod/directive-dict.html#Context">Override</a> indique
- <code>FileInfo</code>. Vous devez donc avoir au moins
- <code>AllowOverride FileInfo</code> pour que cette directive soit
- traitée dans les fichiers <code>.htaccess</code>.</p>
-
- <div class="example"><h3>Exemple :</h3><table>
- <tr>
- <td><a href="../mod/directive-dict.html#Context">Contexte :</a></td>
- <td>configuration du serveur, serveur virtuel, directory, .htaccess</td>
- </tr>
-
- <tr>
- <td><a href="../mod/directive-dict.html#Override">Override:</a></td>
- <td>FileInfo</td>
- </tr>
- </table></div>
-
- <p>Si vous n'êtes pas sûr qu'une directive particulière soit permise
- dans un fichier <code>.htaccess</code>, lisez la documentation de
- cette directive, et consultez la ligne de contexte pour
- ".htaccess".</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="when" id="when">Quand doit-on (ne doit-on pas) utiliser
- les fichiers .htaccess ?</a></h2>
-
- <p>En principe, vous ne devriez utiliser les fichiers
- <code>.htaccess</code> que si vous n'avez pas accès au fichier de
- configuration du serveur principal. Par exemple, la fausse idée
- selon laquelle l'authentification de l'utilisateur devrait toujours
- être faite dans les fichiers <code>.htaccess</code> est très
- répandue. Ceci est tout simplement faux. Vous pouvez configurer
- l'authentification des utilisateurs au niveau de la configuration du
- serveur principal, et c'est en fait cette méthode qui doit être
- privilégiée.</p>
-
- <p>Les fichiers <code>.htaccess</code> ne devraient être utilisés
- que dans le cas où les fournisseurs de contenu ont besoin de
- modifier la configuration du serveur au niveau d'un répertoire, mais
- ne possèdent pas l'accès root sur le système du serveur. Si
- l'administrateur du serveur ne souhaite pas effectuer des
- modifications de configuration incessantes, il peut être intéressant
- de permettre aux utilisateurs isolés d'effectuer eux-mêmes ces
- modifications par le biais de fichiers <code>.htaccess</code>. Ceci
- est particulièrement vrai dans le cas où le fournisseur d'accès à
- Internet héberge de nombreux sites d'utilisateurs sur un seul
- serveur, et souhaite que ces utilisateurs puissent modifier
- eux-mêmes leurs configurations.</p>
-
- <p>Cependant et d'une manière générale, il vaut mieux éviter
- d'utiliser les fichiers <code>.htaccess</code>. Tout élément de
- configuration que vous pourriez vouloir mettre dans un fichier
- <code>.htaccess</code>, peut aussi être mis, et avec la même
- efficacité, dans une section <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> du fichier de configuration de
- votre serveur principal.</p>
-
- <p>Il y a deux raisons principales d'éviter l'utilisation des
- fichiers <code>.htaccess</code>.</p>
-
- <p>La première est liée aux performances. Lorsque la directive
- <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> est définie de
- façon à autoriser l'utilisation des fichiers <code>.htaccess</code>,
- Apache va rechercher leur présence dans chaque répertoire. Ainsi,
- permettre l'utilisation des fichiers <code>.htaccess</code> est déjà
- en soi une cause de dégradation des performances, que vous utilisiez
- effectivement ces fichiers ou non ! De plus, le fichier
- <code>.htaccess</code> est chargé en mémoire chaque fois qu'un
- document fait l'objet d'une requête.</p>
-
- <p>Notez aussi qu'Apache doit rechercher les fichiers
- <code>.htaccess</code> dans tous les répertoires de niveau
- supérieur, afin de rassembler toutes les directives qui s'appliquent
- au répertoire courant (Voir la section <a href="#how">comment sont
- appliquées les directives</a>). Ainsi, si un fichier fait l'objet
- d'une requête à partir d'un répertoire
- <code>/www/htdocs/exemple</code>, Apache doit rechercher les
- fichiers suivants :</p>
-
- <div class="example"><p><code>
- /.htaccess<br />
- /www/.htaccess<br />
- /www/htdocs/.htaccess<br />
- /www/htdocs/exemple/.htaccess
- </code></p></div>
-
- <p>En conséquence, chaque accès à un fichier de ce répertoire
- nécessite 4 accès au système de fichiers supplémentaires pour
- rechercher des fichiers <code>.htaccess</code>, même si
- aucun de ces fichiers n'est présent. Notez que cet exemple ne peut
- se produire que si les fichiers <code>.htaccess</code> ont été
- autorisés pour le répertoire <code>/</code>, ce qui est rarement le
- cas.</p>
-
- <p>La seconde raison d'éviter l'utilisation des fichiers
- <code>.htaccess</code> est liée à la sécurité. Si vous permettez aux
- utilisateurs de modifier la configuration du serveur, il peut en
- résulter des conséquences sur lesquelles vous n'aurez aucun
- contrôle. Réfléchissez bien avant de donner ce privilège à vos
- utilisateurs. Notez aussi que ne pas donner aux utilisateurs les
- privilèges dont ils ont besoin va entraîner une augmentation des
- demandes de support technique. Assurez-vous d'avoir informé
- clairement vos utilisateurs du niveau de privilèges que vous leur
- avez attribué. Indiquer exactement comment vous avez défini la
- directive <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> et
- diriger les utilisateurs vers la documentation correspondante vous
- évitera bien des confusions ultérieures.</p>
-
- <p>Notez que mettre un fichier <code>.htaccess</code> contenant une
- directive dans un répertoire <code>/www/htdocs/exemple</code>
- revient exactement au même que mettre la même directive dans une
- section Directory <code><Directory /www/htdocs/exemple></code>
- du fichier de configuration de votre serveur principal :</p>
-
- <p>Fichier <code>.htaccess</code> dans
- <code>/www/htdocs/exemple</code> :</p>
-
- <div class="example"><h3>Contenu du fichier .htaccess dans
- <code>/www/htdocs/exemple</code></h3><p><code>
- AddType text/exemple .exm
- </code></p></div>
-
- <div class="example"><h3>Section de votre fichier
- <code>httpd.conf</code></h3><p><code>
- <Directory /www/htdocs/exemple><br />
- <span class="indent">
- AddType text/exemple .exm<br />
- </span>
- </Directory>
- </code></p></div>
-
- <p>Cependant, la perte de performances sera moindre si vous
- définissez cette directive dans la configuration de
- votre serveur principal, car cette dernière ne sera chargée qu'une
- seule fois au moment du démarrage du serveur, alors qu'elle le sera
- à chaque accès dans le cas d'un fichier <code>.htaccess</code>.</p>
-
- <p>L'utilisation des fichiers <code>.htaccess</code> peut être
- entièrement désactivée en définissant la directive <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> à <code>none</code> :</p>
-
- <div class="example"><p><code>
- AllowOverride None
- </code></p></div>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="how" id="how">Comment sont appliquées les directives ?</a></h2>
-
- <p>Les directives de configuration situées dans un fichier
- <code>.htaccess</code> s'appliquent au répertoire dans lequel ce
- fichier <code>.htaccess</code> se trouve, ainsi qu'à tous ses
- sous-répertoires. Cependant, il est important de garder à l'esprit
- qu'il peut y avoir des fichiers <code>.htaccess</code> dans les
- répertoires de niveau supérieur. Les directives sont appliquées
- selon l'ordre dans lequel elles sont rencontrées. Ainsi, les
- directives d'un fichier <code>.htaccess</code> situé dans un
- répertoire particulier peuvent écraser les directives se trouvant
- dans des fichiers <code>.htaccess</code> situés à un niveau
- supérieur dans l'arborescence des répertoires. Et ces dernières
- peuvent elles-mêmes avoir écrasé des directives d'un fichier
- <code>.htaccess</code> situé à un niveau encore plus haut, ou dans
- le fichier de configuration du serveur principal.</p>
-
- <p>Exemple :</p>
-
- <p>Dans le répertoire <code>/www/htdocs/exemple1</code> se trouve un
- fichier <code>.htaccess</code> contenant ce qui suit :</p>
-
- <div class="example"><p><code>
- Options +ExecCGI
- </code></p></div>
-
- <p>Note : "<code>AllowOverride Options</code>" doit être présent
- pour permettre l'utilisation de la directive "<code class="directive"><a href="../mod/core.html#options">Options</a></code>" dans les fichiers
- <code>.htaccess</code>.</p>
-
- <p>Dans le répertoire <code>/www/htdocs/exemple1/exemple2</code> se
- trouve un fichier <code>.htaccess</code> contenant ce qui suit
- :</p>
-
- <div class="example"><p><code>
- Options Includes
- </code></p></div>
-
- <p>Ainsi, à cause de ce second fichier <code>.htaccess</code> du
- répertoire <code>/www/htdocs/exemple1/exemple2</code>, l'exécution
- des CGI est interdite, car la dernière définition d'options
- <code>Options Includes</code> écrase toute autre définition
- d'options d'un fichier <code>.htaccess</code> situé dans un
- répertoire de niveau supérieur.</p>
-
- <h3><a name="merge" id="merge">Interactions entre les fichiers .htaccess
- et les fichiers de configuration du serveur principal</a></h3>
-
- <p>Comme indiqué dans la documentation sur les <a href="../sections.html">Sections de configuration</a>, les fichiers
- <code>.htaccess</code> peuvent écraser les directives des sections
- <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> pour
- le répertoire correspondant, mais peuvent eux-mêmes être écrasés
- par d'autres types de sections des fichiers de la
- configuration principale. Cette possibilité peut s'avérer utile pour
- forcer certaines configurations, même en cas de présence de l'option
- libérale <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code>. Par
- exemple, pour interdire l'exécution de scripts en autorisant la
- définition de toute autre option dans les fichiers
- <code>.htaccess</code>, vous pouvez utiliser :</p>
-
- <div class="example"><p><code>
-<Directory /><br />
-<span class="indent">
-Allowoverride All<br />
-</span>
-</Directory><br />
-<br />
-<Location /><br />
-<span class="indent">
-Options +IncludesNoExec -ExecCGI<br />
-</span>
-</Location>
- </code></p></div>
-
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="auth" id="auth">Exemple d'authentification</a></h2>
-
- <p>Si vous accédez directement à ce point du document pour apprendre
- à effectuer une authentification, il est important de noter ceci. Il
- existe une fausse idée selon laquelle il serait nécessaire
- d'utiliser les fichiers <code>.htaccess</code> pour implémenter
- l'authentification par mot de passe. Ceci est tout simplement faux.
- Pour y parvenir, il est préférable de mettre les directives
- d'authentification dans une section <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> du fichier de configuration de
- votre serveur principal, et les fichiers <code>.htaccess</code> ne
- devraient être utilisés que dans le cas où vous n'avez pas accès au
- fichier de configuration du serveur principal. Voir <a href="#when">ci-dessus</a> pour savoir dans quels cas vous devez ou
- ne devez pas utiliser les fichiers <code>.htaccess</code>.</p>
-
- <p>Ceci étant dit, si vous pensez que vous devez quand-même utiliser
- un fichier <code>.htaccess</code>, vous pouvez utiliser la
- configuration suivante :</p>
-
- <p>Contenu du fichier <code>.htaccess</code> :</p>
-
- <div class="example"><p><code>
- AuthType Basic<br />
- AuthName "Password Required"<br />
- AuthUserFile /www/passwords/password.file<br />
- AuthGroupFile /www/passwords/group.file<br />
- Require Group admins
- </code></p></div>
-
- <p>Notez que <code>AllowOverride AuthConfig</code> doit être présent
- pour que ces directives produisent leur effet.</p>
-
- <p>Vous pouvez vous référer au <a href="auth.html">tutoriel sur
- l'authentification</a> pour une description plus détaillée de
- l'authentification et de l'autorisation.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="ssi" id="ssi">Exemple d'Inclusion Côté Serveur (Server Side
-Includes - SSI)</a></h2>
-
- <p>Les fichiers <code>.htaccess</code> sont aussi couramment
- utilisés pour activer les SSI pour un répertoire particulier. Pour y
- parvenir, on utilise les directives de configuration suivantes,
- placées dans un fichier <code>.htaccess</code> enregistré dans le
- répertoire considéré :</p>
-
- <div class="example"><p><code>
- Options +Includes<br />
- AddType text/html shtml<br />
- AddHandler server-parsed shtml
- </code></p></div>
-
- <p>Notez que <code>AllowOverride Options</code> et <code>AllowOverride
- FileInfo</code> doivent être tous les deux présents pour que ces
- directives puissent produire leur effet.</p>
-
- <p>Vous pouvez vous référer au <a href="ssi.html">tutoriel SSI</a>
- pour une description plus détaillée des SSI.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="cgi" id="cgi">Exemple de CGI</a></h2>
-
- <p>En fin de compte, vous avez décidé d'utiliser un fichier
- <code>.htaccess</code> pour permettre l'exécution des programmes CGI
- dans un répertoire particulier. Pour y parvenir, vous pouvez
- utiliser la configuration suivante :</p>
-
- <div class="example"><p><code>
- Options +ExecCGI<br />
- AddHandler cgi-script cgi pl
- </code></p></div>
-
- <p>Alternativement, si vous souhaitez que tous les fichiers d'un
- répertoire donné soient considérés comme des programmes CGI, vous
- pouvez utiliser la configuration suivante :</p>
-
- <div class="example"><p><code>
- Options +ExecCGI<br />
- SetHandler cgi-script
- </code></p></div>
-
- <p>Notez que <code>AllowOverride Options</code> et <code>AllowOverride
- FileInfo</code> doivent être tous les deux présents pour que ces
- directives puissent produire leur effet.</p>
-
- <p>Vous pouvez vous référer au <a href="cgi.html">tutoriel CGI</a>
- pour une description plus détaillée de la configuration et de la
- proprammation CGI.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="troubleshoot" id="troubleshoot">Résolution des problèmes</a></h2>
-
- <p>De nombreuses raisons peuvent être à l'origine du fait que
- les directives que vous avez mises dans un fichier
- <code>.htaccess</code> ne produisent pas l'effet désiré.</p>
-
- <p>Le plus souvent, le problème vient du fait que la définition de
- la directive <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code>
- ne permet pas l'activation des directives de votre fichier
- <code>.htaccess</code>. Vérifiez si une directive
- <code>AllowOverride None</code> n'affecte pas le répertoire où se
- trouve votre fichier. Un bon test consiste à mettre des directives
- dont la syntaxe est erronée dans votre ficher <code>.htaccess</code>
- et de redémarrer le serveur. Si aucune erreur n'est générée par le
- serveur, il est pratiquement certain qu'une directive
- <code>AllowOverride None</code> affecte votre répertoire.</p>
-
- <p>Par contre, si vous obtenez des erreurs de serveur lorsque vous
- tentez d'accéder à des documents, consultez votre journal des
- erreurs d'Apache. Il vous indiquera probablement que la directive
- utilisée dans votre fichier <code>.htaccess</code> n'est pas
- permise.</p>
-
-<div class="example"><p><code>
- [Sat Aug 09 16:19:20 2008] [alert] [client 192.168.200.51] /var/www/html/.htaccess: RewriteLog not allowed here
-</code></p></div>
- <p>Cela signifie soit que vous utilisez une directive qui n'est
- jamais permise dans les fichiers <code>.htaccess</code>, soit
- que vous n'avez tout simplement pas défini la directive
- <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> à un niveau
- suffisant pour la directive que vous utilisez. Consultez la
- documentation de cette directive pour déterminer quel cas
- s'applique.</p>
-
- <p>Le journal des erreurs peut aussi vous signaler une erreur de
- syntaxe dans l'usage de la directive elle-même.</p>
-
- <div class="example"><p><code>
- [Sat Aug 09 16:22:34 2008] [alert] [client 192.168.200.51] /var/www/html/.htaccess: RewriteCond: bad flag delimiters
- </code></p></div>
-
- <p>Dans ce cas, le message d'erreur sera spécifique à l'erreur
- de syntaxe que vous avez commise.</p>
-</div></div>
-<div class="bottomlang">
-<p><span>Langues Disponibles: </span><a href="../en/howto/htaccess.html" hreflang="en" rel="alternate" title="English"> en </a> |
-<a href="../fr/howto/htaccess.html" title="Français"> fr </a> |
-<a href="../ja/howto/htaccess.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> |
-<a href="../ko/howto/htaccess.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |
-<a href="../pt-br/howto/htaccess.html" hreflang="pt-br" rel="alternate" title="Português (Brasil)"> pt-br </a></p>
-</div><div id="footer">
-<p class="apache">Copyright 2009 The Apache Software Foundation.<br />Authorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p></div>
+<?xml version="1.0" encoding="ISO-8859-1"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head><!--\r
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r
+ This file is generated from xml source: DO NOT EDIT\r
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r
+ -->\r
+<title>Tutoriel Apache : fichiers .htaccess - Serveur Apache HTTP</title>\r
+<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />\r
+<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />\r
+<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />\r
+<link href="../images/favicon.ico" rel="shortcut icon" /></head>\r
+<body id="manual-page"><div id="page-header">\r
+<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p>\r
+<p class="apache">Serveur Apache HTTP Version 2.3</p>\r
+<img alt="" src="../images/feather.gif" /></div>\r
+<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div>\r
+<div id="path">\r
+<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Serveur HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.3</a> > <a href="./">Recettes / Tutoriels</a></div><div id="page-content"><div id="preamble"><h1>Tutoriel Apache : fichiers .htaccess</h1>\r
+<div class="toplang">\r
+<p><span>Langues Disponibles: </span><a href="../en/howto/htaccess.html" hreflang="en" rel="alternate" title="English"> en </a> |\r
+<a href="../fr/howto/htaccess.html" title="Français"> fr </a> |\r
+<a href="../ja/howto/htaccess.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> |\r
+<a href="../ko/howto/htaccess.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |\r
+<a href="../pt-br/howto/htaccess.html" hreflang="pt-br" rel="alternate" title="Português (Brasil)"> pt-br </a></p>\r
+</div>\r
+\r
+<p>Les fichiers <code>.htaccess</code> fournissent une méthode pour\r
+modifier la configuration du serveur au niveau de chaque répertoire.</p>\r
+</div>\r
+<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#related">Fichiers .htaccess</a></li>\r
+<li><img alt="" src="../images/down.gif" /> <a href="#what">Que sont ce fichiers, comment les utiliser ?</a></li>\r
+<li><img alt="" src="../images/down.gif" /> <a href="#when">Quand doit-on (ne doit-on pas) utiliser\r
+ les fichiers .htaccess ?</a></li>\r
+<li><img alt="" src="../images/down.gif" /> <a href="#how">Comment sont appliquées les directives ?</a></li>\r
+<li><img alt="" src="../images/down.gif" /> <a href="#auth">Exemple d'authentification</a></li>\r
+<li><img alt="" src="../images/down.gif" /> <a href="#ssi">Exemple d'Inclusion Côté Serveur (Server Side\r
+Includes - SSI)</a></li>\r
+<li><img alt="" src="../images/down.gif" /> <a href="#cgi">Exemple de CGI</a></li>\r
+<li><img alt="" src="../images/down.gif" /> <a href="#troubleshoot">Résolution des problèmes</a></li>\r
+</ul></div>\r
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="related" id="related">Fichiers .htaccess</a></h2>\r
+ <table class="related"><tr><th>Modules Apparentés</th><th>Directives Apparentées</th></tr><tr><td><ul><li><code class="module"><a href="../mod/core.html">core</a></code></li><li><code class="module"><a href="../mod/mod_authn_file.html">mod_authn_file</a></code></li><li><code class="module"><a href="../mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code></li><li><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code></li><li><code class="module"><a href="../mod/mod_include.html">mod_include</a></code></li><li><code class="module"><a href="../mod/mod_mime.html">mod_mime</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/core.html#accessfilename">AccessFileName</a></code></li><li><code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code></li><li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li><li><code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code></li><li><code class="directive"><a href="../mod/core.html#sethandler">SetHandler</a></code></li><li><code class="directive"><a href="../mod/mod_authn_core.html#authtype">AuthType</a></code></li><li><code class="directive"><a href="../mod/mod_authn_core.html#authname">AuthName</a></code></li><li><code class="directive"><a href="../mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code></li><li><code class="directive"><a href="../mod/mod_authz_groupfile.html#authgroupfile">AuthGroupFile</a></code></li><li><code class="directive"><a href="../mod/mod_authz_core.html#require">Require</a></code></li></ul></td></tr></table>\r
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="what" id="what">Que sont ce fichiers, comment les utiliser ?</a></h2>\r
+\r
+\r
+ <p>Les fichiers <code>.htaccess</code> (ou "fichiers de\r
+ configuration distribués") fournissent une méthode pour modifier la\r
+ configuration du serveur au niveau d'un répertoire. Un fichier,\r
+ contenant une ou plusieurs directives de configuration, est placé\r
+ dans un répertoire de documents particulier, et ses directives\r
+ s'appliquent à ce répertoire et à tous ses sous-répertoires.</p>\r
+\r
+ <div class="note"><h3>Note :</h3>\r
+ <p>Si vous voulez donner un autre nom à votre fichier\r
+ <code>.htaccess</code>, vous pouvez le faire en utilisant la\r
+ directive <code class="directive"><a href="../mod/core.html#accessfilename">AccessFileName</a></code>. Par\r
+ exemple, si vous préférez nommer votre fichier\r
+ <code>.config</code>, vous pouvez mettre ceci dans le fichier de\r
+ configuration de votre serveur :</p>\r
+\r
+ <div class="example"><p><code>\r
+ AccessFileName .config\r
+ </code></p></div>\r
+ </div>\r
+\r
+ <p>En général, les fichiers <code>.htaccess</code> utilisent la même\r
+ syntaxe que les <a href="../configuring.html#syntax">fichiers de\r
+ configuration principaux</a>. Ce que vous pouvez mettre dans ces\r
+ fichier est déterminé par la directive <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code>. Cette directive spécifie,\r
+ sous forme de catégories, quelles directives seront traitées si\r
+ elles se trouvent dans un fichier <code>.htaccess</code>. Si une\r
+ directive est permise dans un fichier <code>.htaccess</code> file,\r
+ la documentation de cette directive contiendra une section Override,\r
+ spécifiant quelle valeur doit prendre <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> pour que cette directive\r
+ soit traitée.</p>\r
+\r
+ <p>Par exemple, si vous regardez la documentation de la directive\r
+ <code class="directive"><a href="../mod/core.html#adddefaultcharset">AddDefaultCharset</a></code>, vous verrez\r
+ que cette dernière est permise dans les fichiers\r
+ <code>.htaccess</code> (Voir la ligne de contexte dans le résumé de\r
+ la directive). La ligne <a href="../mod/directive-dict.html#Context">Override</a> indique\r
+ <code>FileInfo</code>. Vous devez donc avoir au moins\r
+ <code>AllowOverride FileInfo</code> pour que cette directive soit\r
+ traitée dans les fichiers <code>.htaccess</code>.</p>\r
+\r
+ <div class="example"><h3>Exemple :</h3><table>\r
+ <tr>\r
+ <td><a href="../mod/directive-dict.html#Context">Contexte :</a></td>\r
+ <td>configuration du serveur, serveur virtuel, directory, .htaccess</td>\r
+ </tr>\r
+\r
+ <tr>\r
+ <td><a href="../mod/directive-dict.html#Override">Override:</a></td>\r
+ <td>FileInfo</td>\r
+ </tr>\r
+ </table></div>\r
+\r
+ <p>Si vous n'êtes pas sûr qu'une directive particulière soit permise\r
+ dans un fichier <code>.htaccess</code>, lisez la documentation de\r
+ cette directive, et consultez la ligne de contexte pour\r
+ ".htaccess".</p>\r
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="when" id="when">Quand doit-on (ne doit-on pas) utiliser\r
+ les fichiers .htaccess ?</a></h2>\r
+\r
+ <p>En principe, vous ne devriez utiliser les fichiers\r
+ <code>.htaccess</code> que si vous n'avez pas accès au fichier de\r
+ configuration du serveur principal. Par exemple, la fausse idée\r
+ selon laquelle l'authentification de l'utilisateur devrait toujours\r
+ être faite dans les fichiers <code>.htaccess</code> est très\r
+ répandue. Ceci est tout simplement faux. Vous pouvez configurer\r
+ l'authentification des utilisateurs au niveau de la configuration du\r
+ serveur principal, et c'est en fait cette méthode qui doit être\r
+ privilégiée.</p>\r
+\r
+ <p>Les fichiers <code>.htaccess</code> ne devraient être utilisés\r
+ que dans le cas où les fournisseurs de contenu ont besoin de\r
+ modifier la configuration du serveur au niveau d'un répertoire, mais\r
+ ne possèdent pas l'accès root sur le système du serveur. Si\r
+ l'administrateur du serveur ne souhaite pas effectuer des\r
+ modifications de configuration incessantes, il peut être intéressant\r
+ de permettre aux utilisateurs isolés d'effectuer eux-mêmes ces\r
+ modifications par le biais de fichiers <code>.htaccess</code>. Ceci\r
+ est particulièrement vrai dans le cas où le fournisseur d'accès à\r
+ Internet héberge de nombreux sites d'utilisateurs sur un seul\r
+ serveur, et souhaite que ces utilisateurs puissent modifier\r
+ eux-mêmes leurs configurations.</p>\r
+\r
+ <p>Cependant et d'une manière générale, il vaut mieux éviter\r
+ d'utiliser les fichiers <code>.htaccess</code>. Tout élément de\r
+ configuration que vous pourriez vouloir mettre dans un fichier\r
+ <code>.htaccess</code>, peut aussi être mis, et avec la même\r
+ efficacité, dans une section <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> du fichier de configuration de\r
+ votre serveur principal.</p>\r
+\r
+ <p>Il y a deux raisons principales d'éviter l'utilisation des\r
+ fichiers <code>.htaccess</code>.</p>\r
+\r
+ <p>La première est liée aux performances. Lorsque la directive\r
+ <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> est définie de\r
+ façon à autoriser l'utilisation des fichiers <code>.htaccess</code>,\r
+ Apache va rechercher leur présence dans chaque répertoire. Ainsi,\r
+ permettre l'utilisation des fichiers <code>.htaccess</code> est déjà\r
+ en soi une cause de dégradation des performances, que vous utilisiez\r
+ effectivement ces fichiers ou non ! De plus, le fichier\r
+ <code>.htaccess</code> est chargé en mémoire chaque fois qu'un\r
+ document fait l'objet d'une requête.</p>\r
+\r
+ <p>Notez aussi qu'Apache doit rechercher les fichiers\r
+ <code>.htaccess</code> dans tous les répertoires de niveau\r
+ supérieur, afin de rassembler toutes les directives qui s'appliquent\r
+ au répertoire courant (Voir la section <a href="#how">comment sont\r
+ appliquées les directives</a>). Ainsi, si un fichier fait l'objet\r
+ d'une requête à partir d'un répertoire\r
+ <code>/www/htdocs/exemple</code>, Apache doit rechercher les\r
+ fichiers suivants :</p>\r
+\r
+ <div class="example"><p><code>\r
+ /.htaccess<br />\r
+ /www/.htaccess<br />\r
+ /www/htdocs/.htaccess<br />\r
+ /www/htdocs/exemple/.htaccess\r
+ </code></p></div>\r
+\r
+ <p>En conséquence, chaque accès à un fichier de ce répertoire\r
+ nécessite 4 accès au système de fichiers supplémentaires pour\r
+ rechercher des fichiers <code>.htaccess</code>, même si\r
+ aucun de ces fichiers n'est présent. Notez que cet exemple ne peut\r
+ se produire que si les fichiers <code>.htaccess</code> ont été\r
+ autorisés pour le répertoire <code>/</code>, ce qui est rarement le\r
+ cas.</p>\r
+\r
+ <p>La seconde raison d'éviter l'utilisation des fichiers\r
+ <code>.htaccess</code> est liée à la sécurité. Si vous permettez aux\r
+ utilisateurs de modifier la configuration du serveur, il peut en\r
+ résulter des conséquences sur lesquelles vous n'aurez aucun\r
+ contrôle. Réfléchissez bien avant de donner ce privilège à vos\r
+ utilisateurs. Notez aussi que ne pas donner aux utilisateurs les\r
+ privilèges dont ils ont besoin va entraîner une augmentation des\r
+ demandes de support technique. Assurez-vous d'avoir informé\r
+ clairement vos utilisateurs du niveau de privilèges que vous leur\r
+ avez attribué. Indiquer exactement comment vous avez défini la\r
+ directive <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> et\r
+ diriger les utilisateurs vers la documentation correspondante vous\r
+ évitera bien des confusions ultérieures.</p>\r
+\r
+ <p>Notez que mettre un fichier <code>.htaccess</code> contenant une\r
+ directive dans un répertoire <code>/www/htdocs/exemple</code>\r
+ revient exactement au même que mettre la même directive dans une\r
+ section Directory <code><Directory /www/htdocs/exemple></code>\r
+ du fichier de configuration de votre serveur principal :</p>\r
+\r
+ <p>Fichier <code>.htaccess</code> dans\r
+ <code>/www/htdocs/exemple</code> :</p>\r
+\r
+ <div class="example"><h3>Contenu du fichier .htaccess dans\r
+ <code>/www/htdocs/exemple</code></h3><p><code>\r
+ AddType text/exemple .exm\r
+ </code></p></div>\r
+\r
+ <div class="example"><h3>Section de votre fichier\r
+ <code>httpd.conf</code></h3><p><code>\r
+ <Directory /www/htdocs/exemple><br />\r
+ <span class="indent">\r
+ AddType text/exemple .exm<br />\r
+ </span>\r
+ </Directory>\r
+ </code></p></div>\r
+\r
+ <p>Cependant, la perte de performances sera moindre si vous\r
+ définissez cette directive dans la configuration de\r
+ votre serveur principal, car cette dernière ne sera chargée qu'une\r
+ seule fois au moment du démarrage du serveur, alors qu'elle le sera\r
+ à chaque accès dans le cas d'un fichier <code>.htaccess</code>.</p>\r
+\r
+ <p>L'utilisation des fichiers <code>.htaccess</code> peut être\r
+ entièrement désactivée en définissant la directive <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> à <code>none</code> :</p>\r
+\r
+ <div class="example"><p><code>\r
+ AllowOverride None\r
+ </code></p></div>\r
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="how" id="how">Comment sont appliquées les directives ?</a></h2>\r
+\r
+ <p>Les directives de configuration situées dans un fichier\r
+ <code>.htaccess</code> s'appliquent au répertoire dans lequel ce\r
+ fichier <code>.htaccess</code> se trouve, ainsi qu'à tous ses\r
+ sous-répertoires. Cependant, il est important de garder à l'esprit\r
+ qu'il peut y avoir des fichiers <code>.htaccess</code> dans les\r
+ répertoires de niveau supérieur. Les directives sont appliquées\r
+ selon l'ordre dans lequel elles sont rencontrées. Ainsi, les\r
+ directives d'un fichier <code>.htaccess</code> situé dans un\r
+ répertoire particulier peuvent écraser les directives se trouvant\r
+ dans des fichiers <code>.htaccess</code> situés à un niveau\r
+ supérieur dans l'arborescence des répertoires. Et ces dernières\r
+ peuvent elles-mêmes avoir écrasé des directives d'un fichier\r
+ <code>.htaccess</code> situé à un niveau encore plus haut, ou dans\r
+ le fichier de configuration du serveur principal.</p>\r
+\r
+ <p>Exemple :</p>\r
+\r
+ <p>Dans le répertoire <code>/www/htdocs/exemple1</code> se trouve un\r
+ fichier <code>.htaccess</code> contenant ce qui suit :</p>\r
+\r
+ <div class="example"><p><code>\r
+ Options +ExecCGI\r
+ </code></p></div>\r
+\r
+ <p>Note : "<code>AllowOverride Options</code>" doit être présent\r
+ pour permettre l'utilisation de la directive "<code class="directive"><a href="../mod/core.html#options">Options</a></code>" dans les fichiers\r
+ <code>.htaccess</code>.</p>\r
+\r
+ <p>Dans le répertoire <code>/www/htdocs/exemple1/exemple2</code> se\r
+ trouve un fichier <code>.htaccess</code> contenant ce qui suit\r
+ :</p>\r
+\r
+ <div class="example"><p><code>\r
+ Options Includes\r
+ </code></p></div>\r
+\r
+ <p>Ainsi, à cause de ce second fichier <code>.htaccess</code> du\r
+ répertoire <code>/www/htdocs/exemple1/exemple2</code>, l'exécution\r
+ des CGI est interdite, car la dernière définition d'options\r
+ <code>Options Includes</code> écrase toute autre définition\r
+ d'options d'un fichier <code>.htaccess</code> situé dans un\r
+ répertoire de niveau supérieur.</p>\r
+\r
+ <h3><a name="merge" id="merge">Interactions entre les fichiers .htaccess\r
+ et les fichiers de configuration du serveur principal</a></h3>\r
+\r
+ <p>Comme indiqué dans la documentation sur les <a href="../sections.html">Sections de configuration</a>, les fichiers\r
+ <code>.htaccess</code> peuvent écraser les directives des sections\r
+ <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> pour\r
+ le répertoire correspondant, mais peuvent eux-mêmes être écrasés\r
+ par d'autres types de sections des fichiers de la\r
+ configuration principale. Cette possibilité peut s'avérer utile pour\r
+ forcer certaines configurations, même en cas de présence de l'option\r
+ libérale <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code>. Par\r
+ exemple, pour interdire l'exécution de scripts en autorisant la\r
+ définition de toute autre option dans les fichiers\r
+ <code>.htaccess</code>, vous pouvez utiliser :</p>\r
+\r
+ <div class="example"><p><code>\r
+<Directory /><br />\r
+<span class="indent">\r
+Allowoverride All<br />\r
+</span>\r
+</Directory><br />\r
+<br />\r
+<Location /><br />\r
+<span class="indent">\r
+Options +IncludesNoExec -ExecCGI<br />\r
+</span>\r
+</Location>\r
+ </code></p></div>\r
+\r
+\r
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="auth" id="auth">Exemple d'authentification</a></h2>\r
+\r
+ <p>Si vous accédez directement à ce point du document pour apprendre\r
+ à effectuer une authentification, il est important de noter ceci. Il\r
+ existe une fausse idée selon laquelle il serait nécessaire\r
+ d'utiliser les fichiers <code>.htaccess</code> pour implémenter\r
+ l'authentification par mot de passe. Ceci est tout simplement faux.\r
+ Pour y parvenir, il est préférable de mettre les directives\r
+ d'authentification dans une section <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> du fichier de configuration de\r
+ votre serveur principal, et les fichiers <code>.htaccess</code> ne\r
+ devraient être utilisés que dans le cas où vous n'avez pas accès au\r
+ fichier de configuration du serveur principal. Voir <a href="#when">ci-dessus</a> pour savoir dans quels cas vous devez ou\r
+ ne devez pas utiliser les fichiers <code>.htaccess</code>.</p>\r
+\r
+ <p>Ceci étant dit, si vous pensez que vous devez quand-même utiliser\r
+ un fichier <code>.htaccess</code>, vous pouvez utiliser la\r
+ configuration suivante :</p>\r
+\r
+ <p>Contenu du fichier <code>.htaccess</code> :</p>\r
+\r
+ <div class="example"><p><code>\r
+ AuthType Basic<br />\r
+ AuthName "Password Required"<br />\r
+ AuthUserFile /www/passwords/password.file<br />\r
+ AuthGroupFile /www/passwords/group.file<br />\r
+ Require Group admins\r
+ </code></p></div>\r
+\r
+ <p>Notez que <code>AllowOverride AuthConfig</code> doit être présent\r
+ pour que ces directives produisent leur effet.</p>\r
+\r
+ <p>Vous pouvez vous référer au <a href="auth.html">tutoriel sur\r
+ l'authentification</a> pour une description plus détaillée de\r
+ l'authentification et de l'autorisation.</p>\r
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="ssi" id="ssi">Exemple d'Inclusion Côté Serveur (Server Side\r
+Includes - SSI)</a></h2>\r
+\r
+ <p>Les fichiers <code>.htaccess</code> sont aussi couramment\r
+ utilisés pour activer les SSI pour un répertoire particulier. Pour y\r
+ parvenir, on utilise les directives de configuration suivantes,\r
+ placées dans un fichier <code>.htaccess</code> enregistré dans le\r
+ répertoire considéré :</p>\r
+\r
+ <div class="example"><p><code>\r
+ Options +Includes<br />\r
+ AddType text/html shtml<br />\r
+ AddHandler server-parsed shtml\r
+ </code></p></div>\r
+\r
+ <p>Notez que <code>AllowOverride Options</code> et <code>AllowOverride\r
+ FileInfo</code> doivent être tous les deux présents pour que ces\r
+ directives puissent produire leur effet.</p>\r
+\r
+ <p>Vous pouvez vous référer au <a href="ssi.html">tutoriel SSI</a>\r
+ pour une description plus détaillée des SSI.</p>\r
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="cgi" id="cgi">Exemple de CGI</a></h2>\r
+\r
+ <p>En fin de compte, vous avez décidé d'utiliser un fichier\r
+ <code>.htaccess</code> pour permettre l'exécution des programmes CGI\r
+ dans un répertoire particulier. Pour y parvenir, vous pouvez\r
+ utiliser la configuration suivante :</p>\r
+\r
+ <div class="example"><p><code>\r
+ Options +ExecCGI<br />\r
+ AddHandler cgi-script cgi pl\r
+ </code></p></div>\r
+\r
+ <p>Alternativement, si vous souhaitez que tous les fichiers d'un\r
+ répertoire donné soient considérés comme des programmes CGI, vous\r
+ pouvez utiliser la configuration suivante :</p>\r
+\r
+ <div class="example"><p><code>\r
+ Options +ExecCGI<br />\r
+ SetHandler cgi-script\r
+ </code></p></div>\r
+\r
+ <p>Notez que <code>AllowOverride Options</code> et <code>AllowOverride\r
+ FileInfo</code> doivent être tous les deux présents pour que ces\r
+ directives puissent produire leur effet.</p>\r
+\r
+ <p>Vous pouvez vous référer au <a href="cgi.html">tutoriel CGI</a>\r
+ pour une description plus détaillée de la configuration et de la\r
+ proprammation CGI.</p>\r
+\r
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="troubleshoot" id="troubleshoot">Résolution des problèmes</a></h2>\r
+\r
+ <p>De nombreuses raisons peuvent être à l'origine du fait que\r
+ les directives que vous avez mises dans un fichier\r
+ <code>.htaccess</code> ne produisent pas l'effet désiré.</p>\r
+\r
+ <p>Le plus souvent, le problème vient du fait que la définition de\r
+ la directive <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code>\r
+ ne permet pas l'activation des directives de votre fichier\r
+ <code>.htaccess</code>. Vérifiez si une directive\r
+ <code>AllowOverride None</code> n'affecte pas le répertoire où se\r
+ trouve votre fichier. Un bon test consiste à mettre des directives\r
+ dont la syntaxe est erronée dans votre ficher <code>.htaccess</code>\r
+ et de redémarrer le serveur. Si aucune erreur n'est générée par le\r
+ serveur, il est pratiquement certain qu'une directive\r
+ <code>AllowOverride None</code> affecte votre répertoire.</p>\r
+\r
+ <p>Par contre, si vous obtenez des erreurs de serveur lorsque vous\r
+ tentez d'accéder à des documents, consultez votre journal des\r
+ erreurs d'Apache. Il vous indiquera probablement que la directive\r
+ utilisée dans votre fichier <code>.htaccess</code> n'est pas\r
+ permise.</p>\r
+\r
+<div class="example"><p><code>\r
+ [Sat Aug 09 16:19:20 2008] [alert] [client 192.168.200.51] /var/www/html/.htaccess: RewriteLog not allowed here\r
+</code></p></div>\r
+ <p>Cela signifie soit que vous utilisez une directive qui n'est\r
+ jamais permise dans les fichiers <code>.htaccess</code>, soit\r
+ que vous n'avez tout simplement pas défini la directive\r
+ <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> à un niveau\r
+ suffisant pour la directive que vous utilisez. Consultez la\r
+ documentation de cette directive pour déterminer quel cas\r
+ s'applique.</p>\r
+\r
+ <p>Le journal des erreurs peut aussi vous signaler une erreur de\r
+ syntaxe dans l'usage de la directive elle-même.</p>\r
+\r
+ <div class="example"><p><code>\r
+ [Sat Aug 09 16:22:34 2008] [alert] [client 192.168.200.51] /var/www/html/.htaccess: RewriteCond: bad flag delimiters\r
+ </code></p></div>\r
+\r
+ <p>Dans ce cas, le message d'erreur sera spécifique à l'erreur\r
+ de syntaxe que vous avez commise.</p>\r
+</div></div>\r
+<div class="bottomlang">\r
+<p><span>Langues Disponibles: </span><a href="../en/howto/htaccess.html" hreflang="en" rel="alternate" title="English"> en </a> |\r
+<a href="../fr/howto/htaccess.html" title="Français"> fr </a> |\r
+<a href="../ja/howto/htaccess.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> |\r
+<a href="../ko/howto/htaccess.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |\r
+<a href="../pt-br/howto/htaccess.html" hreflang="pt-br" rel="alternate" title="Português (Brasil)"> pt-br </a></p>\r
+</div><div id="footer">\r
+<p class="apache">Copyright 2009 The Apache Software Foundation.<br />Authorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>\r
+<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p></div>\r
</body></html>
\ No newline at end of file
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Répertoires web utilisateurs - Serveur Apache HTTP</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p>
-<p class="apache">Serveur Apache HTTP Version 2.3</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Serveur HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.3</a> > <a href="./">Recettes et tutoriels</a></div><div id="page-content"><div id="preamble"><h1>Répertoires web utilisateurs</h1>
-<div class="toplang">
-<p><span>Langues Disponibles: </span><a href="../en/howto/public_html.html" hreflang="en" rel="alternate" title="English"> en </a> |
-<a href="../fr/howto/public_html.html" title="Français"> fr </a> |
-<a href="../ja/howto/public_html.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> |
-<a href="../ko/howto/public_html.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |
-<a href="../tr/howto/public_html.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>
-</div>
-
-<p>Sur les systèmes multi-utilisateurs, on peut permettre à chaque
-utilisateur d'avoir un site web dans son répertoire home à l'aide de la
-directive <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code>. Les
-visiteurs de l'URL <code>http://exemple.com/~nom_utilisateur/</code>
-recevront un contenu situé dans le répertoire home de l'utilisateur
-"<code>nom_utilisateur</code>", et dans le sous-répertoire spécifié par
-la directive <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code>.</p>
-<p>Notez que par défaut, l'accès à ces répertoires n'est
-<strong>pas</strong> permis. Vous pouvez en permettre l'accès à l'aide
-de la directive <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> en
-décommentant la ligne</p>
- <div class="example"><p><code>
- #Include conf/extra/httpd-userdir.conf
- </code></p></div>
- <p>dans le fichier de configuration par défaut, et en adaptant le
- fichier <code>httpd-userdir.conf</code> selon vos besoins, ou en
- incluant les directives appropriées dans une section
- <code>Directory</code> du fichier de configuration principal.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#related">Répertoires web utilisateurs</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#userdir">Définition du chemin des fichiers avec UserDir</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#redirect">Redirection vers des URLs externes</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#enable">Définition de la liste des utilisateurs autorisés à utiliser
- cette fonctionnalité</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cgi">Définition d'un répertoire CGI pour chaque utilisateur</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#htaccess">Permettre aux utilisateurs de modifier la
- configuration</a></li>
-</ul><h3>Voir aussi</h3><ul class="seealso"><li><a href="../urlmapping.html">Mise en correspondance des URLs
-avec le système de fichiers</a></li></ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="related" id="related">Répertoires web utilisateurs</a></h2>
-
- <table class="related"><tr><th>Modules Apparentés</th><th>Directives Apparentées</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_userdir.html">mod_userdir</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code></li><li><code class="directive"><a href="../mod/core.html#directorymatch">DirectoryMatch</a></code></li><li><code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code></li></ul></td></tr></table>
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="userdir" id="userdir">Définition du chemin des fichiers avec UserDir</a></h2>
-
-
- <p>La directive <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code>
- permet de spécifier un répertoire à partir duquel le contenu de
- l'utilisateur pourra être chargé. Elle peut revêtir plusieurs
- formes.</p>
-
- <p>Si le chemin spécifié ne commence pas par un slash, il sera
- interprété comme chemin relatif au répertoire home de l'utilisateur
- considéré. Par exemple, avec cette configuration :</p>
-
- <div class="example"><p><code>
- UserDir public_html
- </code></p></div>
-
- <p>l'URL <code>http://exemple.com/~rbowen/fichier.html</code>
- correspondra au chemin fichier
- <code>/home/rbowen/public_html/fichier.html</code></p>
-
- <p>Si le chemin spécifié commence par un slash, le chemin du fichier
- sera construit en utilisant ce chemin, suivi du nom de l'utilisateur
- considéré. Par exemple, avec cette configuration :</p>
-
- <div class="example"><p><code>
- UserDir /var/html
- </code></p></div>
-
- <p>l'URL <code>http://exemple.com/~rbowen/fichier.html</code>
- correspondra au chemin fichier
- <code>/var/html/rbowen/fichier.html</code></p>
-
- <p>Si le chemin spécifié contient un astérisque (*), ce dernier sera
- remplacé par le nom de l'utilisateur dans le chemin du fichier
- correspondant. Par exemple, avec cette configuration :</p>
-
- <div class="example"><p><code>
- UserDir /var/www/*/docs
- </code></p></div>
-
- <p>l'URL <code>http://exemple.com/~rbowen/fichier.html</code>
- correspondra au chemin fichier
- <code>/var/www/rbowen/docs/fichier.html</code></p>
-
- <p>On peut aussi définir plusieurs répertoires ou chemins de
- répertoires.</p>
-
- <div class="example"><p><code>
- UserDir public_html /var/html
- </code></p></div>
-
- <p>Avec l'URL <code>http://exemple.com/~rbowen/fichier.html</code>,
- Apache va rechercher <code>~rbowen</code>. S'il ne le trouve pas,
- Apache va rechercher <code>rbowen</code> dans
- <code>/var/html</code>. S'il le trouve, l'URL ci-dessus correspondra
- au chemin fichier <code>/var/html/rbowen/file.html</code></p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="redirect" id="redirect">Redirection vers des URLs externes</a></h2>
-
- <p>On peut utiliser la directive <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> pour rediriger les requêtes
- relatives aux répertoires utilisateurs vers des URLs externes.</p>
-
- <div class="example"><p><code>
- UserDir http://exemple.org/users/*/
- </code></p></div>
-
- <p>L'exemple ci-dessus va rediriger une requête pour
- <code>http://exemple.com/~bob/abc.html</code> vers
- <code>http://exemple.org/users/bob/abc.html</code>.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="enable" id="enable">Définition de la liste des utilisateurs autorisés à utiliser
- cette fonctionnalité</a></h2>
-
-
- <p>En suivant la syntaxe décrite dans la documentation de UserDir,
- vous pouvez définir quels utilisateurs sont autorisés à utiliser
- cette fonctionnalité :</p>
-
- <div class="example"><p><code>
- UserDir enabled<br />
- UserDir disabled root jro fish
- </code></p></div>
-
- <p>La configuration ci-dessus va autoriser l'utilisation de la
- fonctionnalité pour tous les utilisateurs, à l'exception de ceux
- listés à la suite de l'argument <code>disabled</code>. De même, vous
- pouvez interdire l'utilisation de la fonctionnalité à tous les
- utilisateurs sauf certains d'entre eux en utilisant une
- configuration du style :</p>
-
- <div class="example"><p><code>
- UserDir disabled<br />
- UserDir enabled rbowen krietz
- </code></p></div>
-
- <p>Vous trouverez d'autres exemples dans la documentation de
- <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code>.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="cgi" id="cgi">Définition d'un répertoire CGI pour chaque utilisateur</a></h2>
-
-
- <p>Afin de réserver un répertoire cgi-bin pour chaque utilisateur,
- vous pouvez utiliser une section <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> pour activer CGI dans un
- sous-répertoire particulier d'un répertoire home utilisateur.</p>
-
- <div class="example"><p><code>
- <Directory /home/*/public_html/cgi-bin/><br />
- Options ExecCGI<br />
- SetHandler cgi-script<br />
- </Directory>
- </code></p></div>
-
- <p>Avec la configuration ci-dessus, et en supposant que
- <code>UserDir</code> est défini à <code>public_html</code>, un
- programme CGI <code>exemple.cgi</code> pourra être chargé depuis ce
- répertoire en passant par l'URL :</p>
-
- <div class="example"><p><code>
- http://exemple.com/~rbowen/cgi-bin/exemple.cgi
- </code></p></div>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="htaccess" id="htaccess">Permettre aux utilisateurs de modifier la
- configuration</a></h2>
-
-
- <p>Si vous voulez que vos utilisateurs puissent modifier la
- configuration du serveur pour ce qui concerne leur espace web, ils
- devront utiliser des fichiers <code>.htaccess</code> pour effectuer
- ces modifications. Assurez-vous d'avoir défini la directive
- <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> à une valeur
- appropriée pour les directives dont vous voulez permettre la
- modification aux utilisateurs. Voir le <a href="htaccess.html">tutoriel .htaccess</a> pour plus de détails sur
- la manière dont tout ceci fonctionne.</p>
-
- </div></div>
-<div class="bottomlang">
-<p><span>Langues Disponibles: </span><a href="../en/howto/public_html.html" hreflang="en" rel="alternate" title="English"> en </a> |
-<a href="../fr/howto/public_html.html" title="Français"> fr </a> |
-<a href="../ja/howto/public_html.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> |
-<a href="../ko/howto/public_html.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |
-<a href="../tr/howto/public_html.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>
-</div><div id="footer">
-<p class="apache">Copyright 2009 The Apache Software Foundation.<br />Authorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p></div>
+<?xml version="1.0" encoding="ISO-8859-1"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head><!--\r
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r
+ This file is generated from xml source: DO NOT EDIT\r
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r
+ -->\r
+<title>Répertoires web utilisateurs - Serveur Apache HTTP</title>\r
+<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />\r
+<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />\r
+<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />\r
+<link href="../images/favicon.ico" rel="shortcut icon" /></head>\r
+<body id="manual-page"><div id="page-header">\r
+<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p>\r
+<p class="apache">Serveur Apache HTTP Version 2.3</p>\r
+<img alt="" src="../images/feather.gif" /></div>\r
+<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div>\r
+<div id="path">\r
+<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Serveur HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.3</a> > <a href="./">Recettes et tutoriels</a></div><div id="page-content"><div id="preamble"><h1>Répertoires web utilisateurs</h1>\r
+<div class="toplang">\r
+<p><span>Langues Disponibles: </span><a href="../en/howto/public_html.html" hreflang="en" rel="alternate" title="English"> en </a> |\r
+<a href="../fr/howto/public_html.html" title="Français"> fr </a> |\r
+<a href="../ja/howto/public_html.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> |\r
+<a href="../ko/howto/public_html.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |\r
+<a href="../tr/howto/public_html.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>\r
+</div>\r
+\r
+<p>Sur les systèmes multi-utilisateurs, on peut permettre à chaque\r
+utilisateur d'avoir un site web dans son répertoire home à l'aide de la\r
+directive <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code>. Les\r
+visiteurs de l'URL <code>http://exemple.com/~nom_utilisateur/</code>\r
+recevront un contenu situé dans le répertoire home de l'utilisateur\r
+"<code>nom_utilisateur</code>", et dans le sous-répertoire spécifié par\r
+la directive <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code>.</p>\r
+<p>Notez que par défaut, l'accès à ces répertoires n'est\r
+<strong>pas</strong> permis. Vous pouvez en permettre l'accès à l'aide\r
+de la directive <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> en\r
+décommentant la ligne</p>\r
+ <div class="example"><p><code>\r
+ #Include conf/extra/httpd-userdir.conf\r
+ </code></p></div>\r
+ <p>dans le fichier de configuration par défaut, et en adaptant le\r
+ fichier <code>httpd-userdir.conf</code> selon vos besoins, ou en\r
+ incluant les directives appropriées dans une section\r
+ <code>Directory</code> du fichier de configuration principal.</p>\r
+</div>\r
+<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#related">Répertoires web utilisateurs</a></li>\r
+<li><img alt="" src="../images/down.gif" /> <a href="#userdir">Définition du chemin des fichiers avec UserDir</a></li>\r
+<li><img alt="" src="../images/down.gif" /> <a href="#redirect">Redirection vers des URLs externes</a></li>\r
+<li><img alt="" src="../images/down.gif" /> <a href="#enable">Définition de la liste des utilisateurs autorisés à utiliser\r
+ cette fonctionnalité</a></li>\r
+<li><img alt="" src="../images/down.gif" /> <a href="#cgi">Définition d'un répertoire CGI pour chaque utilisateur</a></li>\r
+<li><img alt="" src="../images/down.gif" /> <a href="#htaccess">Permettre aux utilisateurs de modifier la\r
+ configuration</a></li>\r
+</ul><h3>Voir aussi</h3><ul class="seealso"><li><a href="../urlmapping.html">Mise en correspondance des URLs\r
+avec le système de fichiers</a></li></ul></div>\r
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="related" id="related">Répertoires web utilisateurs</a></h2>\r
+ \r
+ <table class="related"><tr><th>Modules Apparentés</th><th>Directives Apparentées</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_userdir.html">mod_userdir</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code></li><li><code class="directive"><a href="../mod/core.html#directorymatch">DirectoryMatch</a></code></li><li><code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code></li></ul></td></tr></table>\r
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="userdir" id="userdir">Définition du chemin des fichiers avec UserDir</a></h2>\r
+ \r
+\r
+ <p>La directive <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code>\r
+ permet de spécifier un répertoire à partir duquel le contenu de\r
+ l'utilisateur pourra être chargé. Elle peut revêtir plusieurs\r
+ formes.</p>\r
+\r
+ <p>Si le chemin spécifié ne commence pas par un slash, il sera\r
+ interprété comme chemin relatif au répertoire home de l'utilisateur\r
+ considéré. Par exemple, avec cette configuration :</p>\r
+\r
+ <div class="example"><p><code>\r
+ UserDir public_html\r
+ </code></p></div>\r
+\r
+ <p>l'URL <code>http://exemple.com/~rbowen/fichier.html</code>\r
+ correspondra au chemin fichier\r
+ <code>/home/rbowen/public_html/fichier.html</code></p>\r
+\r
+ <p>Si le chemin spécifié commence par un slash, le chemin du fichier\r
+ sera construit en utilisant ce chemin, suivi du nom de l'utilisateur\r
+ considéré. Par exemple, avec cette configuration :</p>\r
+\r
+ <div class="example"><p><code>\r
+ UserDir /var/html\r
+ </code></p></div>\r
+\r
+ <p>l'URL <code>http://exemple.com/~rbowen/fichier.html</code>\r
+ correspondra au chemin fichier\r
+ <code>/var/html/rbowen/fichier.html</code></p>\r
+\r
+ <p>Si le chemin spécifié contient un astérisque (*), ce dernier sera\r
+ remplacé par le nom de l'utilisateur dans le chemin du fichier\r
+ correspondant. Par exemple, avec cette configuration :</p>\r
+\r
+ <div class="example"><p><code>\r
+ UserDir /var/www/*/docs\r
+ </code></p></div>\r
+\r
+ <p>l'URL <code>http://exemple.com/~rbowen/fichier.html</code>\r
+ correspondra au chemin fichier\r
+ <code>/var/www/rbowen/docs/fichier.html</code></p>\r
+\r
+ <p>On peut aussi définir plusieurs répertoires ou chemins de\r
+ répertoires.</p>\r
+\r
+ <div class="example"><p><code>\r
+ UserDir public_html /var/html\r
+ </code></p></div>\r
+\r
+ <p>Avec l'URL <code>http://exemple.com/~rbowen/fichier.html</code>,\r
+ Apache va rechercher <code>~rbowen</code>. S'il ne le trouve pas,\r
+ Apache va rechercher <code>rbowen</code> dans\r
+ <code>/var/html</code>. S'il le trouve, l'URL ci-dessus correspondra\r
+ au chemin fichier <code>/var/html/rbowen/file.html</code></p>\r
+\r
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="redirect" id="redirect">Redirection vers des URLs externes</a></h2>\r
+ \r
+ <p>On peut utiliser la directive <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> pour rediriger les requêtes\r
+ relatives aux répertoires utilisateurs vers des URLs externes.</p>\r
+\r
+ <div class="example"><p><code>\r
+ UserDir http://exemple.org/users/*/\r
+ </code></p></div>\r
+\r
+ <p>L'exemple ci-dessus va rediriger une requête pour\r
+ <code>http://exemple.com/~bob/abc.html</code> vers\r
+ <code>http://exemple.org/users/bob/abc.html</code>.</p>\r
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="enable" id="enable">Définition de la liste des utilisateurs autorisés à utiliser\r
+ cette fonctionnalité</a></h2>\r
+ \r
+\r
+ <p>En suivant la syntaxe décrite dans la documentation de UserDir,\r
+ vous pouvez définir quels utilisateurs sont autorisés à utiliser\r
+ cette fonctionnalité :</p>\r
+\r
+ <div class="example"><p><code>\r
+ UserDir enabled<br />\r
+ UserDir disabled root jro fish\r
+ </code></p></div>\r
+\r
+ <p>La configuration ci-dessus va autoriser l'utilisation de la\r
+ fonctionnalité pour tous les utilisateurs, à l'exception de ceux\r
+ listés à la suite de l'argument <code>disabled</code>. De même, vous\r
+ pouvez interdire l'utilisation de la fonctionnalité à tous les\r
+ utilisateurs sauf certains d'entre eux en utilisant une\r
+ configuration du style :</p>\r
+\r
+ <div class="example"><p><code>\r
+ UserDir disabled<br />\r
+ UserDir enabled rbowen krietz\r
+ </code></p></div>\r
+\r
+ <p>Vous trouverez d'autres exemples dans la documentation de\r
+ <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code>.</p>\r
+\r
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="cgi" id="cgi">Définition d'un répertoire CGI pour chaque utilisateur</a></h2>\r
+ \r
+\r
+ <p>Afin de réserver un répertoire cgi-bin pour chaque utilisateur,\r
+ vous pouvez utiliser une section <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> pour activer CGI dans un\r
+ sous-répertoire particulier d'un répertoire home utilisateur.</p>\r
+\r
+ <div class="example"><p><code>\r
+ <Directory /home/*/public_html/cgi-bin/><br />\r
+ Options ExecCGI<br />\r
+ SetHandler cgi-script<br />\r
+ </Directory>\r
+ </code></p></div>\r
+\r
+ <p>Avec la configuration ci-dessus, et en supposant que\r
+ <code>UserDir</code> est défini à <code>public_html</code>, un\r
+ programme CGI <code>exemple.cgi</code> pourra être chargé depuis ce\r
+ répertoire en passant par l'URL :</p>\r
+\r
+ <div class="example"><p><code>\r
+ http://exemple.com/~rbowen/cgi-bin/exemple.cgi\r
+ </code></p></div>\r
+\r
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="htaccess" id="htaccess">Permettre aux utilisateurs de modifier la\r
+ configuration</a></h2>\r
+ \r
+\r
+ <p>Si vous voulez que vos utilisateurs puissent modifier la\r
+ configuration du serveur pour ce qui concerne leur espace web, ils\r
+ devront utiliser des fichiers <code>.htaccess</code> pour effectuer\r
+ ces modifications. Assurez-vous d'avoir défini la directive\r
+ <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> à une valeur\r
+ appropriée pour les directives dont vous voulez permettre la\r
+ modification aux utilisateurs. Voir le <a href="htaccess.html">tutoriel .htaccess</a> pour plus de détails sur\r
+ la manière dont tout ceci fonctionne.</p>\r
+\r
+ </div></div>\r
+<div class="bottomlang">\r
+<p><span>Langues Disponibles: </span><a href="../en/howto/public_html.html" hreflang="en" rel="alternate" title="English"> en </a> |\r
+<a href="../fr/howto/public_html.html" title="Français"> fr </a> |\r
+<a href="../ja/howto/public_html.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> |\r
+<a href="../ko/howto/public_html.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |\r
+<a href="../tr/howto/public_html.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>\r
+</div><div id="footer">\r
+<p class="apache">Copyright 2009 The Apache Software Foundation.<br />Authorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>\r
+<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p></div>\r
</body></html>
\ No newline at end of file
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Tutoriel Apache : Introduction aux "Inclusions Côté Serveur"
-(Server Side Includes - SSI) - Serveur Apache HTTP</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p>
-<p class="apache">Serveur Apache HTTP Version 2.3</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Serveur HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.3</a> > <a href="./">Recettes et tutoriels</a></div><div id="page-content"><div id="preamble"><h1>Tutoriel Apache : Introduction aux "Inclusions Côté Serveur"
-(Server Side Includes - SSI)</h1>
-<div class="toplang">
-<p><span>Langues Disponibles: </span><a href="../en/howto/ssi.html" hreflang="en" rel="alternate" title="English"> en </a> |
-<a href="../fr/howto/ssi.html" title="Français"> fr </a> |
-<a href="../ja/howto/ssi.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> |
-<a href="../ko/howto/ssi.html" hreflang="ko" rel="alternate" title="Korean"> ko </a></p>
-</div>
-
-<p>Les SSI permettent d'ajouter du contenu dynamique à des documents
-HTML préexistants.</p>
-</div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#related">Introduction</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#what">Qu'est-ce que SSI ?</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#configuring">Configurer votre serveur pour permettre les SSI</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#basic">Directives SSI de base</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#additionalexamples">Exemples additionnels</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#config">Que puis-je configurer d'autre ?</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#exec">Exécution de commandes</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#advanced">Techniques SSI avancées</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#conclusion">Conclusion</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="related" id="related">Introduction</a></h2>
- <table class="related"><tr><th>Modules Apparentés</th><th>Directives Apparentées</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_include.html">mod_include</a></code></li><li><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code></li><li><code class="module"><a href="../mod/mod_expires.html">mod_expires</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li><li><code class="directive"><a href="../mod/mod_include.html#xbithack">XBitHack</a></code></li><li><code class="directive"><a href="../mod/mod_mime.html#addtype">AddType</a></code></li><li><code class="directive"><a href="../mod/core.html#setoutputfilter">SetOutputFilter</a></code></li><li><code class="directive"><a href="../mod/mod_setenvif.html#browsermatchnocase">BrowserMatchNoCase</a></code></li></ul></td></tr></table>
-
- <p>Cet article traite des Inclusions Côté Serveur (Server Side
- Includes), plus communément appelés SSI. Vous trouverez ici la
- manière de configurer votre serveur pour permettre les SSI, ainsi
- qu'une introduction à quelques techniques SSI de base permettant
- d'ajouter du contenu dynamique à vos pages HTML préexistantes.</p>
-
- <p>La dernière partie de cet article sera consacrée aux
- configurations SSI plus avancées, telles que les expressions
- conditionnelles dans les directives SSI.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="what" id="what">Qu'est-ce que SSI ?</a></h2>
-
- <p>SSI (Server Side Includes) est constitué de directives placées dans
- des pages HTML, et évaluées par le serveur au moment où les pages
- sont servies. Elles vous permettent d'ajouter du contenu généré
- dynamiquement à une page HTML préexistante, sans avoir à servir la
- page entière via un programme CGI, ou toute autre technologie de
- contenu dynamique.</p>
-
- <p>Le choix entre l'utilisation des SSI et la génération entière de
- la page par un programme quelconque, est en général dicté par la
- proportion de contenu statique et de contenu devant être généré
- chaque fois que la page est servie. SSI est idéal pour ajouter de
- petites quantités d'information, comme l'heure courante. Mais si la
- plus grande partie de votre page est générée au moment où elle est
- servie, vous devez vous tourner vers une autre solution.</p>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="configuring" id="configuring">Configurer votre serveur pour permettre les SSI</a></h2>
-
-
- <p>Pour permettre l'utilisation des SSI sur votre serveur, vous
- devez ajouter la directive suivante dans votre fichier
- <code>httpd.conf</code>, ou dans un fichier <code>.htaccess</code>
- :</p>
-<div class="example"><p><code>
- Options +Includes
-</code></p></div>
-
- <p>Cette directive indique à Apache que vous désirez permettre la
- recherche de directives SSI lors de l'interprétation des fichiers.
- Notez cependant que la plupart des configurations contiennent de
- nombreuses directives <code class="directive"><a href="../mod/core.html#options">Options</a></code>
- qui peuvent s'écraser les unes les autres. Vous devrez probablement
- appliquer ces directives <code>Options</code> au répertoire
- spécifique pour lequel vous voulez activer les SSI, afin d'être sûr
- qu'elles y seront bien activées.</p>
-
- <p>Tout fichier ne fera cependant pas l'objet de recherche de
- directives SSI. Vous devez indiquer à Apache quels fichiers seront
- concernés. Vous pouvez y parvenir en indiquant une extension, comme
- <code>.shtml</code>, à l'aide des directives suivantes :</p>
-<div class="example"><p><code>
- AddType text/html .shtml<br />
- AddOutputFilter INCLUDES .shtml
-</code></p></div>
-
- <p>Un des désavantages de cette approche réside dans le fait que si
- vous voulez ajouter des directives SSI à une page préexistante, vous
- devrez changer le nom de cette page, et donc tout lien qui la
- contient, de façon à ce qu'elle possède l'extension
- <code>.shtml</code>, condition nécessaire pour que les directives
- SSI qu'elle contient soient traitées.</p>
-
- <p>Une autre méthode consiste à utiliser la directive <code class="directive"><a href="../mod/mod_include.html#xbithack">XBitHack</a></code> :</p>
-<div class="example"><p><code>
- XBitHack on
-</code></p></div>
-
- <p>La directive <code class="directive"><a href="../mod/mod_include.html#xbithack">XBitHack</a></code>
- indique à Apache qu'il doit rechercher des directivves SSI dans les
- fichiers si leur bit d'exécution est positionné. Il n'est ainsi plus
- nécessaire de changer le nom du fichier pour ajouter des directives
- SSI à une page préexistante ; vous devez simplement attribuer les
- droits d'exécution au fichier à l'aide de <code>chmod</code>.</p>
-<div class="example"><p><code>
- chmod +x pagename.html
-</code></p></div>
-
- <p>Un bref commentaire sur ce qu'il ne faut pas faire. Certaines
- personnes peuvent vous conseiller de tout simplement indiquer à
- Apache de rechercher des directives SSI dans tous les fichiers
- <code>.html</code>, ce qui vous évite d'avoir à gérer les noms de
- fichiers avec extension <code>.shtml</code>. Ils n'ont probablement
- pas entendu parler de la directive <code class="directive"><a href="../mod/mod_include.html#xbithack">XBitHack</a></code>. En effet, vous devez
- garder à l'esprit qu'en faisant ceci, Apache va devoir rechercher
- des directives SSI dans chaque fichier qu'il sert, même s'il n'en
- contient aucune. Ce n'est donc pas une bonne idée car les
- performances peuvent en être sensiblement affectées.</p>
-
- <p>Bien entendu, sous Windows, il n'y a pas de bit d'exécution à
- positionner, ce qui limite un peu vos choix.</p>
-
- <p>Dans sa configuration par défaut, Apache n'envoie pas la date de
- dernière modification ou les en-têtes HTTP relatifs à la taille des
- contenus dans les pages SSI, car ses valeurs sont difficiles à
- calculer pour les contenus dynamiques. Ceci peut induire une
- impression de diminution des performances côté client, en empêchant
- la mise en cache de votre document. Il existe deux méthodes pour
- résoudre ce problème :</p>
-
- <ol>
- <li>Utilisez la configuration <code>XBitHack Full</code>. Elle
- indique à Apache de déterminer la date de dernière modification en
- ne regardant que la date du fichier à l'origine de la requête,
- tout en ignorant la date de modification de tout fichier inclus.</li>
-
- <li>Utilisez les directives fournies par le module
- <code class="module"><a href="../mod/mod_expires.html">mod_expires</a></code> pour définir de manière explicite la
- date d'expiration de vos fichiers, laissant par la-même
- aux navigateurs et aux mandataires le soin de déterminer s'il est
- opportun ou non de les mettre en cache.</li>
- </ol>
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="basic" id="basic">Directives SSI de base</a></h2>
-
- <p>Les directives SSI adoptent la syntaxe suivante :</p>
-<div class="example"><p><code>
- <!--#élément attribut=valeur attribut=valeur ... -->
-</code></p></div>
-
- <p>Le format d'une directive SSI étant similaire à celui d'un
- commentaire HTML, si vous n'avez pas activé correctement SSI, le
- navigateur l'ignorera, mais elle sera encore visible dans le source
- HTML. Si SSI est correctement configuré, la directive sera remplacée
- par ses résultats.</p>
-
- <p>"élément" peut prendre de nombreuses formes, et nous décrirons
- plus précisément la plupart d'entre eux dans la prochaine version de
- ce document. Pour le moment, voici quelques exemples de ce que vous
- pouvez faire avec SSI.</p>
-
-<h3><a name="todaysdate" id="todaysdate">La date courante</a></h3>
-
-<div class="example"><p><code>
- <!--#echo var="DATE_LOCAL" -->
-</code></p></div>
-
- <p>L'élément <code>echo</code> permet d'afficher la valeur d'une
- variable. Il existe un grand nombre de variables standards, y
- compris l'ensemble des variables d'environnement disponibles pour
- les programmes CGI. De plus, vous pouvez définir vos propres
- variables à l'aide de l'élément <code>set</code>.</p>
-
- <p>Si vous n'aimez pas le format sous lequel la date s'affiche, vous
- pouvez utiliser l'élément <code>config</code> avec un attribut
- <code>timefmt</code>, pour le modifier.</p>
-
-<div class="example"><p><code>
- <!--#config timefmt="%A %B %d, %Y" --><br />
- Today is <!--#echo var="DATE_LOCAL" -->
-</code></p></div>
-
-
-<h3><a name="lastmodified" id="lastmodified">Date de modification du fichier</a></h3>
-
-<div class="example"><p><code>
- Dernière modification du document <!--#flastmod file="index.html" -->
-</code></p></div>
-
- <p>Le format peut là aussi être modifié à l'aide de l'attribut
- <code>timefmt</code>.</p>
-
-
-<h3><a name="cgi" id="cgi">Inclusion des résultats d'un programme CGI</a></h3>
-
- <p>C'est le cas le plus courant d'utilisation des SSI - afficher les
- résultats d'un programme CGI, comme l'universellement adoré
- "compteur d'accès".</p>
-
-<div class="example"><p><code>
- <!--#include virtual="/cgi-bin/counter.pl" -->
-</code></p></div>
-
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="additionalexamples" id="additionalexamples">Exemples additionnels</a></h2>
-
-
- <p>Vous trouverez dans ce qui suit quelques exemples spécifiques de
- ce que vous pouvez faire de vos documents HTML avec SSI.</p>
-
-<h3><a name="docmodified" id="docmodified">Quand ce document a-t-il été modifié ?</a></h3>
-
- <p>Nous avons mentionné plus haut que vous pouviez utiliser SSI pour
- informer l'utilisateur de la date de dernière modification du
- document. Cependant, la méthode pour y parvenir n'a pas été vraiment
- abordée. Placé dans votre document HTML, le code suivant va insérer
- un repère de temps dans votre page. Bien entendu, SSI devra avoir
- été correctement activé, comme décrit plus haut.</p>
-<div class="example"><p><code>
- <!--#config timefmt="%A %B %d, %Y" --><br />
- Dernière modification du fichier <!--#flastmod file="ssi.shtml" -->
-</code></p></div>
-
- <p>Bien entendu, vous devez remplacer <code>ssi.shtml</code> par le
- nom du fichier auquel vous faites référence. Ceci ne conviendra pas
- si vous recherchez un morceau de code générique que vous pourrez
- insérer dans tout fichier ; dans ce cas, il est préférable
- d'utiliser la variable <code>LAST_MODIFIED</code> :</p>
-<div class="example"><p><code>
- <!--#config timefmt="%D" --><br />
- This file last modified <!--#echo var="LAST_MODIFIED" -->
-</code></p></div>
-
- <p>Pour plus de détails sur le format <code>timefmt</code>, tapez
- <code>strftime</code> dans votre moteur de recherche préferé. La
- syntaxe est identique.</p>
-
-
-<h3><a name="standard-footer" id="standard-footer">Inclusion d'un pied de page standard</a></h3>
-
-
- <p>Si le site que vous gérez comporte plus que quelques pages, vous
- allez vite vous apercevoir qu'effectuer des modifications sur toutes
- ces pages peut devenir très contraignant, en particulier si vous
- voulez qu'elles conservent un aspect homogène.</p>
-
- <p>Inclure un fichier pour un en-tête et/ou un pied de page peut
- simplifier cette corvée de mises à jour. Il vous suffit de
- confectionner un fichier de pied de page, et de l'inclure dans
- chaque page à l'aide de l'élément SSI <code>include</code>. Pour
- définir le fichier à inclure, l'élément <code>include</code> peut
- utiliser soit l'attribut <code>file</code>, soit l'attribut
- <code>virtual</code>. L'attribut <code>file</code> est un chemin de
- fichier <em>relatif au répertoire courant</em>. C'est à dire qu'il
- ne peut ni avoir pour valeur un chemin absolu (commençant par /), ni
- comporter "../" dans son chemin. L'attribut <code>virtual</code> est
- probablement plus commode, et peut spécifier une URL relative au
- document servi. Elle peut commencer par un /, mais le fichier inclus
- et le fichier servi doivent résider sur le même serveur.</p>
-<div class="example"><p><code>
- <!--#include virtual="/footer.html" -->
-</code></p></div>
-
- <p>Je combinerai souvent ces deux derniers points, en ajoutant une
- directive <code>LAST_MODIFIED</code> dans un fichier de pied de page
- destiné à être inclus. Le fichier inclus peut contenir des
- directives SSI, et les inclusions peuvent être imbriquées - à
- savoir, le fichier inclus peut inclure un autre fichier, etc...</p>
-
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="config" id="config">Que puis-je configurer d'autre ?</a></h2>
-
-
- <p>En plus du format de date, vous pouvez utiliser l'élément
- <code>config</code> pour configurer deux autres choses.</p>
-
- <p>En général, lorsque quelque chose se passe mal avec votre
- directive SSI, vous recevez le message :</p>
-<div class="example"><p><code>
- [an error occurred while processing this directive]
-</code></p></div>
-
- <p>Pour modifier ce message, vous pouvez utiliser l'attribut
- <code>errmsg</code> avec l'élément <code>config</code> :</p>
-<div class="example"><p><code>
- <!--#config errmsg="[Il semblerait que vous ne sachiez pas
- utiliser les SSI]" -->
-</code></p></div>
-
- <p>Il est cependant probable que les utilisateurs finaux ne voient
- jamais ce message, car vous aurez résolu tous les problèmes issus de
- vos directives SSI avant que votre site ne soit mis en production.
- (N'est-ce pas ?)</p>
-
- <p>Vous pouvez aussi modifier le format sous lequel les tailles de
- fichiers sont affichées à l'aide de l'attribut <code>sizefmt</code>.
- Vous pouvez spécifier <code>bytes</code> pour un affichage en
- octets, ou <code>abbrev</code> pour un affichage plus concis en Ko
- ou Mo, selon le cas.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="exec" id="exec">Exécution de commandes</a></h2>
-
-
- <p>J'ai pour projet, dans les prochains mois, d'écrire un article à
- propos de l'utilisation des SSI avec des petits programmes CGI. Pour
- l'instant, voici ce que vous pouvez faire avec l'élément
- <code>exec</code>. Vous pouvez vraiment faire exécuter une commande
- par SSI en utilisant le shell (<code>/bin/sh</code>, pour être plus
- précis - ou le shell DOS, si vous êtes sous Win32). Par exemple, ce
- qui suit vous permet d'afficher le contenu d'un répertoire.</p>
-<div class="example"><p><code>
- <pre><br />
- <!--#exec cmd="ls" --><br />
- </pre>
-</code></p></div>
-
- <p>ou, sous Windows</p>
-<div class="example"><p><code>
- <pre><br />
- <!--#exec cmd="dir" --><br />
- </pre>
-</code></p></div>
-
- <p>Vous noterez probablement l'étrange formatage provoqué par cette
- directive sous Windows, car la sortie de <code>dir</code> contient
- la chaîne de caractères "<<code>dir</code>>", ce qui trompe le
- navigateur.</p>
-
- <p>Notez que cette fonctionnalité est très dangereuse, car elle va
- permettre d'exécuter tout code associé à l'élément
- <code>exec</code>. Si vous êtes dans la situation où les
- utilisateurs peuvent éditer le contenu de vos pages web, dans le cas
- d'un "livre d'or" par exemple, assurez-vous de désactiver cette
- fonctionnalité. Vous pouvez, tout en permettant les SSI, désactiver
- la fonctionnalité <code>exec</code> à l'aide de l'argument
- <code>IncludesNOEXEC</code> de la directive
- <code>Options</code>.</p>
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="advanced" id="advanced">Techniques SSI avancées</a></h2>
-
-
- <p>Outre l'affichage de contenu, les SSI d'Apache vous permettent de
- définir des variables, et de les utiliser dans des comparaisons et
- des conditions.</p>
-
-<h3><a name="caveat" id="caveat">Mise en garde</a></h3>
-
- <p>La plupart des fonctionnalités décrites dans cet article ne sont
- disponibles que si vous utilisez la version 1.2 ou supérieure
- d'Apache. Bien entendu, si ce n'est pas le cas, vous devez faire une
- mise à jour immédiatement, et même plus tôt. Allez-y. Faites-le
- maintenant. Nous attendrons.</p>
-
-
-<h3><a name="variables" id="variables">Définition de variables</a></h3>
-
- <p>Avec l'élément <code>set</code>, vous pouvez définir des
- variables pour un usage ultérieur. Comme nous en aurons besoin plus
- loin, nous allons en parler tout de suite. La syntaxe se présente
- comme suit :</p>
-<div class="example"><p><code>
- <!--#set var="name" value="Rich" -->
-</code></p></div>
-
- <p>Pour affecter une valeur à vos variables, en plus de la
- définition littérale de l'exemple ci-dessus, vous pouvez utiliser
- une autre variable, y compris les <a href="../env.html">variables d'environnement</a>, ou les variables
- décrites plus haut (comme <code>LAST_MODIFIED</code> par exemple).
- Pour indiquer qu'il s'agit d'une variable et non d'une chaîne, vous
- devez utiliser le symbole dollar ($) devant le nom de la
- variable.</p>
-
- <div class="example"><p><code> <!--#set var="modified" value="$LAST_MODIFIED" -->
- </code></p></div>
-
- <p>Pour insérer un caractère $ dans la valeur de votre variable,
- vous devez l'échapper à l'aide d'un backslash.</p>
-<div class="example"><p><code>
- <!--#set var="cost" value="\$100" -->
-</code></p></div>
-
- <p>Enfin, si vous voulez insérer une variable dans une chaîne, et
- s'il y a une chance pour que le nom de la variable se confonde avec
- le reste de la chaîne, vous pouvez l'entourer d'accolades pour
- eviter toute confusion (Il est difficile de trouver un bon exemple
- pour illustrer ceci, mais j'espère que vous comprendrez).</p>
-<div class="example"><p><code>
- <!--#set var="date" value="${DATE_LOCAL}_${DATE_GMT}" -->
-</code></p></div>
-
-
-<h3><a name="conditional" id="conditional">Expressions conditionnelles</a></h3>
-
-
- <p>Maintenent que nous avons des variables, et que nous pouvons
- définir et comparer leurs valeurs, nous sommes à même de les
- utiliser dans des expressions conditionnelles. Ceci confère à SSI le
- statut de petit langage de programmation.
- <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> fournit une structure <code>if</code>,
- <code>elif</code>, <code>else</code>, <code>endif</code> pour la
- construction d'expressions conditionnelles, ce qui vous permet de
- générer plusieurs pages logiques à partir d'une seule vraie
- page.</p>
-
- <p>La structure de l'expression conditionnelle est :</p>
-<div class="example"><p><code>
- <!--#if expr="condition" --><br />
- <!--#elif expr="condition" --><br />
- <!--#else --><br />
- <!--#endif -->
-</code></p></div>
-
- <p>Une <em>condition</em> peut revêtir la forme de toute comparaison
- logique - soit une comparaison de valeurs avec une autre, soit une
- vérification de la "vérité" d'une valeur particulière (Une chaîne
- donnée est vraie si elle n'est pas vide). Pour une liste exhaustive
- des opérateurs de comparaison disponibles, voir la documentation du
- module <code class="module"><a href="../mod/mod_include.html">mod_include</a></code>. Voici quelques exemples
- illustrant l'utilisation de ces expressions.</p>
-
- <p>Vous pouvez ajouter les lignes suivantes dans votre fichier de
- configuration :</p>
-<div class="example"><p><code>
- BrowserMatchNoCase macintosh Mac<br />
- BrowserMatchNoCase MSIE InternetExplorer
-</code></p></div>
-
- <p>Ces lignes définissent les variables d'environnement "Mac" et
- "InternetExplorer" à true, si le client utilise InternetExplorer sur
- un Macintosh.</p>
-
- <p>Puis, dans votre document où les SSI sont activées, vous ajoutez
- ceci :</p>
-<div class="example"><p><code>
- <!--#if expr="${Mac} && ${InternetExplorer}" --><br />
- Un texte d'excuses est inséré ici<br />
- <!--#else --><br />
- Ici se trouve du code JavaScipt sympa<br />
- <!--#endif -->
-</code></p></div>
-
- <p>Notez que je n'ai rien contre IE sur Macintosh - J'ai juste
- phosphoré quelques heures la semaine dernière pour faire fonctionner
- du JavaScript sous IE sur Macintosh, alors qu'il fonctionnait sous
- tout autre environnement. Ce qui précède a constitué un
- contournement provisoire.</p>
-
- <p>Toute autre variable (que vous avez définie, ou une variable
- d'environnement normale) peut être utilisée dans les expressions
- conditionnelles. Associée à la possibilité avec Apache de définir
- des variables d'environnement à l'aide de directives
- <code>SetEnvIf</code>, ainsi que d'autres directives en rapport,
- cette fonctionnalité vous permet d'ajouter des contenus dynamiques
- assez évolués sans avoir recours aux programmes CGI.</p>
-
-</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="conclusion" id="conclusion">Conclusion</a></h2>
-
- <p>SSI ne remplace certainement pas CGI, ou d'autres technologies
- utilisées pour la génération de pages web dynamiques. Mais c'est une
- bonne méthode pour ajouter des petits contenus dynamiques à vos
- pages, sans devoir fournir un gros effort supplémentaire.</p>
-</div></div>
-<div class="bottomlang">
-<p><span>Langues Disponibles: </span><a href="../en/howto/ssi.html" hreflang="en" rel="alternate" title="English"> en </a> |
-<a href="../fr/howto/ssi.html" title="Français"> fr </a> |
-<a href="../ja/howto/ssi.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> |
-<a href="../ko/howto/ssi.html" hreflang="ko" rel="alternate" title="Korean"> ko </a></p>
-</div><div id="footer">
-<p class="apache">Copyright 2009 The Apache Software Foundation.<br />Authorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p></div>
+<?xml version="1.0" encoding="ISO-8859-1"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head><!--\r
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r
+ This file is generated from xml source: DO NOT EDIT\r
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r
+ -->\r
+<title>Tutoriel Apache : Introduction aux "Inclusions Côté Serveur"\r
+(Server Side Includes - SSI) - Serveur Apache HTTP</title>\r
+<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />\r
+<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />\r
+<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />\r
+<link href="../images/favicon.ico" rel="shortcut icon" /></head>\r
+<body id="manual-page"><div id="page-header">\r
+<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p>\r
+<p class="apache">Serveur Apache HTTP Version 2.3</p>\r
+<img alt="" src="../images/feather.gif" /></div>\r
+<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div>\r
+<div id="path">\r
+<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Serveur HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.3</a> > <a href="./">Recettes et tutoriels</a></div><div id="page-content"><div id="preamble"><h1>Tutoriel Apache : Introduction aux "Inclusions Côté Serveur"\r
+(Server Side Includes - SSI)</h1>\r
+<div class="toplang">\r
+<p><span>Langues Disponibles: </span><a href="../en/howto/ssi.html" hreflang="en" rel="alternate" title="English"> en </a> |\r
+<a href="../fr/howto/ssi.html" title="Français"> fr </a> |\r
+<a href="../ja/howto/ssi.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> |\r
+<a href="../ko/howto/ssi.html" hreflang="ko" rel="alternate" title="Korean"> ko </a></p>\r
+</div>\r
+\r
+<p>Les SSI permettent d'ajouter du contenu dynamique à des documents\r
+HTML préexistants.</p>\r
+</div>\r
+<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#related">Introduction</a></li>\r
+<li><img alt="" src="../images/down.gif" /> <a href="#what">Qu'est-ce que SSI ?</a></li>\r
+<li><img alt="" src="../images/down.gif" /> <a href="#configuring">Configurer votre serveur pour permettre les SSI</a></li>\r
+<li><img alt="" src="../images/down.gif" /> <a href="#basic">Directives SSI de base</a></li>\r
+<li><img alt="" src="../images/down.gif" /> <a href="#additionalexamples">Exemples additionnels</a></li>\r
+<li><img alt="" src="../images/down.gif" /> <a href="#config">Que puis-je configurer d'autre ?</a></li>\r
+<li><img alt="" src="../images/down.gif" /> <a href="#exec">Exécution de commandes</a></li>\r
+<li><img alt="" src="../images/down.gif" /> <a href="#advanced">Techniques SSI avancées</a></li>\r
+<li><img alt="" src="../images/down.gif" /> <a href="#conclusion">Conclusion</a></li>\r
+</ul></div>\r
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="related" id="related">Introduction</a></h2>\r
+ <table class="related"><tr><th>Modules Apparentés</th><th>Directives Apparentées</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_include.html">mod_include</a></code></li><li><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code></li><li><code class="module"><a href="../mod/mod_expires.html">mod_expires</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li><li><code class="directive"><a href="../mod/mod_include.html#xbithack">XBitHack</a></code></li><li><code class="directive"><a href="../mod/mod_mime.html#addtype">AddType</a></code></li><li><code class="directive"><a href="../mod/core.html#setoutputfilter">SetOutputFilter</a></code></li><li><code class="directive"><a href="../mod/mod_setenvif.html#browsermatchnocase">BrowserMatchNoCase</a></code></li></ul></td></tr></table>\r
+\r
+ <p>Cet article traite des Inclusions Côté Serveur (Server Side\r
+ Includes), plus communément appelés SSI. Vous trouverez ici la\r
+ manière de configurer votre serveur pour permettre les SSI, ainsi\r
+ qu'une introduction à quelques techniques SSI de base permettant\r
+ d'ajouter du contenu dynamique à vos pages HTML préexistantes.</p>\r
+\r
+ <p>La dernière partie de cet article sera consacrée aux\r
+ configurations SSI plus avancées, telles que les expressions\r
+ conditionnelles dans les directives SSI.</p>\r
+\r
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="what" id="what">Qu'est-ce que SSI ?</a></h2>\r
+\r
+ <p>SSI (Server Side Includes) est constitué de directives placées dans\r
+ des pages HTML, et évaluées par le serveur au moment où les pages\r
+ sont servies. Elles vous permettent d'ajouter du contenu généré\r
+ dynamiquement à une page HTML préexistante, sans avoir à servir la\r
+ page entière via un programme CGI, ou toute autre technologie de\r
+ contenu dynamique.</p>\r
+\r
+ <p>Le choix entre l'utilisation des SSI et la génération entière de\r
+ la page par un programme quelconque, est en général dicté par la\r
+ proportion de contenu statique et de contenu devant être généré\r
+ chaque fois que la page est servie. SSI est idéal pour ajouter de\r
+ petites quantités d'information, comme l'heure courante. Mais si la\r
+ plus grande partie de votre page est générée au moment où elle est\r
+ servie, vous devez vous tourner vers une autre solution.</p>\r
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="configuring" id="configuring">Configurer votre serveur pour permettre les SSI</a></h2>\r
+\r
+\r
+ <p>Pour permettre l'utilisation des SSI sur votre serveur, vous\r
+ devez ajouter la directive suivante dans votre fichier\r
+ <code>httpd.conf</code>, ou dans un fichier <code>.htaccess</code>\r
+ :</p>\r
+<div class="example"><p><code>\r
+ Options +Includes\r
+</code></p></div>\r
+\r
+ <p>Cette directive indique à Apache que vous désirez permettre la\r
+ recherche de directives SSI lors de l'interprétation des fichiers.\r
+ Notez cependant que la plupart des configurations contiennent de\r
+ nombreuses directives <code class="directive"><a href="../mod/core.html#options">Options</a></code>\r
+ qui peuvent s'écraser les unes les autres. Vous devrez probablement\r
+ appliquer ces directives <code>Options</code> au répertoire\r
+ spécifique pour lequel vous voulez activer les SSI, afin d'être sûr\r
+ qu'elles y seront bien activées.</p>\r
+\r
+ <p>Tout fichier ne fera cependant pas l'objet de recherche de\r
+ directives SSI. Vous devez indiquer à Apache quels fichiers seront\r
+ concernés. Vous pouvez y parvenir en indiquant une extension, comme\r
+ <code>.shtml</code>, à l'aide des directives suivantes :</p>\r
+<div class="example"><p><code>\r
+ AddType text/html .shtml<br />\r
+ AddOutputFilter INCLUDES .shtml\r
+</code></p></div>\r
+\r
+ <p>Un des désavantages de cette approche réside dans le fait que si\r
+ vous voulez ajouter des directives SSI à une page préexistante, vous\r
+ devrez changer le nom de cette page, et donc tout lien qui la\r
+ contient, de façon à ce qu'elle possède l'extension\r
+ <code>.shtml</code>, condition nécessaire pour que les directives\r
+ SSI qu'elle contient soient traitées.</p>\r
+\r
+ <p>Une autre méthode consiste à utiliser la directive <code class="directive"><a href="../mod/mod_include.html#xbithack">XBitHack</a></code> :</p>\r
+<div class="example"><p><code>\r
+ XBitHack on\r
+</code></p></div>\r
+\r
+ <p>La directive <code class="directive"><a href="../mod/mod_include.html#xbithack">XBitHack</a></code>\r
+ indique à Apache qu'il doit rechercher des directivves SSI dans les\r
+ fichiers si leur bit d'exécution est positionné. Il n'est ainsi plus\r
+ nécessaire de changer le nom du fichier pour ajouter des directives\r
+ SSI à une page préexistante ; vous devez simplement attribuer les\r
+ droits d'exécution au fichier à l'aide de <code>chmod</code>.</p>\r
+<div class="example"><p><code>\r
+ chmod +x pagename.html\r
+</code></p></div>\r
+\r
+ <p>Un bref commentaire sur ce qu'il ne faut pas faire. Certaines\r
+ personnes peuvent vous conseiller de tout simplement indiquer à\r
+ Apache de rechercher des directives SSI dans tous les fichiers\r
+ <code>.html</code>, ce qui vous évite d'avoir à gérer les noms de\r
+ fichiers avec extension <code>.shtml</code>. Ils n'ont probablement\r
+ pas entendu parler de la directive <code class="directive"><a href="../mod/mod_include.html#xbithack">XBitHack</a></code>. En effet, vous devez\r
+ garder à l'esprit qu'en faisant ceci, Apache va devoir rechercher\r
+ des directives SSI dans chaque fichier qu'il sert, même s'il n'en\r
+ contient aucune. Ce n'est donc pas une bonne idée car les\r
+ performances peuvent en être sensiblement affectées.</p>\r
+\r
+ <p>Bien entendu, sous Windows, il n'y a pas de bit d'exécution à\r
+ positionner, ce qui limite un peu vos choix.</p>\r
+\r
+ <p>Dans sa configuration par défaut, Apache n'envoie pas la date de\r
+ dernière modification ou les en-têtes HTTP relatifs à la taille des\r
+ contenus dans les pages SSI, car ses valeurs sont difficiles à\r
+ calculer pour les contenus dynamiques. Ceci peut induire une\r
+ impression de diminution des performances côté client, en empêchant\r
+ la mise en cache de votre document. Il existe deux méthodes pour\r
+ résoudre ce problème :</p>\r
+\r
+ <ol>\r
+ <li>Utilisez la configuration <code>XBitHack Full</code>. Elle\r
+ indique à Apache de déterminer la date de dernière modification en\r
+ ne regardant que la date du fichier à l'origine de la requête,\r
+ tout en ignorant la date de modification de tout fichier inclus.</li>\r
+\r
+ <li>Utilisez les directives fournies par le module\r
+ <code class="module"><a href="../mod/mod_expires.html">mod_expires</a></code> pour définir de manière explicite la\r
+ date d'expiration de vos fichiers, laissant par la-même\r
+ aux navigateurs et aux mandataires le soin de déterminer s'il est\r
+ opportun ou non de les mettre en cache.</li>\r
+ </ol>\r
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="basic" id="basic">Directives SSI de base</a></h2>\r
+\r
+ <p>Les directives SSI adoptent la syntaxe suivante :</p>\r
+<div class="example"><p><code>\r
+ <!--#élément attribut=valeur attribut=valeur ... -->\r
+</code></p></div>\r
+\r
+ <p>Le format d'une directive SSI étant similaire à celui d'un\r
+ commentaire HTML, si vous n'avez pas activé correctement SSI, le\r
+ navigateur l'ignorera, mais elle sera encore visible dans le source\r
+ HTML. Si SSI est correctement configuré, la directive sera remplacée\r
+ par ses résultats.</p>\r
+\r
+ <p>"élément" peut prendre de nombreuses formes, et nous décrirons\r
+ plus précisément la plupart d'entre eux dans la prochaine version de\r
+ ce document. Pour le moment, voici quelques exemples de ce que vous\r
+ pouvez faire avec SSI.</p>\r
+\r
+<h3><a name="todaysdate" id="todaysdate">La date courante</a></h3>\r
+\r
+<div class="example"><p><code>\r
+ <!--#echo var="DATE_LOCAL" -->\r
+</code></p></div>\r
+\r
+ <p>L'élément <code>echo</code> permet d'afficher la valeur d'une\r
+ variable. Il existe un grand nombre de variables standards, y\r
+ compris l'ensemble des variables d'environnement disponibles pour\r
+ les programmes CGI. De plus, vous pouvez définir vos propres\r
+ variables à l'aide de l'élément <code>set</code>.</p>\r
+\r
+ <p>Si vous n'aimez pas le format sous lequel la date s'affiche, vous\r
+ pouvez utiliser l'élément <code>config</code> avec un attribut\r
+ <code>timefmt</code>, pour le modifier.</p>\r
+\r
+<div class="example"><p><code>\r
+ <!--#config timefmt="%A %B %d, %Y" --><br />\r
+ Today is <!--#echo var="DATE_LOCAL" -->\r
+</code></p></div>\r
+\r
+\r
+<h3><a name="lastmodified" id="lastmodified">Date de modification du fichier</a></h3>\r
+\r
+<div class="example"><p><code>\r
+ Dernière modification du document <!--#flastmod file="index.html" -->\r
+</code></p></div>\r
+\r
+ <p>Le format peut là aussi être modifié à l'aide de l'attribut\r
+ <code>timefmt</code>.</p>\r
+\r
+\r
+<h3><a name="cgi" id="cgi">Inclusion des résultats d'un programme CGI</a></h3>\r
+\r
+ <p>C'est le cas le plus courant d'utilisation des SSI - afficher les\r
+ résultats d'un programme CGI, comme l'universellement adoré\r
+ "compteur d'accès".</p>\r
+\r
+<div class="example"><p><code>\r
+ <!--#include virtual="/cgi-bin/counter.pl" -->\r
+</code></p></div>\r
+\r
+\r
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="additionalexamples" id="additionalexamples">Exemples additionnels</a></h2>\r
+\r
+\r
+ <p>Vous trouverez dans ce qui suit quelques exemples spécifiques de\r
+ ce que vous pouvez faire de vos documents HTML avec SSI.</p>\r
+\r
+<h3><a name="docmodified" id="docmodified">Quand ce document a-t-il été modifié ?</a></h3>\r
+\r
+ <p>Nous avons mentionné plus haut que vous pouviez utiliser SSI pour\r
+ informer l'utilisateur de la date de dernière modification du\r
+ document. Cependant, la méthode pour y parvenir n'a pas été vraiment\r
+ abordée. Placé dans votre document HTML, le code suivant va insérer\r
+ un repère de temps dans votre page. Bien entendu, SSI devra avoir\r
+ été correctement activé, comme décrit plus haut.</p>\r
+<div class="example"><p><code>\r
+ <!--#config timefmt="%A %B %d, %Y" --><br />\r
+ Dernière modification du fichier <!--#flastmod file="ssi.shtml" -->\r
+</code></p></div>\r
+\r
+ <p>Bien entendu, vous devez remplacer <code>ssi.shtml</code> par le\r
+ nom du fichier auquel vous faites référence. Ceci ne conviendra pas\r
+ si vous recherchez un morceau de code générique que vous pourrez\r
+ insérer dans tout fichier ; dans ce cas, il est préférable\r
+ d'utiliser la variable <code>LAST_MODIFIED</code> :</p>\r
+<div class="example"><p><code>\r
+ <!--#config timefmt="%D" --><br />\r
+ This file last modified <!--#echo var="LAST_MODIFIED" -->\r
+</code></p></div>\r
+\r
+ <p>Pour plus de détails sur le format <code>timefmt</code>, tapez\r
+ <code>strftime</code> dans votre moteur de recherche préferé. La\r
+ syntaxe est identique.</p>\r
+\r
+\r
+<h3><a name="standard-footer" id="standard-footer">Inclusion d'un pied de page standard</a></h3>\r
+\r
+\r
+ <p>Si le site que vous gérez comporte plus que quelques pages, vous\r
+ allez vite vous apercevoir qu'effectuer des modifications sur toutes\r
+ ces pages peut devenir très contraignant, en particulier si vous\r
+ voulez qu'elles conservent un aspect homogène.</p>\r
+\r
+ <p>Inclure un fichier pour un en-tête et/ou un pied de page peut\r
+ simplifier cette corvée de mises à jour. Il vous suffit de\r
+ confectionner un fichier de pied de page, et de l'inclure dans\r
+ chaque page à l'aide de l'élément SSI <code>include</code>. Pour\r
+ définir le fichier à inclure, l'élément <code>include</code> peut\r
+ utiliser soit l'attribut <code>file</code>, soit l'attribut\r
+ <code>virtual</code>. L'attribut <code>file</code> est un chemin de\r
+ fichier <em>relatif au répertoire courant</em>. C'est à dire qu'il\r
+ ne peut ni avoir pour valeur un chemin absolu (commençant par /), ni\r
+ comporter "../" dans son chemin. L'attribut <code>virtual</code> est\r
+ probablement plus commode, et peut spécifier une URL relative au\r
+ document servi. Elle peut commencer par un /, mais le fichier inclus\r
+ et le fichier servi doivent résider sur le même serveur.</p>\r
+<div class="example"><p><code>\r
+ <!--#include virtual="/footer.html" -->\r
+</code></p></div>\r
+\r
+ <p>Je combinerai souvent ces deux derniers points, en ajoutant une\r
+ directive <code>LAST_MODIFIED</code> dans un fichier de pied de page\r
+ destiné à être inclus. Le fichier inclus peut contenir des\r
+ directives SSI, et les inclusions peuvent être imbriquées - à\r
+ savoir, le fichier inclus peut inclure un autre fichier, etc...</p>\r
+\r
+\r
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="config" id="config">Que puis-je configurer d'autre ?</a></h2>\r
+\r
+\r
+ <p>En plus du format de date, vous pouvez utiliser l'élément\r
+ <code>config</code> pour configurer deux autres choses.</p>\r
+\r
+ <p>En général, lorsque quelque chose se passe mal avec votre\r
+ directive SSI, vous recevez le message :</p>\r
+<div class="example"><p><code>\r
+ [an error occurred while processing this directive]\r
+</code></p></div>\r
+\r
+ <p>Pour modifier ce message, vous pouvez utiliser l'attribut\r
+ <code>errmsg</code> avec l'élément <code>config</code> :</p>\r
+<div class="example"><p><code>\r
+ <!--#config errmsg="[Il semblerait que vous ne sachiez pas\r
+ utiliser les SSI]" -->\r
+</code></p></div>\r
+\r
+ <p>Il est cependant probable que les utilisateurs finaux ne voient\r
+ jamais ce message, car vous aurez résolu tous les problèmes issus de\r
+ vos directives SSI avant que votre site ne soit mis en production.\r
+ (N'est-ce pas ?)</p>\r
+\r
+ <p>Vous pouvez aussi modifier le format sous lequel les tailles de\r
+ fichiers sont affichées à l'aide de l'attribut <code>sizefmt</code>.\r
+ Vous pouvez spécifier <code>bytes</code> pour un affichage en\r
+ octets, ou <code>abbrev</code> pour un affichage plus concis en Ko\r
+ ou Mo, selon le cas.</p>\r
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="exec" id="exec">Exécution de commandes</a></h2>\r
+ \r
+\r
+ <p>J'ai pour projet, dans les prochains mois, d'écrire un article à\r
+ propos de l'utilisation des SSI avec des petits programmes CGI. Pour\r
+ l'instant, voici ce que vous pouvez faire avec l'élément\r
+ <code>exec</code>. Vous pouvez vraiment faire exécuter une commande\r
+ par SSI en utilisant le shell (<code>/bin/sh</code>, pour être plus\r
+ précis - ou le shell DOS, si vous êtes sous Win32). Par exemple, ce\r
+ qui suit vous permet d'afficher le contenu d'un répertoire.</p>\r
+<div class="example"><p><code>\r
+ <pre><br />\r
+ <!--#exec cmd="ls" --><br />\r
+ </pre>\r
+</code></p></div>\r
+\r
+ <p>ou, sous Windows</p>\r
+<div class="example"><p><code>\r
+ <pre><br />\r
+ <!--#exec cmd="dir" --><br />\r
+ </pre>\r
+</code></p></div>\r
+\r
+ <p>Vous noterez probablement l'étrange formatage provoqué par cette\r
+ directive sous Windows, car la sortie de <code>dir</code> contient\r
+ la chaîne de caractères "<<code>dir</code>>", ce qui trompe le\r
+ navigateur.</p>\r
+\r
+ <p>Notez que cette fonctionnalité est très dangereuse, car elle va\r
+ permettre d'exécuter tout code associé à l'élément\r
+ <code>exec</code>. Si vous êtes dans la situation où les\r
+ utilisateurs peuvent éditer le contenu de vos pages web, dans le cas\r
+ d'un "livre d'or" par exemple, assurez-vous de désactiver cette\r
+ fonctionnalité. Vous pouvez, tout en permettant les SSI, désactiver\r
+ la fonctionnalité <code>exec</code> à l'aide de l'argument\r
+ <code>IncludesNOEXEC</code> de la directive\r
+ <code>Options</code>.</p>\r
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="advanced" id="advanced">Techniques SSI avancées</a></h2>\r
+\r
+\r
+ <p>Outre l'affichage de contenu, les SSI d'Apache vous permettent de\r
+ définir des variables, et de les utiliser dans des comparaisons et\r
+ des conditions.</p>\r
+\r
+<h3><a name="caveat" id="caveat">Mise en garde</a></h3>\r
+\r
+ <p>La plupart des fonctionnalités décrites dans cet article ne sont\r
+ disponibles que si vous utilisez la version 1.2 ou supérieure\r
+ d'Apache. Bien entendu, si ce n'est pas le cas, vous devez faire une\r
+ mise à jour immédiatement, et même plus tôt. Allez-y. Faites-le\r
+ maintenant. Nous attendrons.</p>\r
+\r
+\r
+<h3><a name="variables" id="variables">Définition de variables</a></h3>\r
+\r
+ <p>Avec l'élément <code>set</code>, vous pouvez définir des\r
+ variables pour un usage ultérieur. Comme nous en aurons besoin plus\r
+ loin, nous allons en parler tout de suite. La syntaxe se présente\r
+ comme suit :</p>\r
+<div class="example"><p><code>\r
+ <!--#set var="name" value="Rich" -->\r
+</code></p></div>\r
+\r
+ <p>Pour affecter une valeur à vos variables, en plus de la\r
+ définition littérale de l'exemple ci-dessus, vous pouvez utiliser\r
+ une autre variable, y compris les <a href="../env.html">variables d'environnement</a>, ou les variables\r
+ décrites plus haut (comme <code>LAST_MODIFIED</code> par exemple).\r
+ Pour indiquer qu'il s'agit d'une variable et non d'une chaîne, vous\r
+ devez utiliser le symbole dollar ($) devant le nom de la\r
+ variable.</p>\r
+\r
+ <div class="example"><p><code> <!--#set var="modified" value="$LAST_MODIFIED" -->\r
+ </code></p></div>\r
+\r
+ <p>Pour insérer un caractère $ dans la valeur de votre variable,\r
+ vous devez l'échapper à l'aide d'un backslash.</p>\r
+<div class="example"><p><code>\r
+ <!--#set var="cost" value="\$100" -->\r
+</code></p></div>\r
+\r
+ <p>Enfin, si vous voulez insérer une variable dans une chaîne, et\r
+ s'il y a une chance pour que le nom de la variable se confonde avec\r
+ le reste de la chaîne, vous pouvez l'entourer d'accolades pour\r
+ eviter toute confusion (Il est difficile de trouver un bon exemple\r
+ pour illustrer ceci, mais j'espère que vous comprendrez).</p>\r
+<div class="example"><p><code>\r
+ <!--#set var="date" value="${DATE_LOCAL}_${DATE_GMT}" -->\r
+</code></p></div>\r
+\r
+\r
+<h3><a name="conditional" id="conditional">Expressions conditionnelles</a></h3>\r
+\r
+\r
+ <p>Maintenent que nous avons des variables, et que nous pouvons\r
+ définir et comparer leurs valeurs, nous sommes à même de les\r
+ utiliser dans des expressions conditionnelles. Ceci confère à SSI le\r
+ statut de petit langage de programmation.\r
+ <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> fournit une structure <code>if</code>,\r
+ <code>elif</code>, <code>else</code>, <code>endif</code> pour la\r
+ construction d'expressions conditionnelles, ce qui vous permet de\r
+ générer plusieurs pages logiques à partir d'une seule vraie\r
+ page.</p>\r
+\r
+ <p>La structure de l'expression conditionnelle est :</p>\r
+<div class="example"><p><code>\r
+ <!--#if expr="condition" --><br />\r
+ <!--#elif expr="condition" --><br />\r
+ <!--#else --><br />\r
+ <!--#endif -->\r
+</code></p></div>\r
+\r
+ <p>Une <em>condition</em> peut revêtir la forme de toute comparaison\r
+ logique - soit une comparaison de valeurs avec une autre, soit une\r
+ vérification de la "vérité" d'une valeur particulière (Une chaîne\r
+ donnée est vraie si elle n'est pas vide). Pour une liste exhaustive\r
+ des opérateurs de comparaison disponibles, voir la documentation du\r
+ module <code class="module"><a href="../mod/mod_include.html">mod_include</a></code>. Voici quelques exemples\r
+ illustrant l'utilisation de ces expressions.</p>\r
+\r
+ <p>Vous pouvez ajouter les lignes suivantes dans votre fichier de\r
+ configuration :</p>\r
+<div class="example"><p><code>\r
+ BrowserMatchNoCase macintosh Mac<br />\r
+ BrowserMatchNoCase MSIE InternetExplorer\r
+</code></p></div>\r
+\r
+ <p>Ces lignes définissent les variables d'environnement "Mac" et\r
+ "InternetExplorer" à true, si le client utilise InternetExplorer sur\r
+ un Macintosh.</p>\r
+\r
+ <p>Puis, dans votre document où les SSI sont activées, vous ajoutez\r
+ ceci :</p>\r
+<div class="example"><p><code>\r
+ <!--#if expr="${Mac} && ${InternetExplorer}" --><br />\r
+ Un texte d'excuses est inséré ici<br />\r
+ <!--#else --><br />\r
+ Ici se trouve du code JavaScipt sympa<br />\r
+ <!--#endif -->\r
+</code></p></div>\r
+\r
+ <p>Notez que je n'ai rien contre IE sur Macintosh - J'ai juste\r
+ phosphoré quelques heures la semaine dernière pour faire fonctionner\r
+ du JavaScript sous IE sur Macintosh, alors qu'il fonctionnait sous\r
+ tout autre environnement. Ce qui précède a constitué un\r
+ contournement provisoire.</p>\r
+\r
+ <p>Toute autre variable (que vous avez définie, ou une variable\r
+ d'environnement normale) peut être utilisée dans les expressions\r
+ conditionnelles. Associée à la possibilité avec Apache de définir\r
+ des variables d'environnement à l'aide de directives\r
+ <code>SetEnvIf</code>, ainsi que d'autres directives en rapport,\r
+ cette fonctionnalité vous permet d'ajouter des contenus dynamiques\r
+ assez évolués sans avoir recours aux programmes CGI.</p>\r
+\r
+</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="conclusion" id="conclusion">Conclusion</a></h2>\r
+\r
+ <p>SSI ne remplace certainement pas CGI, ou d'autres technologies\r
+ utilisées pour la génération de pages web dynamiques. Mais c'est une\r
+ bonne méthode pour ajouter des petits contenus dynamiques à vos\r
+ pages, sans devoir fournir un gros effort supplémentaire.</p>\r
+</div></div>\r
+<div class="bottomlang">\r
+<p><span>Langues Disponibles: </span><a href="../en/howto/ssi.html" hreflang="en" rel="alternate" title="English"> en </a> |\r
+<a href="../fr/howto/ssi.html" title="Français"> fr </a> |\r
+<a href="../ja/howto/ssi.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> |\r
+<a href="../ko/howto/ssi.html" hreflang="ko" rel="alternate" title="Korean"> ko </a></p>\r
+</div><div id="footer">\r
+<p class="apache">Copyright 2009 The Apache Software Foundation.<br />Authorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>\r
+<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p></div>\r
</body></html>
\ No newline at end of file
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Documentations diverses sur Apache - Serveur Apache HTTP</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page" class="no-sidebar"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p>
-<p class="apache">Serveur Apache HTTP Version 2.3</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="../"><img title="<-" alt="<-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Serveur HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.3</a></div><div id="page-content"><div id="preamble"><h1>Documentations diverses sur Apache</h1>
-<div class="toplang">
-<p><span>Langues Disponibles: </span><a href="../en/misc/" hreflang="en" rel="alternate" title="English"> en </a> |
-<a href="../fr/misc/" title="Français"> fr </a> |
-<a href="../ko/misc/" hreflang="ko" rel="alternate" title="Korean"> ko </a> |
-<a href="../tr/misc/" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>
-</div>
-
-
- <p>Vous trouverez plus loin une liste de pages de documentation
- additionnelles concernant le projet de développement du serveur web
- Apache.</p>
-
- <div class="warning"><h3>Avertissement</h3>
- <p>La mise à jour des documents ci-dessous permettant de prendre en
- compte les modifications apportées par la version 2.1 du serveur
- HTTP Apache n'a pas été entièrement menée à bien. Certaines
- informations sont probablement encore pertinentes, mais utilisez-les tout de même avec
- précautions.</p>
- </div>
-
- <dl>
- <dt><a href="perf-tuning.html">Notes à propos des performances -
- Réglages fins d'Apache</a></dt>
-
- <dd>
- <p>Notes à propos de la configuration d'Apache pour de plus
- hautes performances (à l'exécution et à la compilation). Notes
- expliquant pourquoi Apache accomplit certaines choses et
- n'en accomplit pas certaines autres (les premières l'accélérant
- et les deuxièmes le ralentissant).</p>
- </dd>
-
- <dt><a href="security_tips.html">Conseils concernant la
- sécurité</a></dt>
-
- <dd>
- <p>Quelques conseils de type "faites" ou "ne faites pas" pour
- que votre site web Apache reste sécurisé.</p>
- </dd>
-
- <dt><a href="relevant_standards.html">Standards concernés</a></dt>
-
- <dd>
- <p>Ce document constitue une page de référence pour la plupart
- des standards concernés par Apache.</p>
- </dd>
-
- <dt><a href="password_encryptions.html">Formats de chiffrement des
- mots de passe</a></dt>
-
- <dd>
- <p>Discussion à propos des divers algorithmes de chiffrement
- supportés par Apache à des fins d'authentification.</p>
- </dd>
- </dl>
-
- </div>
-</div>
-<div class="bottomlang">
-<p><span>Langues Disponibles: </span><a href="../en/misc/" hreflang="en" rel="alternate" title="English"> en </a> |
-<a href="../fr/misc/" title="Français"> fr </a> |
-<a href="../ko/misc/" hreflang="ko" rel="alternate" title="Korean"> ko </a> |
-<a href="../tr/misc/" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>
-</div><div id="footer">
-<p class="apache">Copyright 2009 The Apache Software Foundation.<br />Authorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p></div>
+<?xml version="1.0" encoding="ISO-8859-1"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head><!--\r
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r
+ This file is generated from xml source: DO NOT EDIT\r
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r
+ -->\r
+<title>Documentations diverses sur Apache - Serveur Apache HTTP</title>\r
+<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />\r
+<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />\r
+<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />\r
+<link href="../images/favicon.ico" rel="shortcut icon" /></head>\r
+<body id="manual-page" class="no-sidebar"><div id="page-header">\r
+<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p>\r
+<p class="apache">Serveur Apache HTTP Version 2.3</p>\r
+<img alt="" src="../images/feather.gif" /></div>\r
+<div class="up"><a href="../"><img title="<-" alt="<-" src="../images/left.gif" /></a></div>\r
+<div id="path">\r
+<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Serveur HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.3</a></div><div id="page-content"><div id="preamble"><h1>Documentations diverses sur Apache</h1>\r
+<div class="toplang">\r
+<p><span>Langues Disponibles: </span><a href="../en/misc/" hreflang="en" rel="alternate" title="English"> en </a> |\r
+<a href="../fr/misc/" title="Français"> fr </a> |\r
+<a href="../ko/misc/" hreflang="ko" rel="alternate" title="Korean"> ko </a> |\r
+<a href="../tr/misc/" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>\r
+</div>\r
+\r
+\r
+ <p>Vous trouverez plus loin une liste de pages de documentation\r
+ additionnelles concernant le projet de développement du serveur web\r
+ Apache.</p>\r
+\r
+ <div class="warning"><h3>Avertissement</h3>\r
+ <p>La mise à jour des documents ci-dessous permettant de prendre en\r
+ compte les modifications apportées par la version 2.1 du serveur\r
+ HTTP Apache n'a pas été entièrement menée à bien. Certaines\r
+ informations sont probablement encore pertinentes, mais utilisez-les tout de même avec\r
+ précautions.</p>\r
+ </div>\r
+\r
+ <dl>\r
+ <dt><a href="perf-tuning.html">Notes à propos des performances -\r
+ Réglages fins d'Apache</a></dt>\r
+\r
+ <dd>\r
+ <p>Notes à propos de la configuration d'Apache pour de plus\r
+ hautes performances (à l'exécution et à la compilation). Notes\r
+ expliquant pourquoi Apache accomplit certaines choses et\r
+ n'en accomplit pas certaines autres (les premières l'accélérant\r
+ et les deuxièmes le ralentissant).</p>\r
+ </dd>\r
+\r
+ <dt><a href="security_tips.html">Conseils concernant la\r
+ sécurité</a></dt>\r
+\r
+ <dd>\r
+ <p>Quelques conseils de type "faites" ou "ne faites pas" pour\r
+ que votre site web Apache reste sécurisé.</p>\r
+ </dd>\r
+\r
+ <dt><a href="relevant_standards.html">Standards concernés</a></dt>\r
+\r
+ <dd>\r
+ <p>Ce document constitue une page de référence pour la plupart\r
+ des standards concernés par Apache.</p>\r
+ </dd>\r
+\r
+ <dt><a href="password_encryptions.html">Formats de chiffrement des\r
+ mots de passe</a></dt>\r
+\r
+ <dd>\r
+ <p>Discussion à propos des divers algorithmes de chiffrement\r
+ supportés par Apache à des fins d'authentification.</p>\r
+ </dd>\r
+ </dl>\r
+\r
+ </div>\r
+</div>\r
+<div class="bottomlang">\r
+<p><span>Langues Disponibles: </span><a href="../en/misc/" hreflang="en" rel="alternate" title="English"> en </a> |\r
+<a href="../fr/misc/" title="Français"> fr </a> |\r
+<a href="../ko/misc/" hreflang="ko" rel="alternate" title="Korean"> ko </a> |\r
+<a href="../tr/misc/" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>\r
+</div><div id="footer">\r
+<p class="apache">Copyright 2009 The Apache Software Foundation.<br />Authorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>\r
+<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p></div>\r
</body></html>
\ No newline at end of file
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Optimisation des performances d'Apache - Serveur Apache HTTP</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p>
-<p class="apache">Serveur Apache HTTP Version 2.3</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Serveur HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.3</a> > <a href="./">Documentations diverses</a></div><div id="page-content"><div id="preamble"><h1>Optimisation des performances d'Apache</h1>
-<div class="toplang">
-<p><span>Langues Disponibles: </span><a href="../en/misc/perf-tuning.html" hreflang="en" rel="alternate" title="English"> en </a> |
-<a href="../fr/misc/perf-tuning.html" title="Français"> fr </a> |
-<a href="../ko/misc/perf-tuning.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |
-<a href="../tr/misc/perf-tuning.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>
-</div>
-
-
- <p>Apache 2.x est un serveur web à usage général, conçu dans un but
- d'équilibre entre souplesse, portabilité et performances. Bien que non
- conçu dans le seul but d'établir une référence en la matière,
- Apache 2.x est capable de hautes performances dans de nombreuses situations
- du monde réel.</p>
-
- <p>Comparée à Apache 1.3, la version 2.x comporte de nombreuses
- optimisations supplémentaires permettant d'améliorer le débit du serveur
- et sa personnalisation. La plupart de ces améliorations sont activées par
- défaut. Cependant, certains choix de configuration à la compilation et à
- l'exécution peuvent affecter les performances de manière significative. Ce
- document décrit les options qu'un administrateur de serveur peut configurer
- pour améliorer les performances d'une installation d'Apache 2.x. Certaines
- de ces options de configuration permettent au démon httpd de mieux tirer
- parti des possibilités du matériel et du système d'exploitation, tandis
- que d'autres permettent à l'administrateur de privilégier la vitesse
- par rapport aux fonctionnalités.</p>
-
- </div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#hardware">Problèmes matériels et relatifs au système d'exploitation</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#runtime">Optimisation de la configuration à l'exécution</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#compiletime">Optimisation de la configuration à la compilation</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#trace">Appendice : Analyse détaillée d'une trace</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="hardware" id="hardware">Problèmes matériels et relatifs au système d'exploitation</a></h2>
-
-
-
- <p>Le principal problème matériel qui affecte les performances du serveur
- web est la mémoire vive (RAM). Un serveur web ne devrait jamais avoir à
- utiliser le swap, car le swapping augmente le temps de réponse de chaque
- requête au delà du point que les utilisateurs considèrent comme
- "trop lent". Ceci incite les utilisateurs à cliquer sur "Stop", puis
- "Charger à nouveau", ce qui a pour effet d'augmenter encore la charge
- du serveur. Vous pouvez, et même devez définir la valeur de la directive
- <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code> de façon à ce que
- votre serveur ne lance pas un nombre de processus enfants tel qu'il
- commence à faire du swapping. La méthode pour y parvenir est
- simple : déterminez la taille de votre processus Apache standard en
- consultant votre liste de processus à l'aide d'un outil tel que
- <code>top</code>, et divisez votre quantité totale de mémoire disponible
- par cette taille, tout en gardant un espace suffisant
- pour les autres processus.</p>
-
- <p>Hormis ce réglage relatif à la mémoire, le reste est trivial : le
- processeur, la carte réseau et les disques doivent être suffisamment
- rapides, où "suffisamment rapide" doit être déterminé par
- l'expérience.</p>
-
- <p>Le choix du système d'exploitation dépend principalement du
- contexte local. Voici cependant quelques conseils qui se sont
- généralement avérés utiles :</p>
-
- <ul>
- <li>
- <p>Exécutez la dernière version stable et le niveau de patches le
- plus haut du système d'exploitation que vous avez choisi. De nombreux
- éditeurs de systèmes d'exploitation ont amélioré de manière
- significative les performances de leurs piles TCP et de leurs
- bibliothèques de thread ces dernières années.</p>
- </li>
-
- <li>
- <p>Si votre système d'exploitation possède un appel système
- <code>sendfile(2)</code>, assurez-vous d'avoir installé la version
- et/ou les patches nécessaires à son activation. (Pour Linux, par
- exemple, cela se traduit par Linux 2.4 ou plus. Pour les versions
- anciennes de Solaris 8, vous pouvez être amené à appliquer un patch.)
- Sur les systèmes où il est disponible, <code>sendfile</code> permet
- à Apache 2 de servir les contenus statiques plus rapidement, tout en
- induisant une charge CPU inférieure.</p>
- </li>
- </ul>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="runtime" id="runtime">Optimisation de la configuration à l'exécution</a></h2>
-
-
-
- <table class="related"><tr><th>Modules Apparentés</th><th>Directives Apparentées</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_dir.html">mod_dir</a></code></li><li><code class="module"><a href="../mod/mpm_common.html">mpm_common</a></code></li><li><code class="module"><a href="../mod/mod_status.html">mod_status</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code></li><li><code class="directive"><a href="../mod/mod_dir.html#directoryindex">DirectoryIndex</a></code></li><li><code class="directive"><a href="../mod/core.html#hostnamelookups">HostnameLookups</a></code></li><li><code class="directive"><a href="../mod/core.html#enablemmap">EnableMMAP</a></code></li><li><code class="directive"><a href="../mod/core.html#enablesendfile">EnableSendfile</a></code></li><li><code class="directive"><a href="../mod/core.html#keepalivetimeout">KeepAliveTimeout</a></code></li><li><code class="directive"><a href="../mod/prefork.html#maxspareservers">MaxSpareServers</a></code></li><li><code class="directive"><a href="../mod/prefork.html#minspareservers">MinSpareServers</a></code></li><li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li><li><code class="directive"><a href="../mod/mpm_common.html#startservers">StartServers</a></code></li></ul></td></tr></table>
-
- <h3><a name="dns" id="dns">HostnameLookups et autres considérations à propos du DNS</a></h3>
-
-
-
- <p>Avant Apache 1.3, la directive
- <code class="directive"><a href="../mod/core.html#hostnamelookups">HostnameLookups</a></code> était positionnée
- par défaut à <code>On</code>. Ce réglage augmente le temps de réponse de
- chaque requête car il entraîne une recherche DNS et le traitement de la
- requête ne pourra pas être achevé tant que cette recherche ne sera
- pas terminée. Avec Apache 1.3, ce réglage est défini par défaut à
- <code>Off</code>. Si vous souhaitez que les adresses dans vos fichiers
- journaux soient résolues en noms d'hôtes, utilisez le programme
- <code class="program"><a href="../programs/logresolve.html">logresolve</a></code> fourni avec Apache, ou un des nombreux
- paquets générateurs de rapports sur les journaux disponibles.</p>
-
- <p>Il est recommandé d'effectuer ce genre de traitement a posteriori
- de vos fichiers journaux sur une autre machine que celle qui héberge le
- serveur web en production, afin que cette activité n'affecte pas les
- performances du serveur.</p>
-
- <p>Si vous utilisez une directive
- <code><code class="directive"><a href="../mod/mod_access_compat.html#allow">Allow</a></code>from domain</code>
- ou
- <code><code class="directive"><a href="../mod/mod_access_compat.html#deny">Deny</a></code> from domain</code>
- (ce qui signifie que vous utilisez un nom d'hôte ou un nom de domaine à
- la place d'une adresse IP), vous devrez compter avec deux recherches
- DNS (une recherche inverse suivie d'une recherche directe pour
- s'assurer que l'adresse IP n'a pas été usurpée). C'est pourquoi il est
- préférable, pour améliorer les performances, d'utiliser des adresses IP
- plutôt que des noms lorsqu'on utilise ces directives, du moins chaque
- fois que c'est possible.</p>
-
- <p>Notez qu'il est possible de modifier la portée des directives, en les
- plaçant par exemple à l'intérieur d'une section
- <code><Location /server-status></code>. Les recherches DNS ne
- seront alors effectuées que pour les requêtes qui satisfont aux critères.
- Voici un exemple qui désactive les recherches DNS sauf pour les fichiers
- <code>.html</code> et <code>.cgi</code> :</p>
-
- <div class="example"><p><code>
- HostnameLookups off<br />
- <Files ~ "\.(html|cgi)$"><br />
- <span class="indent">
- HostnameLookups on<br />
- </span>
- </Files>
- </code></p></div>
-
- <p>Mais même dans ce cas, si vous n'avez besoin de noms DNS que dans
- certains CGIs, vous pouvez effectuer l'appel à <code>gethostbyname</code>
- dans les CGIs spécifiques qui en ont besoin.</p>
-
-
-
- <h3><a name="symlinks" id="symlinks">FollowSymLinks et SymLinksIfOwnerMatch</a></h3>
-
-
-
- <p>Chaque fois que la ligne <code>Options FollowSymLinks</code> sera
- absente, ou que la ligne <code>Options SymLinksIfOwnerMatch</code> sera
- présente dans votre espace d'adressage, Apache devra effectuer des
- appels système supplémentaires pour vérifier la présence de liens
- symboliques. Un appel supplémentaire par élément du chemin du fichier.
- Par exemple, si vous avez :</p>
-
- <div class="example"><p><code>
- DocumentRoot /www/htdocs<br />
- <Directory /><br />
- <span class="indent">
- Options SymLinksIfOwnerMatch<br />
- </span>
- </Directory>
- </code></p></div>
-
- <p>et si une requête demande l'URI <code>/index.html</code>, Apache
- effectuera un appel à <code>lstat(2)</code> pour
- <code>/www</code>, <code>/www/htdocs</code>, et
- <code>/www/htdocs/index.html</code>. Les résultats de ces appels à
- <code>lstat</code> ne sont jamais mis en cache, ils devront donc être
- générés à nouveau pour chaque nouvelle requête. Si vous voulez absolument
- vérifier la sécurité des liens symboliques, vous pouvez utiliser une
- configuration du style :</p>
-
- <div class="example"><p><code>
- DocumentRoot /www/htdocs<br />
- <Directory /><br />
- <span class="indent">
- Options FollowSymLinks<br />
- </span>
- </Directory><br />
- <br />
- <Directory /www/htdocs><br />
- <span class="indent">
- Options -FollowSymLinks +SymLinksIfOwnerMatch<br />
- </span>
- </Directory>
- </code></p></div>
-
- <p>Ceci évite au moins les vérifications supplémentaires pour le chemin
- défini par <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>. Notez que
- vous devrez ajouter des sections similaires si vous avez des chemins
- définis par les directives
- <code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code> ou
- <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> en dehors de
- la racine de vos documents. Pour améliorer les performances, et supprimer
- toute protection des liens symboliques, ajoutez l'option
- <code>FollowSymLinks</code> partout, et n'utilisez jamais l'option
- <code>SymLinksIfOwnerMatch</code>.</p>
-
-
-
- <h3><a name="htacess" id="htacess">AllowOverride</a></h3>
-
-
-
- <p>Dans toute partie de votre espace d'adressage où vous autoriserez
- la surcharge de la configuration (en général à l'aide de fichiers
- <code>.htaccess</code>), Apache va tenter d'ouvrir <code>.htaccess</code>
- pour chaque élément du chemin du fichier demandé. Par exemple, si vous
- avez : </p>
-
- <div class="example"><p><code>
- DocumentRoot /www/htdocs<br />
- <Directory /><br />
- <span class="indent">
- AllowOverride all<br />
- </span>
- </Directory>
- </code></p></div>
-
- <p>et qu'une requête demande l'URI <code>/index.html</code>, Apache
- tentera d'ouvrir <code>/.htaccess</code>, <code>/www/.htaccess</code>,
- et <code>/www/htdocs/.htaccess</code>. Les solutions sont similaires à
- celles évoquées précédemment pour <code>Options FollowSymLinks</code>.
- Pour améliorer les performances, utilisez <code>AllowOverride None</code>
- pour tous les niveaux de votre espace d'adressage.</p>
-
-
-
- <h3><a name="negotiation" id="negotiation">Négociation</a></h3>
-
-
-
- <p>Dans la mesure du possible, évitez toute négociation de contenu si
- vous tenez au moindre gain en performances. En pratique toutefois,
- les bénéfices de la négociation l'emportent souvent sur la diminution
- des performances.
- Il y a cependant un cas dans lequel vous pouvez accélérer le serveur.
- Au lieu d'utiliser une directive générique comme :</p>
-
- <div class="example"><p><code>
- DirectoryIndex index
- </code></p></div>
-
- <p>utilisez une liste explicite d'options :</p>
-
- <div class="example"><p><code>
- DirectoryIndex index.cgi index.pl index.shtml index.html
- </code></p></div>
-
- <p>où vous placez le choix courant en première position.</p>
-
- <p>Notez aussi que créer explicitement un fichier de
- <code>correspondances de type</code> fournit de meilleures performances
- que l'utilisation des <code>MultiViews</code>, car les informations
- nécessaires peuvent être simplement obtenues en lisant ce fichier, sans
- avoir à parcourir le répertoire à la recherche de types de fichiers.</p>
-
- <p>Par conséquent, si la négociation de contenu est nécessaire pour votre
- site, préférez les fichiers de <code>correspondances de type</code> aux
- directives <code>Options MultiViews</code> pour mener à bien cette
- négociation. Se référer au document sur la
- <a href="../content-negotiation.html">Négociation de contenu</a> pour une
- description complète des méthodes de négociation, et les instructions
- permettant de créer des fichiers de <code>correspondances de type</code>.</p>
-
-
-
- <h3>Transfert en mémoire</h3>
-
-
-
- <p>Dans les situations où Apache 2.x doit consulter le contenu d'un
- fichier en train d'être servi - par exemple à l'occasion du traitement
- d'une inclusion côté serveur - il transfère en général le fichier en
- mémoire si le système d'exploitation supporte une forme quelconque
- de <code>mmap(2)</code>.</p>
-
- <p>Sur certains systèmes, ce transfert en mémoire améliore les
- performances. Dans certains cas, ce transfert peut toutefois les dégrader
- et même diminuer la stabilité du démon httpd :</p>
-
- <ul>
- <li>
- <p>Dans certains systèmes d'exploitation, <code>mmap</code> devient
- moins efficace que <code>read(2)</code> quand le nombre de
- processeurs augmente. Sur les serveurs multiprocesseurs sous Solaris,
- par exemple, Apache 2.x sert parfois les fichiers consultés par le
- serveur plus rapidement quand <code>mmap</code> est désactivé.</p>
- </li>
-
- <li>
- <p>Si vous transférez en mémoire un fichier localisé dans un système
- de fichiers monté par NFS, et si un processus sur
- une autre machine cliente NFS supprime ou tronque le fichier, votre
- processus peut rencontrer une erreur de bus la prochaine fois qu'il
- essaiera d'accéder au contenu du fichier en mémoire.</p>
- </li>
- </ul>
-
- <p>Pour les installations où une de ces situations peut se produire,
- vous devez utiliser <code>EnableMMAP off</code> afin de désactiver le
- transfert en mémoire des fichiers servis. (Note : il est possible de
- passer outre cette directive au niveau de chaque répertoire.)</p>
-
-
-
- <h3>Sendfile</h3>
-
-
-
- <p>Dans les cas où Apache peut se permettre d'ignorer le contenu du
- fichier à servir - par exemple, lorsqu'il sert un contenu de fichier
- statique - il utilise en général le support sendfile du noyau si le
- système d'exploitation supporte l'opération <code>sendfile(2)</code>.</p>
-
- <p>Sur la plupart des plateformes, l'utilisation de sendfile améliore
- les performances en éliminant les mécanismes de lecture et envoi séparés.
- Dans certains cas cependant, l'utilisation de sendfile peut nuire à la
- stabilité du démon httpd :</p>
-
- <ul>
- <li>
- <p>Certaines plateformes peuvent présenter un support de sendfile
- défaillant que la construction du système n'a pas détecté, en
- particulier si les binaires ont été construits sur une autre machine
- et transférés sur la machine où le support de sendfile est
- défaillant.</p>
- </li>
- <li>
- <p>Dans le cas des fichiers montés sous NFS, le noyau peut s'avérer
- incapable de servir les fichiers réseau de manière fiable depuis
- son propre cache.</p>
- </li>
- </ul>
-
- <p>Pour les installations où une de ces situations peut se produire,
- vous devez utiliser <code>EnableSendfile off</code> afin de désactiver
- la mise à disposition de contenus de fichiers par sendfile. (Note : il
- est possible de passer outre cette directive au niveau de chaque
- répertoire.)</p>
-
-
-
- <h3><a name="process" id="process">Process Creation</a></h3>
-
-
-
- <p>Avant Apache 1.3, les directives
- <code class="directive"><a href="../mod/prefork.html#minspareservers">MinSpareServers</a></code>,
- <code class="directive"><a href="../mod/prefork.html#maxspareservers">MaxSpareServers</a></code>, et
- <code class="directive"><a href="../mod/mpm_common.html#startservers">StartServers</a></code> avaient des
- effets drastiques sur les performances de référence. En particulier,
- Apache avait besoin d'un délai de "montée en puissance" afin d'atteindre
- un nombre de processus enfants suffisant pour supporter la charge qui lui
- était appliquée. Après le lancement initial des processus enfants par
- <code class="directive"><a href="../mod/mpm_common.html#startservers">StartServers</a></code>, seulement un
- processus enfant par seconde était créé afin d'atteindre la valeur de la
- directive <code class="directive"><a href="../mod/prefork.html#minspareservers">MinSpareServers</a></code>. Ainsi,
- un serveur accédé par 100 clients simultanés et utilisant la valeur par
- défaut de <code>5</code> pour la directive
- <code class="directive"><a href="../mod/mpm_common.html#startservers">StartServers</a></code>, nécessitait
- environ 95 secondes pour lancer suffisamment de processus enfants
- permettant de faire face à la charge. Ceci fonctionne en pratique pour
- les serveurs en production, car ils sont rarement redémarrés. Ce n'est
- cependant pas le cas pour les tests de référence (benchmarks) où le
- serveur ne fonctionne que 10 minutes.</p>
-
- <p>La règle "un processus par seconde" avait été implémentée afin
- d'éviter l'enlisement de la machine dans le démarrage de nouveaux
- processus enfants. Pendant que la machine est occupée à lancer des
- processus enfants, elle ne peut pas traiter les requêtes. Mais cette
- règle impactait tellement la perception des performances d'Apache qu'elle
- a dû être remplacée. A partir d'Apache 1.3, le code a assoupli la règle
- "un processus par seconde". Il va en lancer un, attendre une seconde,
- puis en lancer deux, attendre une seconde, puis en lancer quatre et
- ainsi de suite jusqu'à lancer 32 processus. Il s'arrêtera lorsque le
- nombre de processus aura atteint la valeur définie par la directive
- <code class="directive"><a href="../mod/prefork.html#minspareservers">MinSpareServers</a></code>.</p>
-
- <p>Ceci s'avère suffisamment réactif pour pouvoir en général se passer
- de manipuler les valeurs des directives
- <code class="directive"><a href="../mod/prefork.html#minspareservers">MinSpareServers</a></code>,
- <code class="directive"><a href="../mod/prefork.html#maxspareservers">MaxSpareServers</a></code> et
- <code class="directive"><a href="../mod/mpm_common.html#startservers">StartServers</a></code>. Lorsque plus de
- 4 processus enfants sont lancés par seconde, un message est émis vers
- le journal des erreurs. Si vous voyez apparaître souvent ce genre de
- message, vous devez vous pencher sur ces réglages. Pour vous guider,
- utilisez les informations délivrées par le module
- <code class="module"><a href="../mod/mod_status.html">mod_status</a></code>.</p>
-
- <p>À mettre en relation avec la création de processus, leur destruction
- est définie par la valeur de la directive
- <code class="directive"><a href="../mod/mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></code>. Sa valeur
- par défaut est <code>0</code>, ce qui signifie qu'il n'y a pas de limite
- au nombre de requêtes q'un processus enfant peut traiter. Si votre
- configuration actuelle a cette directive réglée à une valeur très basse,
- de l'ordre de <code>30</code>, il est conseillé de l'augmenter de manière
- significative. Si vous utilisez SunOs ou une ancienne version de Solaris,
- utilisez une valeur de l'ordre de <code>10000</code> à cause des fuites
- de mémoire.</p>
-
- <p>Lorsqu'ils sont en mode "keep-alive", les processus enfants sont
- maintenus et ne font rien sinon attendre la prochaine requête sur la
- connexion déjà ouverte. La valeur par défaut de <code>5</code> de la
- directive <code class="directive"><a href="../mod/core.html#keepalivetimeout">KeepAliveTimeout</a></code> tend à
- minimiser cet effet. Il faut trouver le bon compromis entre la bande
- passante réseau et les ressources du serveur. En aucun cas vous ne devez
- choisir une valeur supérieure à <code>60</code> seconds, car
- <a href="http://www.research.digital.com/wrl/techreports/abstracts/95.4.html">
- la plupart des bénéfices sont alors perdus</a>.</p>
-
-
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="compiletime" id="compiletime">Optimisation de la configuration à la compilation</a></h2>
-
-
-
- <h3>Choisir un Module Multi-Processus (MPM)</h3>
-
-
-
- <p>Apache 2.x supporte les modèles simultanés enfichables, appelés
- <a href="../mpm.html">Modules Multi-Processus</a> (MPMs). Vous devez
- choisir un MPM au moment de la construction d'Apache. Certaines
- plateformes ont des modules MPM spécifiques :
- <code class="module"><a href="../mod/mpm_netware.html">mpm_netware</a></code>, et
- <code class="module"><a href="../mod/mpm_winnt.html">mpm_winnt</a></code>. Sur les systèmes de type Unix, vous avez le
- choix entre un grand nombre de modules MPM. Le choix du MPM peut affecter
- la vitesse et l'évolutivité du démon httpd :</p>
-
- <ul>
-
- <li>Le MPM <code class="module"><a href="../mod/worker.html">worker</a></code> utilise plusieurs processus
- enfants possédant chacun de nombreux threads. Chaque thread gère une
- seule connexion à la fois. Worker est en général un bon choix pour les
- serveurs présentant un traffic important car il possède une empreinte
- mémoire plus petite que le MPM prefork.</li>
-
- <li>Le MPM <code class="module"><a href="../mod/prefork.html">prefork</a></code> utilise plusieurs processus enfants
- possédant chacun un seul thread. Chaque processus gère une seule
- connexion à la fois. Sur de nombreux systèmes, prefork est comparable
- en matière de vitesse à worker, mais il utilise plus de mémoire. De par
- sa conception sans thread, prefork présente des avantages par rapport à
- worker dans certaines situations : il peut être utilisé avec les
- modules tiers qui ne supportent pas le threading, et son débogage est plus
- aisé sur les platesformes présentant un support du débogage des threads
- rudimentaire.</li>
-
- </ul>
-
- <p>Pour plus d'informations sur ces deux MPMs et les autres, veuillez
- vous référer à la <a href="../mpm.html">documentation sur les
- MPM</a>.</p>
-
-
-
- <h3><a name="modules" id="modules">Modules</a></h3>
-
-
-
- <p>Comme le contrôle de l'utilisation de la mémoire est très important
- en matière de performance, il est conseillé d'éliminer les modules que
- vous n'utilisez pas vraiment. Si vous avez construit ces modules en
- tant que <a href="../dso.html">DSOs</a>, leur élimination consiste
- simplement à commenter la directive
- <code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code> associée à ce
- module. Ceci vous permet de vérifier si votre site fonctionne toujours
- après la suppression de tel ou tel module.</p>
-
- <p>Par contre, si les modules que vous voulez supprimer sont liés
- statiquement à votre binaire Apache, vous devrez recompiler ce dernier
- afin de pouvoir les éliminer.</p>
-
- <p>La question qui découle de ce qui précède est évidemment de
- savoir de quels modules vous avez besoin et desquels vous pouvez vous
- passer. La réponse sera bien entendu différente d'un site web à
- l'autre. Cependant, la liste <em>minimale</em> de modules nécessaire à
- la survie de votre site contiendra certainement
- <code class="module"><a href="../mod/mod_mime.html">mod_mime</a></code>, <code class="module"><a href="../mod/mod_dir.html">mod_dir</a></code> et
- <code class="module"><a href="../mod/mod_log_config.html">mod_log_config</a></code>. <code>mod_log_config</code> est bien
- entendu optionnel puisque vous pouvez faire fonctionner un site web
- en se passant de fichiers journaux ; ceci est cependant
- déconseillé.</p>
-
-
-
- <h3>Opérations atomiques</h3>
-
-
-
- <p>Certains modules, à l'instar de <code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code> et des
- versions de développement récentes du MPM worker, utilisent l'API
- atomique d'APR. Cette API propose des opérations atomiques que l'on
- peut utiliser pour alléger la synchronisation des threads.</p>
-
- <p>Par défaut, APR implémente ces opérations en utilisant les
- mécanismes les plus efficaces disponibles sur chaque plateforme cible
- (Système d'exploitation et processeur). De nombreux processeurs modernes,
- par exemple, possèdent une instruction qui effectue une opération
- atomique de type comparaison et échange ou compare-and-swap (CAS) au
- niveau matériel. Sur certaines platesformes cependant, APR utilise par
- défaut une implémentation de l'API atomique plus lente, basée sur les
- mutex, afin d'assurer la compatibilité avec les anciens modèles de
- processeurs qui ne possèdent pas ce genre d'instruction. Si vous
- construisez Apache pour une de ces platesformes, et ne prévoyez de
- l'exécuter que sur des processeurs récents, vous pouvez sélectionner une
- implémentation atomique plus rapide à la compilation en utilisant
- l'option <code>--enable-nonportable-atomics</code> du
- script configure :</p>
-
- <div class="example"><p><code>
- ./buildconf<br />
- ./configure --with-mpm=worker --enable-nonportable-atomics=yes
- </code></p></div>
-
- <p>L'option <code>--enable-nonportable-atomics</code> concerne les
- platesformes suivantes :</p>
-
- <ul>
-
- <li>Solaris sur SPARC<br />
- Sur Solaris/SPARC, APR utilise par défaut les opérations
- atomiques basées sur les mutex. Cependant, si vous ajoutez l'option
- <code>--enable-nonportable-atomics</code> au script configure, APR
- génère un code qui utilise le code opération SPARC v8plus pour des
- opérations de compare-and-swap matériel plus rapides. Si vous
- utilisez cette option de configure avec Apache, les opérations
- atomiques seront plus efficaces (permettant d'alléger la charge du
- processeur et un plus haut niveau de simultanéité), mais
- l'exécutable produit ne fonctionnera que sur les processeurs
- UltraSPARC.
- </li>
-
- <li>Linux sur x86<br />
- Sous Linux, APR utilise par défaut les opérations atomiques basées
- sur les mutex. Cependant, si vous ajoutez l'option
- <code>--enable-nonportable-atomics</code> au script configure,
- APR générera un code qui utilise un code d'opération du 486
- pour des opérations de compare-and-swap matériel plus rapides. Le
- code résultant est plus efficace en matière d'opérations atomiques,
- mais l'exécutable produit ne fonctionnera que sur des processeurs
- 486 et supérieurs (et non sur des 386).
- </li>
-
- </ul>
-
-
-
- <h3>Module mod_status et ExtendedStatus On</h3>
-
-
-
- <p>Si vous incluez le module <code class="module"><a href="../mod/mod_status.html">mod_status</a></code> à la
- construction d'Apache et ajoutez <code>ExtendedStatus On</code> à sa
- configuration, Apache va effectuer pour chaque requête deux appels à
- <code>gettimeofday(2)</code> (ou <code>times(2)</code> selon votre
- système d'exploitation), et (pour les versions antérieures à 1.3) de
- nombreux appels supplémentaires à <code>time(2)</code>. Tous ces
- appels sont effectués afin que le rapport de statut puisse contenir
- des indications temporelles. Pour améliorer les performances, utilisez
- <code>ExtendedStatus off</code> (qui est le réglage par défaut).</p>
-
-
-
- <h3>accept Serialization - points de connexion à un programme (sockets) multiples</h3>
-
-
-
- <div class="warning"><h3>Mise en garde :</h3>
- <p>Cette section n'a pas été totalement mise à jour car elle ne tient pas
- compte des changements intervenus dans la version 2.x du Serveur HTTP
- Apache. Certaines informations sont encore pertinentes, il vous est
- cependant conseillé de les utiliser avec prudence.</p>
- </div>
-
- <p>Ce qui suit est une brève discussion à propos de l'API des sockets
- Unix. Supposons que votre serveur web utilise plusieurs directives
- <code class="directive"><a href="../mod/mpm_common.html#listen">Listen</a></code> afin d'écouter
- plusieurs ports ou de multiples adresses. Afin de tester chaque socket
- pour voir s'il a une connexion en attente, Apache utilise
- <code>select(2)</code>. <code>select(2)</code> indique si un socket a
- <em>zéro</em> ou <em>au moins une</em> connexion en attente. Le modèle
- d'Apache comporte plusieurs processus enfants, et tous ceux qui sont
- inactifs testent la présence de nouvelles connexions au même moment.
- Une implémentation rudimentaire de ceci pourrait ressembler à
- l'exemple suivant
- (ces exemples ne sont pas extraits du code d'Apache, ils ne sont
- proposés qu'à des fins pédagogiques) :</p>
-
- <div class="example"><p><code>
- for (;;) {<br />
- <span class="indent">
- for (;;) {<br />
- <span class="indent">
- fd_set accept_fds;<br />
- <br />
- FD_ZERO (&accept_fds);<br />
- for (i = first_socket; i <= last_socket; ++i) {<br />
- <span class="indent">
- FD_SET (i, &accept_fds);<br />
- </span>
- }<br />
- rc = select (last_socket+1, &accept_fds, NULL, NULL, NULL);<br />
- if (rc < 1) continue;<br />
- new_connection = -1;<br />
- for (i = first_socket; i <= last_socket; ++i) {<br />
- <span class="indent">
- if (FD_ISSET (i, &accept_fds)) {<br />
- <span class="indent">
- new_connection = accept (i, NULL, NULL);<br />
- if (new_connection != -1) break;<br />
- </span>
- }<br />
- </span>
- }<br />
- if (new_connection != -1) break;<br />
- </span>
- }<br />
- process the new_connection;<br />
- </span>
- }
- </code></p></div>
-
- <p>Mais cette implémentation rudimentaire présente une sérieuse lacune.
- Rappelez-vous que les processus enfants exécutent cette boucle au même
- moment ; ils vont ainsi bloquer sur <code>select</code> s'ils se trouvent
- entre deux requêtes. Tous ces processus bloqués vont se réactiver et
- sortir de <code>select</code> quand une requête va apparaître sur un des
- sockets (le nombre de processus enfants qui se réactivent varie en
- fonction du système d'exploitation et des réglages de synchronisation).
- Ils vont alors tous entrer dans la boucle et tenter un
- <code>"accept"</code> de la connexion. Mais seulement un d'entre eux y
- parviendra (en supposant qu'il ne reste q'une seule connexion en
- attente), les autres vont se bloquer au niveau de <code>accept</code>.
- Ceci verrouille vraiment ces processus de telle sorte qu'ils ne peuvent
- plus servir de requêtes que par cet unique socket, et il en sera ainsi
- jusqu'à ce que suffisamment de nouvelles requêtes apparaissent sur ce
- socket pour les réactiver tous. Cette lacune a été documentée pour la
- première fois dans
- <a href="http://bugs.apache.org/index/full/467">PR#467</a>. Il existe
- au moins deux solutions.</p>
-
- <p>La première consiste à rendre les sockets non blocants. Dans ce cas,
- <code>accept</code> ne bloquera pas les processus enfants, et ils
- pourront continuer à s'exécuter immédiatement. Mais ceci consomme des
- ressources processeur. Supposons que vous ayez dix processus enfants
- inactifs dans <code>select</code>, et qu'une connexion arrive.
- Neuf des dix processus vont se réactiver, tenter un <code>accept</code>
- de la connexion, échouer, et boucler dans <code>select</code>, tout en
- n'ayant finalement rien accompli. Pendant ce temps, aucun de ces processus
- ne traite les requêtes qui arrivent sur d'autres sockets jusqu'à ce
- qu'ils retournent dans <code>select</code>. Finalement, cette solution
- ne semble pas très efficace, à moins que vous ne disposiez d'autant de
- processeurs inactifs (dans un serveur multiprocesseur) que de processus
- enfants inactifs, ce qui n'est pas une situation très courante.</p>
-
- <p>Une autre solution, celle qu'utilise Apache, consiste à sérialiser les
- entrées dans la boucle interne. La boucle ressemble à ceci (les
- différences sont mises en surbrillance) :</p>
-
- <div class="example"><p><code>
- for (;;) {<br />
- <span class="indent">
- <strong>accept_mutex_on ();</strong><br />
- for (;;) {<br />
- <span class="indent">
- fd_set accept_fds;<br />
- <br />
- FD_ZERO (&accept_fds);<br />
- for (i = first_socket; i <= last_socket; ++i) {<br />
- <span class="indent">
- FD_SET (i, &accept_fds);<br />
- </span>
- }<br />
- rc = select (last_socket+1, &accept_fds, NULL, NULL, NULL);<br />
- if (rc < 1) continue;<br />
- new_connection = -1;<br />
- for (i = first_socket; i <= last_socket; ++i) {<br />
- <span class="indent">
- if (FD_ISSET (i, &accept_fds)) {<br />
- <span class="indent">
- new_connection = accept (i, NULL, NULL);<br />
- if (new_connection != -1) break;<br />
- </span>
- }<br />
- </span>
- }<br />
- if (new_connection != -1) break;<br />
- </span>
- }<br />
- <strong>accept_mutex_off ();</strong><br />
- process the new_connection;<br />
- </span>
- }
- </code></p></div>
-
- <p><a id="serialize" name="serialize">Les fonctions</a>
- <code>accept_mutex_on</code> et <code>accept_mutex_off</code>
- implémentent un sémaphore permettant une exclusion mutuelle. Un seul
- processus enfant à la fois peut posséder le mutex. Plusieurs choix se
- présentent pour implémenter ces mutex. Ce choix est défini dans
- <code>src/conf.h</code> (versions antérieures à 1.3) ou
- <code>src/include/ap_config.h</code> (versions 1.3 ou supérieures).
- Certaines architectures ne font pas ce choix du mode de verrouillage ;
- l'utilisation de directives
- <code class="directive"><a href="../mod/mpm_common.html#listen">Listen</a></code> multiples sur ces
- architectures est donc peu sûr.</p>
-
- <p>On peut utiliser la directive
- <code class="directive"><a href="../mod/mpm_common.html#acceptmutex">AcceptMutex</a></code> pour modifier
- l'implémentation du mutex sélectionnée à l'exécution.</p>
-
- <dl>
- <dt><code>AcceptMutex flock</code></dt>
-
- <dd>
- <p>Cette méthode utilise l'appel système <code>flock(2)</code> pour
- créer un fichier verrou (dont la localisation est définie par la
- directive <code class="directive"><a href="../mod/mpm_common.html#lockfile">LockFile</a></code>.</p>
- </dd>
-
- <dt><code>AcceptMutex fcntl</code></dt>
-
- <dd>
- <p>Cette méthode utilise l'appel système <code>fcntl(2)</code> pour
- créer un fichier verrou ((dont la localisation est définie par la
- directive <code class="directive"><a href="../mod/mpm_common.html#lockfile">LockFile</a></code>.</p>
- </dd>
-
- <dt><code>AcceptMutex sysvsem</code></dt>
-
- <dd>
- <p>(Versions 1.3 ou supérieures) Cette méthode utilise les sémaphores
- style SysV pour implémenter les mutex. Malheureusement, les
- sémaphores style SysV ont quelques effets de bord néfastes. L'un
- d'entre eux est la possibilité pour Apache de s'arrêter sans
- "faire le ménage" dans les sémaphores (voir la page de manuel de
- <code>ipcs(8)</code>). Un autre effet de bord est introduit par
- l'API des sémaphores qui permet à tout CGI s'exécutant sous le même
- uid que le serveur web d'effectuer une attaque par déni de service
- (c'est à dire <em>tous</em> les CGIs, à moins que vous n'utilisiez
- un programme comme <code class="program"><a href="../programs/suexec.html">suexec</a></code> ou
- <code>cgiwrapper</code>)..</p>
- </dd>
-
- <dt><code>AcceptMutex pthread</code></dt>
-
- <dd>
- <p>(versions 1.3 ou supérieures) Cette méthode utilise les mutex
- POSIX et devrait fonctionner sur toute architecture implémentant
- de manière complète la spécification concernant les threads POSIX ;
- il semble cependant qu'elle ne fonctionne que sur Solaris (versions
- 2.5 ou supérieures), et sous certaines configurations seulement. Si
- vous tentez l'expérience, votre serveur risque de se bloquer et de ne
- plus répondre à vos sollicitations. Par contre, les serveurs
- n'hébergeant que du contenu statique devraient fonctionner
- correctement.</p>
- </dd>
-
- <dt><code>AcceptMutex posixsem</code></dt>
-
- <dd>
- <p>(Versions 2.0 ou supérieures) Cette méthode utilise les sémaphores
- POSIX. L'appartenance du sémaphore n'est pas récupérée quand un
- thread du processus qui détient le mutex provoque une erreur de
- segmentation, ce qui a pour effet de bloquer le serveur.</p>
- </dd>
-
- </dl>
-
- <p>Si votre système propose une méthode de sérialisation différente de
- celles de la liste ci-dessus, il pourrait être intéressant d'ajouter à
- APR le code correspondant.</p>
-
- <p>Une autre solution qui a été imaginée mais jamais implémentée, consiste
- à sérialiser partiellement la boucle -- c'est à dire y faire entrer un
- certain nombre de processus. Ceci ne présenterait un intérêt que sur les
- machines multiprocesseurs où plusieurs processus enfants peuvent
- s'exécuter simultanément, et encore, la sérialisation ne tire pas
- vraiment parti de toute la bande passante. C'est une possibilité
- d'investigation future, mais demeure de priorité basse car les serveurs
- web à architecture hautement parallèle ne sont pas la norme.</p>
-
- <p>Pour bien faire, vous devriez faire fonctionner votre serveur sans
- directives <code class="directive"><a href="../mod/mpm_common.html#listen">Listen</a></code> multiples
- si vous visez les performances les plus élevées.
- Mais lisez ce qui suit.</p>
-
-
-
- <h3>accept Serialization - point de connexion à un programme (sockets) unique</h3>
-
-
-
- <p>Ce qui précède convient pour les serveurs à sockets multiples, mais
- qu'en est-il des serveurs à socket unique ? En théorie, ils ne
- devraient pas rencontrer les mêmes problèmes car tous les processus
- enfants peuvent se bloquer dans <code>accept(2)</code> jusqu'à ce qu'une
- connexion arrive, et ils ne sont pas utilisés à ne rien faire. En
- pratique, ceci dissimule un même comportement de bouclage
- discuté plus haut dans la solution non-blocante. De la manière dont
- sont implémentées les piles TCP, le noyau réactive véritablement tous les
- processus bloqués dans <code>accept</code> quand une seule connexion
- arrive. Un de ces processus prend la connexion en compte et retourne
- dans l'espace utilisateur, les autres bouclant dans l'espace du
- noyau et se désactivant quand ils s'aperçoivent qu'il n'y a pas de
- connexion pour eux. Ce bouclage est invisible depuis le code de l'espace
- utilisateur, mais il est quand-même présent. Ceci peut conduire à la
- même augmentation de charge à perte que la solution non blocante au cas
- des sockets multiples peut induire.</p>
-
- <p>Pour cette raison, il apparaît que de nombreuses architectures se
- comportent plus "proprement" si on sérialise même dans le cas d'une socket
- unique. Il s'agit en fait du comportement par défaut dans la plupart des
- cas. Des expériences poussées sous Linux (noyau 2.0.30 sur un
- biprocesseur Pentium pro 166 avec 128 Mo de RAM) ont montré que la
- sérialisation d'une socket unique provoque une diminution inférieure à 3%
- du nombre de requêtes par secondes par rapport au traitement non
- sérialisé. Mais le traitement non sérialisé des sockets uniques induit
- un temps de réponse supplémentaire de 100 ms pour chaque requête. Ce
- temps de réponse est probablement provoqué par une limitation sur les
- lignes à haute charge, et ne constitue un problème que sur les réseaux
- locaux. Si vous voulez vous passer de la sérialisation des sockets
- uniques, vous pouvez définir
- <code>SINGLE_LISTEN_UNSERIALIZED_ACCEPT</code> et les
- serveurs à socket unique ne pratiqueront plus du tout la
- sérialisation.</p>
-
-
-
- <h3>Fermeture en prenant son temps (Lingering close)</h3>
-
-
-
- <p>Comme discuté dans <a href="http://www.ics.uci.edu/pub/ietf/http/draft-ietf-http-connection-00.txt">
- draft-ietf-http-connection-00.txt</a> section 8, pour implémenter de
- manière <strong>fiable</strong> le protocole, un serveur HTTP doit fermer
- les deux directions d'une communication indépendamment (rappelez-vous
- qu'une connexion TCP est bidirectionnelle, chaque direction étant
- indépendante de l'autre). Ce fait, souvent ignoré par les autres
- serveurs, est implémenté correctement dans Apache depuis la
- version 1.2.</p>
-
- <p>Quand cette fonctionnalité fut ajoutée à Apache, elle causa une
- avalanche de problèmes sur plusieurs versions d'Unix à cause d'une
- implémentation à courte vue. La spécification TCP ne précise pas que
- l'état <code>FIN_WAIT_2</code> possède un temps de réponse mais elle ne
- l'exclut pas. Sur les systèmes qui n'introduisent pas ce temps de
- réponse, Apache 1.2 induit de nombreux blocages définitifs de socket
- dans l'état <code>FIN_WAIT_2</code>. On peut eviter ceci dans de nombreux
- cas tout simplement en mettant à jour TCP/IP avec le dernier patch mis à
- disposition par le fournisseur. Dans les cas où le fournisseur n'a
- jamais fourni de patch (par exemple, SunOS4 -- bien que les utilisateurs
- possédant une license source puissent le patcher eux-mêmes), nous avons
- décidé de désactiver cette fonctionnalité.</p>
-
- <p>Il y a deux méthodes pour arriver à ce résultat. La première est
- l'option de socket <code>SO_LINGER</code>. Mais le sort a voulu que cette
- solution ne soit jamais implémentée correctement dans la plupart des
- piles TCP/IP. Et même dans les rares cas où cette solution a été
- implémentée correctement (par exemple Linux 2.0.31), elle se
- montre beaucoup plus gourmande (en temps processeur) que la solution
- suivante.</p>
-
- <p>Pour la plus grande partie, Apache implémente cette solution à l'aide
- d'une fonction appelée <code>lingering_close</code> (définie dans
- <code>http_main.c</code>). La fonction ressemble approximativement à
- ceci :</p>
-
- <div class="example"><p><code>
- void lingering_close (int s)<br />
- {<br />
- <span class="indent">
- char junk_buffer[2048];<br />
- <br />
- /* shutdown the sending side */<br />
- shutdown (s, 1);<br />
- <br />
- signal (SIGALRM, lingering_death);<br />
- alarm (30);<br />
- <br />
- for (;;) {<br />
- <span class="indent">
- select (s for reading, 2 second timeout);<br />
- if (error) break;<br />
- if (s is ready for reading) {<br />
- <span class="indent">
- if (read (s, junk_buffer, sizeof (junk_buffer)) <= 0) {<br />
- <span class="indent">
- break;<br />
- </span>
- }<br />
- /* just toss away whatever is here */<br />
- </span>
- }<br />
- </span>
- }<br />
- <br />
- close (s);<br />
- </span>
- }
- </code></p></div>
-
- <p>Ceci ajoute naturellement un peu de charge à la fin d'une connexion,
- mais s'avère nécessaire pour une implémentation fiable. Comme HTTP/1.1
- est de plus en plus présent et que toutes les connexions sont
- persistentes, la charge sera amortie par la multiplicité des requêtes.
- Si vous voulez jouer avec le feu en désactivant cette fonctionnalité,
- vous pouvez définir <code>NO_LINGCLOSE</code>, mais c'est fortement
- déconseillé. En particulier, comme les connexions persistantes en
- pipeline de HTTP/1.1 commencent à être utilisées,
- <code>lingering_close</code> devient une absolue nécessité (et les
- <a href="http://www.w3.org/Protocols/HTTP/Performance/Pipeline.html">
- connexions en pipeline sont plus rapides</a> ; vous avez donc tout
- intérêt à les supporter).</p>
-
-
-
- <h3>Fichier tableau de bord (Scoreboard file)</h3>
-
-
-
- <p>Les processus parent et enfants d'Apache communiquent entre eux à
- l'aide d'un objet appelé "Tableau de bord" (Scoreboard). Idéalement, cet
- échange devrait s'effectuer en mémoire partagée. Pour les systèmes
- d'exploitation auxquels nous avons eu accès, ou pour lesquels nous avons
- obtenu des informations suffisamment détaillées pour effectuer un
- portage, cet échange est en général implémenté en utilisant la mémoire
- partagée. Pour les autres, on utilise par défaut un fichier d'échange sur
- disque. Le fichier d'échange sur disque est non seulement lent, mais
- aussi peu fiable (et propose moins de fonctionnalités). Recherchez dans
- le fichier <code>src/main/conf.h</code> correspondant à votre
- architecture soit <code>USE_MMAP_SCOREBOARD</code>, soit
- <code>USE_SHMGET_SCOREBOARD</code>. La définition de l'un des deux
- (ainsi que leurs compagnons respectifs <code>HAVE_MMAP</code> et
- <code>HAVE_SHMGET</code>), active le code fourni pour la mémoire
- partagée. Si votre système propose une autre solution pour la gestion de
- la mémoire partagée, éditez le fichier <code>src/main/http_main.c</code>
- et ajoutez la portion de code nécessaire pour pouvoir l'utiliser dans
- Apache (Merci de nous envoyer aussi le patch correspondant).</p>
-
- <div class="note">Note à caractère historique : le portage d'Apache sous Linux
- n'utilisait pas la mémoire partagée avant la version 1.2. Ceci entraînait
- un comportement très rudimentaire et peu fiable des versions antérieures
- d'Apache sous Linux.</div>
-
-
-
- <h3>DYNAMIC_MODULE_LIMIT</h3>
-
-
-
- <p>Si vous n'avez pas l'intention d'utiliser les modules chargés
- dynamiquement (ce qui est probablement le cas si vous êtes en train de
- lire ce document afin de personnaliser votre serveur en recherchant le
- moindre des gains en performances), vous pouvez ajouter la définition
- <code>-DDYNAMIC_MODULE_LIMIT=0</code> à la construction de votre serveur.
- Ceci aura pour effet de libérer la mémoire RAM allouée pour le
- chargement dynamique des modules.</p>
-
-
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="trace" id="trace">Appendice : Analyse détaillée d'une trace</a></h2>
-
-
-
- <p>Voici la trace d'un appel système d'Apache 2.0.38 avec le MPM worker
- sous Solaris 8. Cette trace a été collectée à l'aide de la commande :</p>
-
- <div class="example"><p><code>
- truss -l -p <var>httpd_child_pid</var>.
- </code></p></div>
-
- <p>L'option <code>-l</code> demande à truss de tracer l'ID du LWP
- (lightweight process--la version de Solaris des threads niveau noyau) qui
- invoque chaque appel système.</p>
-
- <p>Les autres systèmes peuvent proposer des utilitaires de traçage
- des appels système différents comme <code>strace</code>,
- <code>ktrace</code>, ou <code>par</code>. Ils produisent cependant tous une
- trace similaire.</p>
-
- <p>Dans cette trace, un client a demandé un fichier statique de 10 ko au
- démon httpd. Le traçage des requêtes pour des contenus non statiques
- ou comportant une négociation de contenu a une présentation
- différente (et même assez laide dans certains cas).</p>
-
- <div class="example"><pre>/67: accept(3, 0x00200BEC, 0x00200C0C, 1) (sleeping...)
-/67: accept(3, 0x00200BEC, 0x00200C0C, 1) = 9</pre></div>
-
- <p>Dans cette trace, le thread à l'écoute s'exécute à l'intérieur de
- LWP #67.</p>
-
- <div class="note">Notez l'absence de la sérialisation d'<code>accept(2)</code>. Sur
- cette plateforme spécifique, le MPM worker utilise un accept non sérialisé
- par défaut sauf s'il est en écoute sur des ports multiples.</div>
-
- <div class="example"><pre>/65: lwp_park(0x00000000, 0) = 0
-/67: lwp_unpark(65, 1) = 0</pre></div>
-
- <p>Après avoir accepté la connexion, le thread à l'écoute réactive un
- thread du worker pour effectuer le traitement de la requête. Dans cette
- trace, le thread du worker qui traite la requête est associé à
- LWP #65.</p>
-
- <div class="example"><pre>/65: getsockname(9, 0x00200BA4, 0x00200BC4, 1) = 0</pre></div>
-
- <p>Afin de pouvoir implémenter les hôtes virtuels, Apache doit connaître
- l'adresse du socket local utilisé pour accepter la connexion. On pourrait
- supprimer cet appel dans de nombreuses situations (par exemple dans le cas
- où il n'y a pas d'hôte virtuel ou dans le cas où les directives
- <code class="directive"><a href="../mod/mpm_common.html#listen">Listen</a></code> contiennent des adresses
- sans caractères de substitution). Mais aucun effort n'a été accompli à ce
- jour pour effectuer ces optimisations.</p>
-
- <div class="example"><pre>/65: brk(0x002170E8) = 0
-/65: brk(0x002190E8) = 0</pre></div>
-
- <p>L'appel <code>brk(2)</code> alloue de la mémoire dans le tas. Ceci est
- rarement visible dans une trace d'appel système, car le démon httpd
- utilise des allocateurs mémoire de son cru (<code>apr_pool</code> et
- <code>apr_bucket_alloc</code>) pour la plupart des traitements de requêtes.
- Dans cette trace, le démon httpd vient juste de démarrer, et il doit
- appeler <code>malloc(3)</code> pour réserver les blocs de mémoire
- nécessaires à la création de ses propres allocateurs de mémoire.</p>
-
- <div class="example"><pre>/65: fcntl(9, F_GETFL, 0x00000000) = 2
-/65: fstat64(9, 0xFAF7B818) = 0
-/65: getsockopt(9, 65535, 8192, 0xFAF7B918, 0xFAF7B910, 2190656) = 0
-/65: fstat64(9, 0xFAF7B818) = 0
-/65: getsockopt(9, 65535, 8192, 0xFAF7B918, 0xFAF7B914, 2190656) = 0
-/65: setsockopt(9, 65535, 8192, 0xFAF7B918, 4, 2190656) = 0
-/65: fcntl(9, F_SETFL, 0x00000082) = 0</pre></div>
-
- <p>Ensuite, le thread de worker passe la connexion du client (descripteur
- de fichier 9) en mode non blocant. Les appels <code>setsockopt(2)</code>
- et <code>getsockopt(2)</code> constituent un effet de bord de la manière
- dont la libc de Solaris utilise <code>fcntl(2)</code> pour les sockets.</p>
-
- <div class="example"><pre>/65: read(9, " G E T / 1 0 k . h t m".., 8000) = 97</pre></div>
-
- <p>Le thread de worker lit la requête du client.</p>
-
- <div class="example"><pre>/65: stat("/var/httpd/apache/httpd-8999/htdocs/10k.html", 0xFAF7B978) = 0
-/65: open("/var/httpd/apache/httpd-8999/htdocs/10k.html", O_RDONLY) = 10</pre></div>
-
- <p>Ce démon httpd a été configuré avec les options
- <code>Options FollowSymLinks</code> et <code>AllowOverride None</code>. Il
- n'a donc ni besoin d'appeler <code>lstat(2)</code> pour chaque répertoire
- du chemin du fichier demandé, ni besoin de vérifier la présence de fichiers
- <code>.htaccess</code>. Il appelle simplement <code>stat(2)</code> pour
- vérifier d'une part que le fichier existe, et d'autre part que c'est un
- fichier régulier, et non un répertoire.</p>
-
- <div class="example"><pre>/65: sendfilev(0, 9, 0x00200F90, 2, 0xFAF7B53C) = 10269</pre></div>
-
- <p>Dans cet exemple, le démon httpd peut envoyer l'en-tête de la réponse
- HTTP et le fichier demandé à l'aide d'un seul appel système
- <code>sendfilev(2)</code>. La sémantique de sendfile varie en fonction des
- systèmes d'exploitation. Sur certains autres systèmes, il faut faire un
- appel à <code>write(2)</code> ou <code>writev(2)</code> pour envoyer les
- en-têtes avant d'appeler <code>sendfile(2)</code>.</p>
-
- <div class="example"><pre>/65: write(4, " 1 2 7 . 0 . 0 . 1 - ".., 78) = 78</pre></div>
-
- <p>Cet appel à <code>write(2)</code> enregistre la requête dans le journal
- des accès. Notez qu'une des choses manquant à cette trace est un appel à
- <code>time(2)</code>. A la différence d'Apache 1.3, Apache 2.x utilise
- <code>gettimeofday(3)</code> pour consulter l'heure. Sur certains systèmes
- d'exploitation, comme Linux ou Solaris, <code>gettimeofday</code> est
- implémenté de manière optimisée de telle sorte qu'il consomme moins de
- ressources qu'un appel système habituel.</p>
-
- <div class="example"><pre>/65: shutdown(9, 1, 1) = 0
-/65: poll(0xFAF7B980, 1, 2000) = 1
-/65: read(9, 0xFAF7BC20, 512) = 0
-/65: close(9) = 0</pre></div>
-
- <p>Le thread de worker effectue une fermeture "en prenant son temps"
- (lingering close) de la connexion.</p>
-
- <div class="example"><pre>/65: close(10) = 0
-/65: lwp_park(0x00000000, 0) (sleeping...)</pre></div>
-
- <p>Enfin, le thread de worker ferme le fichier qu'il vient de délivrer et
- se bloque jusqu'à ce que le thread en écoute lui assigne une autre
- connexion.</p>
-
- <div class="example"><pre>/67: accept(3, 0x001FEB74, 0x001FEB94, 1) (sleeping...)</pre></div>
-
- <p>Pendant ce temps, le thread à l'écoute peut accepter une autre connexion
- à partir du moment où il a assigné la connexion présente à un thread de
- worker (selon une certaine logique de contrôle de flux dans le MPM worker
- qui impose des limites au thread à l'écoute si tous les threads de worker
- sont occupés). Bien que cela n'apparaisse pas dans cette trace,
- l'<code>accept(2)</code> suivant peut (et le fait en général, en situation
- de charge élevée) s'exécuter en parallèle avec le traitement de la
- connexion qui vient d'être acceptée par le thread de worker.</p>
-
- </div></div>
-<div class="bottomlang">
-<p><span>Langues Disponibles: </span><a href="../en/misc/perf-tuning.html" hreflang="en" rel="alternate" title="English"> en </a> |
-<a href="../fr/misc/perf-tuning.html" title="Français"> fr </a> |
-<a href="../ko/misc/perf-tuning.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |
-<a href="../tr/misc/perf-tuning.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>
-</div><div id="footer">
-<p class="apache">Copyright 2009 The Apache Software Foundation.<br />Authorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p></div>
+<?xml version="1.0" encoding="ISO-8859-1"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head><!--\r
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r
+ This file is generated from xml source: DO NOT EDIT\r
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r
+ -->\r
+<title>Optimisation des performances d'Apache - Serveur Apache HTTP</title>\r
+<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />\r
+<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />\r
+<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />\r
+<link href="../images/favicon.ico" rel="shortcut icon" /></head>\r
+<body id="manual-page"><div id="page-header">\r
+<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p>\r
+<p class="apache">Serveur Apache HTTP Version 2.3</p>\r
+<img alt="" src="../images/feather.gif" /></div>\r
+<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div>\r
+<div id="path">\r
+<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Serveur HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.3</a> > <a href="./">Documentations diverses</a></div><div id="page-content"><div id="preamble"><h1>Optimisation des performances d'Apache</h1>\r
+<div class="toplang">\r
+<p><span>Langues Disponibles: </span><a href="../en/misc/perf-tuning.html" hreflang="en" rel="alternate" title="English"> en </a> |\r
+<a href="../fr/misc/perf-tuning.html" title="Français"> fr </a> |\r
+<a href="../ko/misc/perf-tuning.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |\r
+<a href="../tr/misc/perf-tuning.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>\r
+</div>\r
+\r
+\r
+ <p>Apache 2.x est un serveur web à usage général, conçu dans un but\r
+ d'équilibre entre souplesse, portabilité et performances. Bien que non\r
+ conçu dans le seul but d'établir une référence en la matière,\r
+ Apache 2.x est capable de hautes performances dans de nombreuses situations\r
+ du monde réel.</p>\r
+\r
+ <p>Comparée à Apache 1.3, la version 2.x comporte de nombreuses\r
+ optimisations supplémentaires permettant d'améliorer le débit du serveur\r
+ et sa personnalisation. La plupart de ces améliorations sont activées par\r
+ défaut. Cependant, certains choix de configuration à la compilation et à\r
+ l'exécution peuvent affecter les performances de manière significative. Ce\r
+ document décrit les options qu'un administrateur de serveur peut configurer\r
+ pour améliorer les performances d'une installation d'Apache 2.x. Certaines\r
+ de ces options de configuration permettent au démon httpd de mieux tirer\r
+ parti des possibilités du matériel et du système d'exploitation, tandis\r
+ que d'autres permettent à l'administrateur de privilégier la vitesse\r
+ par rapport aux fonctionnalités.</p>\r
+\r
+ </div>\r
+<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#hardware">Problèmes matériels et relatifs au système d'exploitation</a></li>\r
+<li><img alt="" src="../images/down.gif" /> <a href="#runtime">Optimisation de la configuration à l'exécution</a></li>\r
+<li><img alt="" src="../images/down.gif" /> <a href="#compiletime">Optimisation de la configuration à la compilation</a></li>\r
+<li><img alt="" src="../images/down.gif" /> <a href="#trace">Appendice : Analyse détaillée d'une trace</a></li>\r
+</ul></div>\r
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="hardware" id="hardware">Problèmes matériels et relatifs au système d'exploitation</a></h2>\r
+\r
+ \r
+\r
+ <p>Le principal problème matériel qui affecte les performances du serveur\r
+ web est la mémoire vive (RAM). Un serveur web ne devrait jamais avoir à\r
+ utiliser le swap, car le swapping augmente le temps de réponse de chaque\r
+ requête au delà du point que les utilisateurs considèrent comme\r
+ "trop lent". Ceci incite les utilisateurs à cliquer sur "Stop", puis\r
+ "Charger à nouveau", ce qui a pour effet d'augmenter encore la charge\r
+ du serveur. Vous pouvez, et même devez définir la valeur de la directive\r
+ <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code> de façon à ce que\r
+ votre serveur ne lance pas un nombre de processus enfants tel qu'il\r
+ commence à faire du swapping. La méthode pour y parvenir est\r
+ simple : déterminez la taille de votre processus Apache standard en\r
+ consultant votre liste de processus à l'aide d'un outil tel que\r
+ <code>top</code>, et divisez votre quantité totale de mémoire disponible\r
+ par cette taille, tout en gardant un espace suffisant\r
+ pour les autres processus.</p>\r
+\r
+ <p>Hormis ce réglage relatif à la mémoire, le reste est trivial : le\r
+ processeur, la carte réseau et les disques doivent être suffisamment\r
+ rapides, où "suffisamment rapide" doit être déterminé par\r
+ l'expérience.</p>\r
+\r
+ <p>Le choix du système d'exploitation dépend principalement du\r
+ contexte local. Voici cependant quelques conseils qui se sont\r
+ généralement avérés utiles :</p>\r
+\r
+ <ul>\r
+ <li>\r
+ <p>Exécutez la dernière version stable et le niveau de patches le\r
+ plus haut du système d'exploitation que vous avez choisi. De nombreux\r
+ éditeurs de systèmes d'exploitation ont amélioré de manière\r
+ significative les performances de leurs piles TCP et de leurs\r
+ bibliothèques de thread ces dernières années.</p>\r
+ </li>\r
+\r
+ <li>\r
+ <p>Si votre système d'exploitation possède un appel système\r
+ <code>sendfile(2)</code>, assurez-vous d'avoir installé la version\r
+ et/ou les patches nécessaires à son activation. (Pour Linux, par\r
+ exemple, cela se traduit par Linux 2.4 ou plus. Pour les versions\r
+ anciennes de Solaris 8, vous pouvez être amené à appliquer un patch.)\r
+ Sur les systèmes où il est disponible, <code>sendfile</code> permet\r
+ à Apache 2 de servir les contenus statiques plus rapidement, tout en\r
+ induisant une charge CPU inférieure.</p>\r
+ </li>\r
+ </ul>\r
+\r
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="runtime" id="runtime">Optimisation de la configuration à l'exécution</a></h2>\r
+\r
+ \r
+\r
+ <table class="related"><tr><th>Modules Apparentés</th><th>Directives Apparentées</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_dir.html">mod_dir</a></code></li><li><code class="module"><a href="../mod/mpm_common.html">mpm_common</a></code></li><li><code class="module"><a href="../mod/mod_status.html">mod_status</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code></li><li><code class="directive"><a href="../mod/mod_dir.html#directoryindex">DirectoryIndex</a></code></li><li><code class="directive"><a href="../mod/core.html#hostnamelookups">HostnameLookups</a></code></li><li><code class="directive"><a href="../mod/core.html#enablemmap">EnableMMAP</a></code></li><li><code class="directive"><a href="../mod/core.html#enablesendfile">EnableSendfile</a></code></li><li><code class="directive"><a href="../mod/core.html#keepalivetimeout">KeepAliveTimeout</a></code></li><li><code class="directive"><a href="../mod/prefork.html#maxspareservers">MaxSpareServers</a></code></li><li><code class="directive"><a href="../mod/prefork.html#minspareservers">MinSpareServers</a></code></li><li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li><li><code class="directive"><a href="../mod/mpm_common.html#startservers">StartServers</a></code></li></ul></td></tr></table>\r
+\r
+ <h3><a name="dns" id="dns">HostnameLookups et autres considérations à propos du DNS</a></h3>\r
+\r
+ \r
+\r
+ <p>Avant Apache 1.3, la directive\r
+ <code class="directive"><a href="../mod/core.html#hostnamelookups">HostnameLookups</a></code> était positionnée\r
+ par défaut à <code>On</code>. Ce réglage augmente le temps de réponse de\r
+ chaque requête car il entraîne une recherche DNS et le traitement de la\r
+ requête ne pourra pas être achevé tant que cette recherche ne sera\r
+ pas terminée. Avec Apache 1.3, ce réglage est défini par défaut à\r
+ <code>Off</code>. Si vous souhaitez que les adresses dans vos fichiers\r
+ journaux soient résolues en noms d'hôtes, utilisez le programme\r
+ <code class="program"><a href="../programs/logresolve.html">logresolve</a></code> fourni avec Apache, ou un des nombreux\r
+ paquets générateurs de rapports sur les journaux disponibles.</p>\r
+\r
+ <p>Il est recommandé d'effectuer ce genre de traitement a posteriori\r
+ de vos fichiers journaux sur une autre machine que celle qui héberge le\r
+ serveur web en production, afin que cette activité n'affecte pas les\r
+ performances du serveur.</p>\r
+\r
+ <p>Si vous utilisez une directive\r
+ <code><code class="directive"><a href="../mod/mod_access_compat.html#allow">Allow</a></code>from domain</code>\r
+ ou\r
+ <code><code class="directive"><a href="../mod/mod_access_compat.html#deny">Deny</a></code> from domain</code>\r
+ (ce qui signifie que vous utilisez un nom d'hôte ou un nom de domaine à\r
+ la place d'une adresse IP), vous devrez compter avec deux recherches\r
+ DNS (une recherche inverse suivie d'une recherche directe pour\r
+ s'assurer que l'adresse IP n'a pas été usurpée). C'est pourquoi il est\r
+ préférable, pour améliorer les performances, d'utiliser des adresses IP\r
+ plutôt que des noms lorsqu'on utilise ces directives, du moins chaque\r
+ fois que c'est possible.</p>\r
+\r
+ <p>Notez qu'il est possible de modifier la portée des directives, en les\r
+ plaçant par exemple à l'intérieur d'une section\r
+ <code><Location /server-status></code>. Les recherches DNS ne\r
+ seront alors effectuées que pour les requêtes qui satisfont aux critères.\r
+ Voici un exemple qui désactive les recherches DNS sauf pour les fichiers\r
+ <code>.html</code> et <code>.cgi</code> :</p>\r
+\r
+ <div class="example"><p><code>\r
+ HostnameLookups off<br />\r
+ <Files ~ "\.(html|cgi)$"><br />\r
+ <span class="indent">\r
+ HostnameLookups on<br />\r
+ </span>\r
+ </Files>\r
+ </code></p></div>\r
+\r
+ <p>Mais même dans ce cas, si vous n'avez besoin de noms DNS que dans\r
+ certains CGIs, vous pouvez effectuer l'appel à <code>gethostbyname</code>\r
+ dans les CGIs spécifiques qui en ont besoin.</p>\r
+\r
+ \r
+\r
+ <h3><a name="symlinks" id="symlinks">FollowSymLinks et SymLinksIfOwnerMatch</a></h3>\r
+\r
+ \r
+\r
+ <p>Chaque fois que la ligne <code>Options FollowSymLinks</code> sera\r
+ absente, ou que la ligne <code>Options SymLinksIfOwnerMatch</code> sera\r
+ présente dans votre espace d'adressage, Apache devra effectuer des\r
+ appels système supplémentaires pour vérifier la présence de liens\r
+ symboliques. Un appel supplémentaire par élément du chemin du fichier.\r
+ Par exemple, si vous avez :</p>\r
+\r
+ <div class="example"><p><code>\r
+ DocumentRoot /www/htdocs<br />\r
+ <Directory /><br />\r
+ <span class="indent">\r
+ Options SymLinksIfOwnerMatch<br />\r
+ </span>\r
+ </Directory>\r
+ </code></p></div>\r
+\r
+ <p>et si une requête demande l'URI <code>/index.html</code>, Apache\r
+ effectuera un appel à <code>lstat(2)</code> pour\r
+ <code>/www</code>, <code>/www/htdocs</code>, et\r
+ <code>/www/htdocs/index.html</code>. Les résultats de ces appels à\r
+ <code>lstat</code> ne sont jamais mis en cache, ils devront donc être\r
+ générés à nouveau pour chaque nouvelle requête. Si vous voulez absolument\r
+ vérifier la sécurité des liens symboliques, vous pouvez utiliser une\r
+ configuration du style :</p>\r
+\r
+ <div class="example"><p><code>\r
+ DocumentRoot /www/htdocs<br />\r
+ <Directory /><br />\r
+ <span class="indent">\r
+ Options FollowSymLinks<br />\r
+ </span>\r
+ </Directory><br />\r
+ <br />\r
+ <Directory /www/htdocs><br />\r
+ <span class="indent">\r
+ Options -FollowSymLinks +SymLinksIfOwnerMatch<br />\r
+ </span>\r
+ </Directory>\r
+ </code></p></div>\r
+\r
+ <p>Ceci évite au moins les vérifications supplémentaires pour le chemin\r
+ défini par <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>. Notez que\r
+ vous devrez ajouter des sections similaires si vous avez des chemins\r
+ définis par les directives\r
+ <code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code> ou\r
+ <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> en dehors de\r
+ la racine de vos documents. Pour améliorer les performances, et supprimer\r
+ toute protection des liens symboliques, ajoutez l'option\r
+ <code>FollowSymLinks</code> partout, et n'utilisez jamais l'option\r
+ <code>SymLinksIfOwnerMatch</code>.</p>\r
+\r
+ \r
+\r
+ <h3><a name="htacess" id="htacess">AllowOverride</a></h3>\r
+\r
+ \r
+\r
+ <p>Dans toute partie de votre espace d'adressage où vous autoriserez\r
+ la surcharge de la configuration (en général à l'aide de fichiers\r
+ <code>.htaccess</code>), Apache va tenter d'ouvrir <code>.htaccess</code>\r
+ pour chaque élément du chemin du fichier demandé. Par exemple, si vous\r
+ avez : </p>\r
+\r
+ <div class="example"><p><code>\r
+ DocumentRoot /www/htdocs<br />\r
+ <Directory /><br />\r
+ <span class="indent">\r
+ AllowOverride all<br />\r
+ </span>\r
+ </Directory>\r
+ </code></p></div>\r
+\r
+ <p>et qu'une requête demande l'URI <code>/index.html</code>, Apache\r
+ tentera d'ouvrir <code>/.htaccess</code>, <code>/www/.htaccess</code>,\r
+ et <code>/www/htdocs/.htaccess</code>. Les solutions sont similaires à\r
+ celles évoquées précédemment pour <code>Options FollowSymLinks</code>.\r
+ Pour améliorer les performances, utilisez <code>AllowOverride None</code>\r
+ pour tous les niveaux de votre espace d'adressage.</p>\r
+\r
+ \r
+\r
+ <h3><a name="negotiation" id="negotiation">Négociation</a></h3>\r
+\r
+ \r
+\r
+ <p>Dans la mesure du possible, évitez toute négociation de contenu si\r
+ vous tenez au moindre gain en performances. En pratique toutefois,\r
+ les bénéfices de la négociation l'emportent souvent sur la diminution\r
+ des performances.\r
+ Il y a cependant un cas dans lequel vous pouvez accélérer le serveur.\r
+ Au lieu d'utiliser une directive générique comme :</p>\r
+\r
+ <div class="example"><p><code>\r
+ DirectoryIndex index\r
+ </code></p></div>\r
+\r
+ <p>utilisez une liste explicite d'options :</p>\r
+\r
+ <div class="example"><p><code>\r
+ DirectoryIndex index.cgi index.pl index.shtml index.html\r
+ </code></p></div>\r
+\r
+ <p>où vous placez le choix courant en première position.</p>\r
+\r
+ <p>Notez aussi que créer explicitement un fichier de\r
+ <code>correspondances de type</code> fournit de meilleures performances\r
+ que l'utilisation des <code>MultiViews</code>, car les informations\r
+ nécessaires peuvent être simplement obtenues en lisant ce fichier, sans\r
+ avoir à parcourir le répertoire à la recherche de types de fichiers.</p>\r
+\r
+ <p>Par conséquent, si la négociation de contenu est nécessaire pour votre\r
+ site, préférez les fichiers de <code>correspondances de type</code> aux\r
+ directives <code>Options MultiViews</code> pour mener à bien cette\r
+ négociation. Se référer au document sur la\r
+ <a href="../content-negotiation.html">Négociation de contenu</a> pour une\r
+ description complète des méthodes de négociation, et les instructions\r
+ permettant de créer des fichiers de <code>correspondances de type</code>.</p>\r
+\r
+ \r
+\r
+ <h3>Transfert en mémoire</h3>\r
+\r
+ \r
+\r
+ <p>Dans les situations où Apache 2.x doit consulter le contenu d'un\r
+ fichier en train d'être servi - par exemple à l'occasion du traitement\r
+ d'une inclusion côté serveur - il transfère en général le fichier en\r
+ mémoire si le système d'exploitation supporte une forme quelconque\r
+ de <code>mmap(2)</code>.</p>\r
+\r
+ <p>Sur certains systèmes, ce transfert en mémoire améliore les\r
+ performances. Dans certains cas, ce transfert peut toutefois les dégrader\r
+ et même diminuer la stabilité du démon httpd :</p>\r
+\r
+ <ul>\r
+ <li>\r
+ <p>Dans certains systèmes d'exploitation, <code>mmap</code> devient\r
+ moins efficace que <code>read(2)</code> quand le nombre de\r
+ processeurs augmente. Sur les serveurs multiprocesseurs sous Solaris,\r
+ par exemple, Apache 2.x sert parfois les fichiers consultés par le\r
+ serveur plus rapidement quand <code>mmap</code> est désactivé.</p>\r
+ </li>\r
+\r
+ <li>\r
+ <p>Si vous transférez en mémoire un fichier localisé dans un système\r
+ de fichiers monté par NFS, et si un processus sur\r
+ une autre machine cliente NFS supprime ou tronque le fichier, votre\r
+ processus peut rencontrer une erreur de bus la prochaine fois qu'il\r
+ essaiera d'accéder au contenu du fichier en mémoire.</p>\r
+ </li>\r
+ </ul>\r
+\r
+ <p>Pour les installations où une de ces situations peut se produire,\r
+ vous devez utiliser <code>EnableMMAP off</code> afin de désactiver le\r
+ transfert en mémoire des fichiers servis. (Note : il est possible de\r
+ passer outre cette directive au niveau de chaque répertoire.)</p>\r
+\r
+ \r
+\r
+ <h3>Sendfile</h3>\r
+\r
+ \r
+\r
+ <p>Dans les cas où Apache peut se permettre d'ignorer le contenu du\r
+ fichier à servir - par exemple, lorsqu'il sert un contenu de fichier\r
+ statique - il utilise en général le support sendfile du noyau si le\r
+ système d'exploitation supporte l'opération <code>sendfile(2)</code>.</p>\r
+\r
+ <p>Sur la plupart des plateformes, l'utilisation de sendfile améliore\r
+ les performances en éliminant les mécanismes de lecture et envoi séparés.\r
+ Dans certains cas cependant, l'utilisation de sendfile peut nuire à la\r
+ stabilité du démon httpd :</p>\r
+\r
+ <ul>\r
+ <li>\r
+ <p>Certaines plateformes peuvent présenter un support de sendfile\r
+ défaillant que la construction du système n'a pas détecté, en\r
+ particulier si les binaires ont été construits sur une autre machine\r
+ et transférés sur la machine où le support de sendfile est\r
+ défaillant.</p>\r
+ </li>\r
+ <li>\r
+ <p>Dans le cas des fichiers montés sous NFS, le noyau peut s'avérer\r
+ incapable de servir les fichiers réseau de manière fiable depuis\r
+ son propre cache.</p>\r
+ </li>\r
+ </ul>\r
+\r
+ <p>Pour les installations où une de ces situations peut se produire,\r
+ vous devez utiliser <code>EnableSendfile off</code> afin de désactiver\r
+ la mise à disposition de contenus de fichiers par sendfile. (Note : il\r
+ est possible de passer outre cette directive au niveau de chaque\r
+ répertoire.)</p>\r
+\r
+ \r
+\r
+ <h3><a name="process" id="process">Process Creation</a></h3>\r
+\r
+ \r
+\r
+ <p>Avant Apache 1.3, les directives\r
+ <code class="directive"><a href="../mod/prefork.html#minspareservers">MinSpareServers</a></code>,\r
+ <code class="directive"><a href="../mod/prefork.html#maxspareservers">MaxSpareServers</a></code>, et\r
+ <code class="directive"><a href="../mod/mpm_common.html#startservers">StartServers</a></code> avaient des\r
+ effets drastiques sur les performances de référence. En particulier,\r
+ Apache avait besoin d'un délai de "montée en puissance" afin d'atteindre\r
+ un nombre de processus enfants suffisant pour supporter la charge qui lui\r
+ était appliquée. Après le lancement initial des processus enfants par\r
+ <code class="directive"><a href="../mod/mpm_common.html#startservers">StartServers</a></code>, seulement un\r
+ processus enfant par seconde était créé afin d'atteindre la valeur de la\r
+ directive <code class="directive"><a href="../mod/prefork.html#minspareservers">MinSpareServers</a></code>. Ainsi,\r
+ un serveur accédé par 100 clients simultanés et utilisant la valeur par\r
+ défaut de <code>5</code> pour la directive\r
+ <code class="directive"><a href="../mod/mpm_common.html#startservers">StartServers</a></code>, nécessitait\r
+ environ 95 secondes pour lancer suffisamment de processus enfants\r
+ permettant de faire face à la charge. Ceci fonctionne en pratique pour\r
+ les serveurs en production, car ils sont rarement redémarrés. Ce n'est\r
+ cependant pas le cas pour les tests de référence (benchmarks) où le\r
+ serveur ne fonctionne que 10 minutes.</p>\r
+\r
+ <p>La règle "un processus par seconde" avait été implémentée afin\r
+ d'éviter l'enlisement de la machine dans le démarrage de nouveaux\r
+ processus enfants. Pendant que la machine est occupée à lancer des\r
+ processus enfants, elle ne peut pas traiter les requêtes. Mais cette\r
+ règle impactait tellement la perception des performances d'Apache qu'elle\r
+ a dû être remplacée. A partir d'Apache 1.3, le code a assoupli la règle\r
+ "un processus par seconde". Il va en lancer un, attendre une seconde,\r
+ puis en lancer deux, attendre une seconde, puis en lancer quatre et\r
+ ainsi de suite jusqu'à lancer 32 processus. Il s'arrêtera lorsque le\r
+ nombre de processus aura atteint la valeur définie par la directive\r
+ <code class="directive"><a href="../mod/prefork.html#minspareservers">MinSpareServers</a></code>.</p>\r
+\r
+ <p>Ceci s'avère suffisamment réactif pour pouvoir en général se passer\r
+ de manipuler les valeurs des directives\r
+ <code class="directive"><a href="../mod/prefork.html#minspareservers">MinSpareServers</a></code>,\r
+ <code class="directive"><a href="../mod/prefork.html#maxspareservers">MaxSpareServers</a></code> et\r
+ <code class="directive"><a href="../mod/mpm_common.html#startservers">StartServers</a></code>. Lorsque plus de\r
+ 4 processus enfants sont lancés par seconde, un message est émis vers\r
+ le journal des erreurs. Si vous voyez apparaître souvent ce genre de\r
+ message, vous devez vous pencher sur ces réglages. Pour vous guider,\r
+ utilisez les informations délivrées par le module\r
+ <code class="module"><a href="../mod/mod_status.html">mod_status</a></code>.</p>\r
+\r
+ <p>À mettre en relation avec la création de processus, leur destruction\r
+ est définie par la valeur de la directive\r
+ <code class="directive"><a href="../mod/mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></code>. Sa valeur\r
+ par défaut est <code>0</code>, ce qui signifie qu'il n'y a pas de limite\r
+ au nombre de requêtes q'un processus enfant peut traiter. Si votre\r
+ configuration actuelle a cette directive réglée à une valeur très basse,\r
+ de l'ordre de <code>30</code>, il est conseillé de l'augmenter de manière\r
+ significative. Si vous utilisez SunOs ou une ancienne version de Solaris,\r
+ utilisez une valeur de l'ordre de <code>10000</code> à cause des fuites\r
+ de mémoire.</p>\r
+\r
+ <p>Lorsqu'ils sont en mode "keep-alive", les processus enfants sont\r
+ maintenus et ne font rien sinon attendre la prochaine requête sur la\r
+ connexion déjà ouverte. La valeur par défaut de <code>5</code> de la\r
+ directive <code class="directive"><a href="../mod/core.html#keepalivetimeout">KeepAliveTimeout</a></code> tend à\r
+ minimiser cet effet. Il faut trouver le bon compromis entre la bande\r
+ passante réseau et les ressources du serveur. En aucun cas vous ne devez\r
+ choisir une valeur supérieure à <code>60</code> seconds, car\r
+ <a href="http://www.research.digital.com/wrl/techreports/abstracts/95.4.html">\r
+ la plupart des bénéfices sont alors perdus</a>.</p>\r
+\r
+ \r
+\r
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="compiletime" id="compiletime">Optimisation de la configuration à la compilation</a></h2>\r
+\r
+ \r
+\r
+ <h3>Choisir un Module Multi-Processus (MPM)</h3>\r
+\r
+ \r
+\r
+ <p>Apache 2.x supporte les modèles simultanés enfichables, appelés\r
+ <a href="../mpm.html">Modules Multi-Processus</a> (MPMs). Vous devez\r
+ choisir un MPM au moment de la construction d'Apache. Certaines\r
+ plateformes ont des modules MPM spécifiques : \r
+ <code class="module"><a href="../mod/mpm_netware.html">mpm_netware</a></code>, et\r
+ <code class="module"><a href="../mod/mpm_winnt.html">mpm_winnt</a></code>. Sur les systèmes de type Unix, vous avez le\r
+ choix entre un grand nombre de modules MPM. Le choix du MPM peut affecter\r
+ la vitesse et l'évolutivité du démon httpd :</p>\r
+\r
+ <ul>\r
+\r
+ <li>Le MPM <code class="module"><a href="../mod/worker.html">worker</a></code> utilise plusieurs processus\r
+ enfants possédant chacun de nombreux threads. Chaque thread gère une\r
+ seule connexion à la fois. Worker est en général un bon choix pour les\r
+ serveurs présentant un traffic important car il possède une empreinte\r
+ mémoire plus petite que le MPM prefork.</li>\r
+\r
+ <li>Le MPM <code class="module"><a href="../mod/prefork.html">prefork</a></code> utilise plusieurs processus enfants\r
+ possédant chacun un seul thread. Chaque processus gère une seule\r
+ connexion à la fois. Sur de nombreux systèmes, prefork est comparable\r
+ en matière de vitesse à worker, mais il utilise plus de mémoire. De par\r
+ sa conception sans thread, prefork présente des avantages par rapport à\r
+ worker dans certaines situations : il peut être utilisé avec les\r
+ modules tiers qui ne supportent pas le threading, et son débogage est plus\r
+ aisé sur les platesformes présentant un support du débogage des threads\r
+ rudimentaire.</li>\r
+\r
+ </ul>\r
+\r
+ <p>Pour plus d'informations sur ces deux MPMs et les autres, veuillez\r
+ vous référer à la <a href="../mpm.html">documentation sur les\r
+ MPM</a>.</p>\r
+\r
+ \r
+\r
+ <h3><a name="modules" id="modules">Modules</a></h3>\r
+\r
+ \r
+\r
+ <p>Comme le contrôle de l'utilisation de la mémoire est très important\r
+ en matière de performance, il est conseillé d'éliminer les modules que\r
+ vous n'utilisez pas vraiment. Si vous avez construit ces modules en\r
+ tant que <a href="../dso.html">DSOs</a>, leur élimination consiste\r
+ simplement à commenter la directive\r
+ <code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code> associée à ce\r
+ module. Ceci vous permet de vérifier si votre site fonctionne toujours\r
+ après la suppression de tel ou tel module.</p>\r
+\r
+ <p>Par contre, si les modules que vous voulez supprimer sont liés\r
+ statiquement à votre binaire Apache, vous devrez recompiler ce dernier\r
+ afin de pouvoir les éliminer.</p>\r
+\r
+ <p>La question qui découle de ce qui précède est évidemment de\r
+ savoir de quels modules vous avez besoin et desquels vous pouvez vous\r
+ passer. La réponse sera bien entendu différente d'un site web à\r
+ l'autre. Cependant, la liste <em>minimale</em> de modules nécessaire à\r
+ la survie de votre site contiendra certainement\r
+ <code class="module"><a href="../mod/mod_mime.html">mod_mime</a></code>, <code class="module"><a href="../mod/mod_dir.html">mod_dir</a></code> et\r
+ <code class="module"><a href="../mod/mod_log_config.html">mod_log_config</a></code>. <code>mod_log_config</code> est bien\r
+ entendu optionnel puisque vous pouvez faire fonctionner un site web\r
+ en se passant de fichiers journaux ; ceci est cependant\r
+ déconseillé.</p>\r
+\r
+ \r
+\r
+ <h3>Opérations atomiques</h3>\r
+\r
+ \r
+\r
+ <p>Certains modules, à l'instar de <code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code> et des\r
+ versions de développement récentes du MPM worker, utilisent l'API\r
+ atomique d'APR. Cette API propose des opérations atomiques que l'on\r
+ peut utiliser pour alléger la synchronisation des threads.</p>\r
+\r
+ <p>Par défaut, APR implémente ces opérations en utilisant les\r
+ mécanismes les plus efficaces disponibles sur chaque plateforme cible\r
+ (Système d'exploitation et processeur). De nombreux processeurs modernes,\r
+ par exemple, possèdent une instruction qui effectue une opération\r
+ atomique de type comparaison et échange ou compare-and-swap (CAS) au\r
+ niveau matériel. Sur certaines platesformes cependant, APR utilise par\r
+ défaut une implémentation de l'API atomique plus lente, basée sur les\r
+ mutex, afin d'assurer la compatibilité avec les anciens modèles de\r
+ processeurs qui ne possèdent pas ce genre d'instruction. Si vous\r
+ construisez Apache pour une de ces platesformes, et ne prévoyez de\r
+ l'exécuter que sur des processeurs récents, vous pouvez sélectionner une\r
+ implémentation atomique plus rapide à la compilation en utilisant\r
+ l'option <code>--enable-nonportable-atomics</code> du\r
+ script configure :</p>\r
+\r
+ <div class="example"><p><code>\r
+ ./buildconf<br />\r
+ ./configure --with-mpm=worker --enable-nonportable-atomics=yes\r
+ </code></p></div>\r
+\r
+ <p>L'option <code>--enable-nonportable-atomics</code> concerne les\r
+ platesformes suivantes :</p>\r
+\r
+ <ul>\r
+\r
+ <li>Solaris sur SPARC<br />\r
+ Sur Solaris/SPARC, APR utilise par défaut les opérations\r
+ atomiques basées sur les mutex. Cependant, si vous ajoutez l'option\r
+ <code>--enable-nonportable-atomics</code> au script configure, APR\r
+ génère un code qui utilise le code opération SPARC v8plus pour des\r
+ opérations de compare-and-swap matériel plus rapides. Si vous\r
+ utilisez cette option de configure avec Apache, les opérations\r
+ atomiques seront plus efficaces (permettant d'alléger la charge du\r
+ processeur et un plus haut niveau de simultanéité), mais\r
+ l'exécutable produit ne fonctionnera que sur les processeurs\r
+ UltraSPARC.\r
+ </li>\r
+\r
+ <li>Linux sur x86<br />\r
+ Sous Linux, APR utilise par défaut les opérations atomiques basées\r
+ sur les mutex. Cependant, si vous ajoutez l'option\r
+ <code>--enable-nonportable-atomics</code> au script configure,\r
+ APR générera un code qui utilise un code d'opération du 486\r
+ pour des opérations de compare-and-swap matériel plus rapides. Le\r
+ code résultant est plus efficace en matière d'opérations atomiques,\r
+ mais l'exécutable produit ne fonctionnera que sur des processeurs\r
+ 486 et supérieurs (et non sur des 386).\r
+ </li>\r
+\r
+ </ul>\r
+\r
+ \r
+\r
+ <h3>Module mod_status et ExtendedStatus On</h3>\r
+\r
+ \r
+\r
+ <p>Si vous incluez le module <code class="module"><a href="../mod/mod_status.html">mod_status</a></code> à la\r
+ construction d'Apache et ajoutez <code>ExtendedStatus On</code> à sa\r
+ configuration, Apache va effectuer pour chaque requête deux appels à\r
+ <code>gettimeofday(2)</code> (ou <code>times(2)</code> selon votre\r
+ système d'exploitation), et (pour les versions antérieures à 1.3) de\r
+ nombreux appels supplémentaires à <code>time(2)</code>. Tous ces\r
+ appels sont effectués afin que le rapport de statut puisse contenir\r
+ des indications temporelles. Pour améliorer les performances, utilisez\r
+ <code>ExtendedStatus off</code> (qui est le réglage par défaut).</p>\r
+\r
+ \r
+\r
+ <h3>accept Serialization - points de connexion à un programme (sockets) multiples</h3>\r
+\r
+ \r
+\r
+ <div class="warning"><h3>Mise en garde :</h3>\r
+ <p>Cette section n'a pas été totalement mise à jour car elle ne tient pas\r
+ compte des changements intervenus dans la version 2.x du Serveur HTTP\r
+ Apache. Certaines informations sont encore pertinentes, il vous est\r
+ cependant conseillé de les utiliser avec prudence.</p>\r
+ </div>\r
+\r
+ <p>Ce qui suit est une brève discussion à propos de l'API des sockets\r
+ Unix. Supposons que votre serveur web utilise plusieurs directives\r
+ <code class="directive"><a href="../mod/mpm_common.html#listen">Listen</a></code> afin d'écouter\r
+ plusieurs ports ou de multiples adresses. Afin de tester chaque socket\r
+ pour voir s'il a une connexion en attente, Apache utilise\r
+ <code>select(2)</code>. <code>select(2)</code> indique si un socket a\r
+ <em>zéro</em> ou <em>au moins une</em> connexion en attente. Le modèle\r
+ d'Apache comporte plusieurs processus enfants, et tous ceux qui sont\r
+ inactifs testent la présence de nouvelles connexions au même moment.\r
+ Une implémentation rudimentaire de ceci pourrait ressembler à\r
+ l'exemple suivant\r
+ (ces exemples ne sont pas extraits du code d'Apache, ils ne sont\r
+ proposés qu'à des fins pédagogiques) :</p>\r
+\r
+ <div class="example"><p><code>\r
+ for (;;) {<br />\r
+ <span class="indent">\r
+ for (;;) {<br />\r
+ <span class="indent">\r
+ fd_set accept_fds;<br />\r
+ <br />\r
+ FD_ZERO (&accept_fds);<br />\r
+ for (i = first_socket; i <= last_socket; ++i) {<br />\r
+ <span class="indent">\r
+ FD_SET (i, &accept_fds);<br />\r
+ </span>\r
+ }<br />\r
+ rc = select (last_socket+1, &accept_fds, NULL, NULL, NULL);<br />\r
+ if (rc < 1) continue;<br />\r
+ new_connection = -1;<br />\r
+ for (i = first_socket; i <= last_socket; ++i) {<br />\r
+ <span class="indent">\r
+ if (FD_ISSET (i, &accept_fds)) {<br />\r
+ <span class="indent">\r
+ new_connection = accept (i, NULL, NULL);<br />\r
+ if (new_connection != -1) break;<br />\r
+ </span>\r
+ }<br />\r
+ </span>\r
+ }<br />\r
+ if (new_connection != -1) break;<br />\r
+ </span>\r
+ }<br />\r
+ process the new_connection;<br />\r
+ </span>\r
+ }\r
+ </code></p></div>\r
+\r
+ <p>Mais cette implémentation rudimentaire présente une sérieuse lacune.\r
+ Rappelez-vous que les processus enfants exécutent cette boucle au même\r
+ moment ; ils vont ainsi bloquer sur <code>select</code> s'ils se trouvent\r
+ entre deux requêtes. Tous ces processus bloqués vont se réactiver et\r
+ sortir de <code>select</code> quand une requête va apparaître sur un des\r
+ sockets (le nombre de processus enfants qui se réactivent varie en\r
+ fonction du système d'exploitation et des réglages de synchronisation).\r
+ Ils vont alors tous entrer dans la boucle et tenter un\r
+ <code>"accept"</code> de la connexion. Mais seulement un d'entre eux y\r
+ parviendra (en supposant qu'il ne reste q'une seule connexion en\r
+ attente), les autres vont se bloquer au niveau de <code>accept</code>.\r
+ Ceci verrouille vraiment ces processus de telle sorte qu'ils ne peuvent\r
+ plus servir de requêtes que par cet unique socket, et il en sera ainsi\r
+ jusqu'à ce que suffisamment de nouvelles requêtes apparaissent sur ce\r
+ socket pour les réactiver tous. Cette lacune a été documentée pour la\r
+ première fois dans\r
+ <a href="http://bugs.apache.org/index/full/467">PR#467</a>. Il existe\r
+ au moins deux solutions.</p>\r
+\r
+ <p>La première consiste à rendre les sockets non blocants. Dans ce cas,\r
+ <code>accept</code> ne bloquera pas les processus enfants, et ils\r
+ pourront continuer à s'exécuter immédiatement. Mais ceci consomme des\r
+ ressources processeur. Supposons que vous ayez dix processus enfants\r
+ inactifs dans <code>select</code>, et qu'une connexion arrive.\r
+ Neuf des dix processus vont se réactiver, tenter un <code>accept</code>\r
+ de la connexion, échouer, et boucler dans <code>select</code>, tout en\r
+ n'ayant finalement rien accompli. Pendant ce temps, aucun de ces processus\r
+ ne traite les requêtes qui arrivent sur d'autres sockets jusqu'à ce\r
+ qu'ils retournent dans <code>select</code>. Finalement, cette solution\r
+ ne semble pas très efficace, à moins que vous ne disposiez d'autant de\r
+ processeurs inactifs (dans un serveur multiprocesseur) que de processus\r
+ enfants inactifs, ce qui n'est pas une situation très courante.</p>\r
+\r
+ <p>Une autre solution, celle qu'utilise Apache, consiste à sérialiser les\r
+ entrées dans la boucle interne. La boucle ressemble à ceci (les\r
+ différences sont mises en surbrillance) :</p>\r
+\r
+ <div class="example"><p><code>\r
+ for (;;) {<br />\r
+ <span class="indent">\r
+ <strong>accept_mutex_on ();</strong><br />\r
+ for (;;) {<br />\r
+ <span class="indent">\r
+ fd_set accept_fds;<br />\r
+ <br />\r
+ FD_ZERO (&accept_fds);<br />\r
+ for (i = first_socket; i <= last_socket; ++i) {<br />\r
+ <span class="indent">\r
+ FD_SET (i, &accept_fds);<br />\r
+ </span>\r
+ }<br />\r
+ rc = select (last_socket+1, &accept_fds, NULL, NULL, NULL);<br />\r
+ if (rc < 1) continue;<br />\r
+ new_connection = -1;<br />\r
+ for (i = first_socket; i <= last_socket; ++i) {<br />\r
+ <span class="indent">\r
+ if (FD_ISSET (i, &accept_fds)) {<br />\r
+ <span class="indent">\r
+ new_connection = accept (i, NULL, NULL);<br />\r
+ if (new_connection != -1) break;<br />\r
+ </span>\r
+ }<br />\r
+ </span>\r
+ }<br />\r
+ if (new_connection != -1) break;<br />\r
+ </span>\r
+ }<br />\r
+ <strong>accept_mutex_off ();</strong><br />\r
+ process the new_connection;<br />\r
+ </span>\r
+ }\r
+ </code></p></div>\r
+\r
+ <p><a id="serialize" name="serialize">Les fonctions</a>\r
+ <code>accept_mutex_on</code> et <code>accept_mutex_off</code>\r
+ implémentent un sémaphore permettant une exclusion mutuelle. Un seul\r
+ processus enfant à la fois peut posséder le mutex. Plusieurs choix se\r
+ présentent pour implémenter ces mutex. Ce choix est défini dans\r
+ <code>src/conf.h</code> (versions antérieures à 1.3) ou\r
+ <code>src/include/ap_config.h</code> (versions 1.3 ou supérieures).\r
+ Certaines architectures ne font pas ce choix du mode de verrouillage ;\r
+ l'utilisation de directives\r
+ <code class="directive"><a href="../mod/mpm_common.html#listen">Listen</a></code> multiples sur ces\r
+ architectures est donc peu sûr.</p>\r
+\r
+ <p>On peut utiliser la directive\r
+ <code class="directive"><a href="../mod/mpm_common.html#acceptmutex">AcceptMutex</a></code> pour modifier\r
+ l'implémentation du mutex sélectionnée à l'exécution.</p>\r
+\r
+ <dl>\r
+ <dt><code>AcceptMutex flock</code></dt>\r
+\r
+ <dd>\r
+ <p>Cette méthode utilise l'appel système <code>flock(2)</code> pour\r
+ créer un fichier verrou (dont la localisation est définie par la\r
+ directive <code class="directive"><a href="../mod/mpm_common.html#lockfile">LockFile</a></code>.</p>\r
+ </dd>\r
+\r
+ <dt><code>AcceptMutex fcntl</code></dt>\r
+\r
+ <dd>\r
+ <p>Cette méthode utilise l'appel système <code>fcntl(2)</code> pour\r
+ créer un fichier verrou ((dont la localisation est définie par la\r
+ directive <code class="directive"><a href="../mod/mpm_common.html#lockfile">LockFile</a></code>.</p>\r
+ </dd>\r
+\r
+ <dt><code>AcceptMutex sysvsem</code></dt>\r
+\r
+ <dd>\r
+ <p>(Versions 1.3 ou supérieures) Cette méthode utilise les sémaphores\r
+ style SysV pour implémenter les mutex. Malheureusement, les\r
+ sémaphores style SysV ont quelques effets de bord néfastes. L'un\r
+ d'entre eux est la possibilité pour Apache de s'arrêter sans\r
+ "faire le ménage" dans les sémaphores (voir la page de manuel de\r
+ <code>ipcs(8)</code>). Un autre effet de bord est introduit par\r
+ l'API des sémaphores qui permet à tout CGI s'exécutant sous le même\r
+ uid que le serveur web d'effectuer une attaque par déni de service\r
+ (c'est à dire <em>tous</em> les CGIs, à moins que vous n'utilisiez\r
+ un programme comme <code class="program"><a href="../programs/suexec.html">suexec</a></code> ou\r
+ <code>cgiwrapper</code>)..</p>\r
+ </dd>\r
+\r
+ <dt><code>AcceptMutex pthread</code></dt>\r
+\r
+ <dd>\r
+ <p>(versions 1.3 ou supérieures) Cette méthode utilise les mutex\r
+ POSIX et devrait fonctionner sur toute architecture implémentant\r
+ de manière complète la spécification concernant les threads POSIX ;\r
+ il semble cependant qu'elle ne fonctionne que sur Solaris (versions\r
+ 2.5 ou supérieures), et sous certaines configurations seulement. Si\r
+ vous tentez l'expérience, votre serveur risque de se bloquer et de ne\r
+ plus répondre à vos sollicitations. Par contre, les serveurs\r
+ n'hébergeant que du contenu statique devraient fonctionner\r
+ correctement.</p>\r
+ </dd>\r
+\r
+ <dt><code>AcceptMutex posixsem</code></dt>\r
+\r
+ <dd>\r
+ <p>(Versions 2.0 ou supérieures) Cette méthode utilise les sémaphores\r
+ POSIX. L'appartenance du sémaphore n'est pas récupérée quand un\r
+ thread du processus qui détient le mutex provoque une erreur de\r
+ segmentation, ce qui a pour effet de bloquer le serveur.</p>\r
+ </dd>\r
+\r
+ </dl>\r
+\r
+ <p>Si votre système propose une méthode de sérialisation différente de\r
+ celles de la liste ci-dessus, il pourrait être intéressant d'ajouter à\r
+ APR le code correspondant.</p>\r
+\r
+ <p>Une autre solution qui a été imaginée mais jamais implémentée, consiste\r
+ à sérialiser partiellement la boucle -- c'est à dire y faire entrer un\r
+ certain nombre de processus. Ceci ne présenterait un intérêt que sur les\r
+ machines multiprocesseurs où plusieurs processus enfants peuvent\r
+ s'exécuter simultanément, et encore, la sérialisation ne tire pas\r
+ vraiment parti de toute la bande passante. C'est une possibilité\r
+ d'investigation future, mais demeure de priorité basse car les serveurs\r
+ web à architecture hautement parallèle ne sont pas la norme.</p>\r
+\r
+ <p>Pour bien faire, vous devriez faire fonctionner votre serveur sans\r
+ directives <code class="directive"><a href="../mod/mpm_common.html#listen">Listen</a></code> multiples\r
+ si vous visez les performances les plus élevées.\r
+ Mais lisez ce qui suit.</p>\r
+\r
+ \r
+\r
+ <h3>accept Serialization - point de connexion à un programme (sockets) unique</h3>\r
+\r
+ \r
+\r
+ <p>Ce qui précède convient pour les serveurs à sockets multiples, mais\r
+ qu'en est-il des serveurs à socket unique ? En théorie, ils ne\r
+ devraient pas rencontrer les mêmes problèmes car tous les processus\r
+ enfants peuvent se bloquer dans <code>accept(2)</code> jusqu'à ce qu'une\r
+ connexion arrive, et ils ne sont pas utilisés à ne rien faire. En\r
+ pratique, ceci dissimule un même comportement de bouclage\r
+ discuté plus haut dans la solution non-blocante. De la manière dont\r
+ sont implémentées les piles TCP, le noyau réactive véritablement tous les\r
+ processus bloqués dans <code>accept</code> quand une seule connexion\r
+ arrive. Un de ces processus prend la connexion en compte et retourne\r
+ dans l'espace utilisateur, les autres bouclant dans l'espace du\r
+ noyau et se désactivant quand ils s'aperçoivent qu'il n'y a pas de\r
+ connexion pour eux. Ce bouclage est invisible depuis le code de l'espace\r
+ utilisateur, mais il est quand-même présent. Ceci peut conduire à la\r
+ même augmentation de charge à perte que la solution non blocante au cas\r
+ des sockets multiples peut induire.</p>\r
+\r
+ <p>Pour cette raison, il apparaît que de nombreuses architectures se\r
+ comportent plus "proprement" si on sérialise même dans le cas d'une socket\r
+ unique. Il s'agit en fait du comportement par défaut dans la plupart des\r
+ cas. Des expériences poussées sous Linux (noyau 2.0.30 sur un\r
+ biprocesseur Pentium pro 166 avec 128 Mo de RAM) ont montré que la\r
+ sérialisation d'une socket unique provoque une diminution inférieure à 3%\r
+ du nombre de requêtes par secondes par rapport au traitement non\r
+ sérialisé. Mais le traitement non sérialisé des sockets uniques induit\r
+ un temps de réponse supplémentaire de 100 ms pour chaque requête. Ce\r
+ temps de réponse est probablement provoqué par une limitation sur les\r
+ lignes à haute charge, et ne constitue un problème que sur les réseaux\r
+ locaux. Si vous voulez vous passer de la sérialisation des sockets\r
+ uniques, vous pouvez définir\r
+ <code>SINGLE_LISTEN_UNSERIALIZED_ACCEPT</code> et les\r
+ serveurs à socket unique ne pratiqueront plus du tout la\r
+ sérialisation.</p>\r
+\r
+ \r
+\r
+ <h3>Fermeture en prenant son temps (Lingering close)</h3>\r
+\r
+ \r
+\r
+ <p>Comme discuté dans <a href="http://www.ics.uci.edu/pub/ietf/http/draft-ietf-http-connection-00.txt">\r
+ draft-ietf-http-connection-00.txt</a> section 8, pour implémenter de\r
+ manière <strong>fiable</strong> le protocole, un serveur HTTP doit fermer\r
+ les deux directions d'une communication indépendamment (rappelez-vous\r
+ qu'une connexion TCP est bidirectionnelle, chaque direction étant\r
+ indépendante de l'autre). Ce fait, souvent ignoré par les autres\r
+ serveurs, est implémenté correctement dans Apache depuis la\r
+ version 1.2.</p>\r
+\r
+ <p>Quand cette fonctionnalité fut ajoutée à Apache, elle causa une\r
+ avalanche de problèmes sur plusieurs versions d'Unix à cause d'une\r
+ implémentation à courte vue. La spécification TCP ne précise pas que\r
+ l'état <code>FIN_WAIT_2</code> possède un temps de réponse mais elle ne\r
+ l'exclut pas. Sur les systèmes qui n'introduisent pas ce temps de\r
+ réponse, Apache 1.2 induit de nombreux blocages définitifs de socket\r
+ dans l'état <code>FIN_WAIT_2</code>. On peut eviter ceci dans de nombreux\r
+ cas tout simplement en mettant à jour TCP/IP avec le dernier patch mis à\r
+ disposition par le fournisseur. Dans les cas où le fournisseur n'a\r
+ jamais fourni de patch (par exemple, SunOS4 -- bien que les utilisateurs\r
+ possédant une license source puissent le patcher eux-mêmes), nous avons\r
+ décidé de désactiver cette fonctionnalité.</p>\r
+\r
+ <p>Il y a deux méthodes pour arriver à ce résultat. La première est\r
+ l'option de socket <code>SO_LINGER</code>. Mais le sort a voulu que cette\r
+ solution ne soit jamais implémentée correctement dans la plupart des\r
+ piles TCP/IP. Et même dans les rares cas où cette solution a été\r
+ implémentée correctement (par exemple Linux 2.0.31), elle se\r
+ montre beaucoup plus gourmande (en temps processeur) que la solution\r
+ suivante.</p>\r
+\r
+ <p>Pour la plus grande partie, Apache implémente cette solution à l'aide\r
+ d'une fonction appelée <code>lingering_close</code> (définie dans\r
+ <code>http_main.c</code>). La fonction ressemble approximativement à\r
+ ceci :</p>\r
+\r
+ <div class="example"><p><code>\r
+ void lingering_close (int s)<br />\r
+ {<br />\r
+ <span class="indent">\r
+ char junk_buffer[2048];<br />\r
+ <br />\r
+ /* shutdown the sending side */<br />\r
+ shutdown (s, 1);<br />\r
+ <br />\r
+ signal (SIGALRM, lingering_death);<br />\r
+ alarm (30);<br />\r
+ <br />\r
+ for (;;) {<br />\r
+ <span class="indent">\r
+ select (s for reading, 2 second timeout);<br />\r
+ if (error) break;<br />\r
+ if (s is ready for reading) {<br />\r
+ <span class="indent">\r
+ if (read (s, junk_buffer, sizeof (junk_buffer)) <= 0) {<br />\r
+ <span class="indent">\r
+ break;<br />\r
+ </span>\r
+ }<br />\r
+ /* just toss away whatever is here */<br />\r
+ </span>\r
+ }<br />\r
+ </span>\r
+ }<br />\r
+ <br />\r
+ close (s);<br />\r
+ </span>\r
+ }\r
+ </code></p></div>\r
+\r
+ <p>Ceci ajoute naturellement un peu de charge à la fin d'une connexion,\r
+ mais s'avère nécessaire pour une implémentation fiable. Comme HTTP/1.1\r
+ est de plus en plus présent et que toutes les connexions sont\r
+ persistentes, la charge sera amortie par la multiplicité des requêtes.\r
+ Si vous voulez jouer avec le feu en désactivant cette fonctionnalité,\r
+ vous pouvez définir <code>NO_LINGCLOSE</code>, mais c'est fortement\r
+ déconseillé. En particulier, comme les connexions persistantes en\r
+ pipeline de HTTP/1.1 commencent à être utilisées,\r
+ <code>lingering_close</code> devient une absolue nécessité (et les\r
+ <a href="http://www.w3.org/Protocols/HTTP/Performance/Pipeline.html">\r
+ connexions en pipeline sont plus rapides</a> ; vous avez donc tout\r
+ intérêt à les supporter).</p>\r
+\r
+ \r
+\r
+ <h3>Fichier tableau de bord (Scoreboard file)</h3>\r
+\r
+ \r
+\r
+ <p>Les processus parent et enfants d'Apache communiquent entre eux à\r
+ l'aide d'un objet appelé "Tableau de bord" (Scoreboard). Idéalement, cet\r
+ échange devrait s'effectuer en mémoire partagée. Pour les systèmes\r
+ d'exploitation auxquels nous avons eu accès, ou pour lesquels nous avons\r
+ obtenu des informations suffisamment détaillées pour effectuer un\r
+ portage, cet échange est en général implémenté en utilisant la mémoire\r
+ partagée. Pour les autres, on utilise par défaut un fichier d'échange sur\r
+ disque. Le fichier d'échange sur disque est non seulement lent, mais\r
+ aussi peu fiable (et propose moins de fonctionnalités). Recherchez dans\r
+ le fichier <code>src/main/conf.h</code> correspondant à votre\r
+ architecture soit <code>USE_MMAP_SCOREBOARD</code>, soit\r
+ <code>USE_SHMGET_SCOREBOARD</code>. La définition de l'un des deux\r
+ (ainsi que leurs compagnons respectifs <code>HAVE_MMAP</code> et\r
+ <code>HAVE_SHMGET</code>), active le code fourni pour la mémoire\r
+ partagée. Si votre système propose une autre solution pour la gestion de\r
+ la mémoire partagée, éditez le fichier <code>src/main/http_main.c</code>\r
+ et ajoutez la portion de code nécessaire pour pouvoir l'utiliser dans\r
+ Apache (Merci de nous envoyer aussi le patch correspondant).</p>\r
+\r
+ <div class="note">Note à caractère historique : le portage d'Apache sous Linux\r
+ n'utilisait pas la mémoire partagée avant la version 1.2. Ceci entraînait\r
+ un comportement très rudimentaire et peu fiable des versions antérieures\r
+ d'Apache sous Linux.</div>\r
+\r
+ \r
+\r
+ <h3>DYNAMIC_MODULE_LIMIT</h3>\r
+\r
+ \r
+\r
+ <p>Si vous n'avez pas l'intention d'utiliser les modules chargés\r
+ dynamiquement (ce qui est probablement le cas si vous êtes en train de\r
+ lire ce document afin de personnaliser votre serveur en recherchant le\r
+ moindre des gains en performances), vous pouvez ajouter la définition\r
+ <code>-DDYNAMIC_MODULE_LIMIT=0</code> à la construction de votre serveur.\r
+ Ceci aura pour effet de libérer la mémoire RAM allouée pour le\r
+ chargement dynamique des modules.</p>\r
+\r
+ \r
+\r
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="trace" id="trace">Appendice : Analyse détaillée d'une trace</a></h2>\r
+\r
+ \r
+\r
+ <p>Voici la trace d'un appel système d'Apache 2.0.38 avec le MPM worker\r
+ sous Solaris 8. Cette trace a été collectée à l'aide de la commande :</p>\r
+\r
+ <div class="example"><p><code>\r
+ truss -l -p <var>httpd_child_pid</var>.\r
+ </code></p></div>\r
+\r
+ <p>L'option <code>-l</code> demande à truss de tracer l'ID du LWP\r
+ (lightweight process--la version de Solaris des threads niveau noyau) qui\r
+ invoque chaque appel système.</p>\r
+\r
+ <p>Les autres systèmes peuvent proposer des utilitaires de traçage\r
+ des appels système différents comme <code>strace</code>,\r
+ <code>ktrace</code>, ou <code>par</code>. Ils produisent cependant tous une\r
+ trace similaire.</p>\r
+\r
+ <p>Dans cette trace, un client a demandé un fichier statique de 10 ko au\r
+ démon httpd. Le traçage des requêtes pour des contenus non statiques\r
+ ou comportant une négociation de contenu a une présentation\r
+ différente (et même assez laide dans certains cas).</p>\r
+\r
+ <div class="example"><pre>/67: accept(3, 0x00200BEC, 0x00200C0C, 1) (sleeping...)\r
+/67: accept(3, 0x00200BEC, 0x00200C0C, 1) = 9</pre></div>\r
+\r
+ <p>Dans cette trace, le thread à l'écoute s'exécute à l'intérieur de\r
+ LWP #67.</p>\r
+\r
+ <div class="note">Notez l'absence de la sérialisation d'<code>accept(2)</code>. Sur\r
+ cette plateforme spécifique, le MPM worker utilise un accept non sérialisé\r
+ par défaut sauf s'il est en écoute sur des ports multiples.</div>\r
+\r
+ <div class="example"><pre>/65: lwp_park(0x00000000, 0) = 0\r
+/67: lwp_unpark(65, 1) = 0</pre></div>\r
+\r
+ <p>Après avoir accepté la connexion, le thread à l'écoute réactive un\r
+ thread du worker pour effectuer le traitement de la requête. Dans cette\r
+ trace, le thread du worker qui traite la requête est associé à\r
+ LWP #65.</p>\r
+\r
+ <div class="example"><pre>/65: getsockname(9, 0x00200BA4, 0x00200BC4, 1) = 0</pre></div>\r
+\r
+ <p>Afin de pouvoir implémenter les hôtes virtuels, Apache doit connaître\r
+ l'adresse du socket local utilisé pour accepter la connexion. On pourrait\r
+ supprimer cet appel dans de nombreuses situations (par exemple dans le cas\r
+ où il n'y a pas d'hôte virtuel ou dans le cas où les directives\r
+ <code class="directive"><a href="../mod/mpm_common.html#listen">Listen</a></code> contiennent des adresses\r
+ sans caractères de substitution). Mais aucun effort n'a été accompli à ce\r
+ jour pour effectuer ces optimisations.</p>\r
+\r
+ <div class="example"><pre>/65: brk(0x002170E8) = 0\r
+/65: brk(0x002190E8) = 0</pre></div>\r
+\r
+ <p>L'appel <code>brk(2)</code> alloue de la mémoire dans le tas. Ceci est\r
+ rarement visible dans une trace d'appel système, car le démon httpd\r
+ utilise des allocateurs mémoire de son cru (<code>apr_pool</code> et\r
+ <code>apr_bucket_alloc</code>) pour la plupart des traitements de requêtes.\r
+ Dans cette trace, le démon httpd vient juste de démarrer, et il doit\r
+ appeler <code>malloc(3)</code> pour réserver les blocs de mémoire\r
+ nécessaires à la création de ses propres allocateurs de mémoire.</p>\r
+\r
+ <div class="example"><pre>/65: fcntl(9, F_GETFL, 0x00000000) = 2\r
+/65: fstat64(9, 0xFAF7B818) = 0\r
+/65: getsockopt(9, 65535, 8192, 0xFAF7B918, 0xFAF7B910, 2190656) = 0\r
+/65: fstat64(9, 0xFAF7B818) = 0\r
+/65: getsockopt(9, 65535, 8192, 0xFAF7B918, 0xFAF7B914, 2190656) = 0\r
+/65: setsockopt(9, 65535, 8192, 0xFAF7B918, 4, 2190656) = 0\r
+/65: fcntl(9, F_SETFL, 0x00000082) = 0</pre></div>\r
+\r
+ <p>Ensuite, le thread de worker passe la connexion du client (descripteur\r
+ de fichier 9) en mode non blocant. Les appels <code>setsockopt(2)</code>\r
+ et <code>getsockopt(2)</code> constituent un effet de bord de la manière\r
+ dont la libc de Solaris utilise <code>fcntl(2)</code> pour les sockets.</p>\r
+\r
+ <div class="example"><pre>/65: read(9, " G E T / 1 0 k . h t m".., 8000) = 97</pre></div>\r
+\r
+ <p>Le thread de worker lit la requête du client.</p>\r
+\r
+ <div class="example"><pre>/65: stat("/var/httpd/apache/httpd-8999/htdocs/10k.html", 0xFAF7B978) = 0\r
+/65: open("/var/httpd/apache/httpd-8999/htdocs/10k.html", O_RDONLY) = 10</pre></div>\r
+\r
+ <p>Ce démon httpd a été configuré avec les options\r
+ <code>Options FollowSymLinks</code> et <code>AllowOverride None</code>. Il\r
+ n'a donc ni besoin d'appeler <code>lstat(2)</code> pour chaque répertoire\r
+ du chemin du fichier demandé, ni besoin de vérifier la présence de fichiers\r
+ <code>.htaccess</code>. Il appelle simplement <code>stat(2)</code> pour\r
+ vérifier d'une part que le fichier existe, et d'autre part que c'est un\r
+ fichier régulier, et non un répertoire.</p>\r
+\r
+ <div class="example"><pre>/65: sendfilev(0, 9, 0x00200F90, 2, 0xFAF7B53C) = 10269</pre></div>\r
+\r
+ <p>Dans cet exemple, le démon httpd peut envoyer l'en-tête de la réponse\r
+ HTTP et le fichier demandé à l'aide d'un seul appel système\r
+ <code>sendfilev(2)</code>. La sémantique de sendfile varie en fonction des\r
+ systèmes d'exploitation. Sur certains autres systèmes, il faut faire un\r
+ appel à <code>write(2)</code> ou <code>writev(2)</code> pour envoyer les\r
+ en-têtes avant d'appeler <code>sendfile(2)</code>.</p>\r
+\r
+ <div class="example"><pre>/65: write(4, " 1 2 7 . 0 . 0 . 1 - ".., 78) = 78</pre></div>\r
+\r
+ <p>Cet appel à <code>write(2)</code> enregistre la requête dans le journal\r
+ des accès. Notez qu'une des choses manquant à cette trace est un appel à\r
+ <code>time(2)</code>. A la différence d'Apache 1.3, Apache 2.x utilise\r
+ <code>gettimeofday(3)</code> pour consulter l'heure. Sur certains systèmes\r
+ d'exploitation, comme Linux ou Solaris, <code>gettimeofday</code> est\r
+ implémenté de manière optimisée de telle sorte qu'il consomme moins de\r
+ ressources qu'un appel système habituel.</p>\r
+\r
+ <div class="example"><pre>/65: shutdown(9, 1, 1) = 0\r
+/65: poll(0xFAF7B980, 1, 2000) = 1\r
+/65: read(9, 0xFAF7BC20, 512) = 0\r
+/65: close(9) = 0</pre></div>\r
+\r
+ <p>Le thread de worker effectue une fermeture "en prenant son temps"\r
+ (lingering close) de la connexion.</p>\r
+\r
+ <div class="example"><pre>/65: close(10) = 0\r
+/65: lwp_park(0x00000000, 0) (sleeping...)</pre></div>\r
+\r
+ <p>Enfin, le thread de worker ferme le fichier qu'il vient de délivrer et\r
+ se bloque jusqu'à ce que le thread en écoute lui assigne une autre\r
+ connexion.</p>\r
+\r
+ <div class="example"><pre>/67: accept(3, 0x001FEB74, 0x001FEB94, 1) (sleeping...)</pre></div>\r
+\r
+ <p>Pendant ce temps, le thread à l'écoute peut accepter une autre connexion\r
+ à partir du moment où il a assigné la connexion présente à un thread de\r
+ worker (selon une certaine logique de contrôle de flux dans le MPM worker\r
+ qui impose des limites au thread à l'écoute si tous les threads de worker\r
+ sont occupés). Bien que cela n'apparaisse pas dans cette trace,\r
+ l'<code>accept(2)</code> suivant peut (et le fait en général, en situation\r
+ de charge élevée) s'exécuter en parallèle avec le traitement de la\r
+ connexion qui vient d'être acceptée par le thread de worker.</p>\r
+\r
+ </div></div>\r
+<div class="bottomlang">\r
+<p><span>Langues Disponibles: </span><a href="../en/misc/perf-tuning.html" hreflang="en" rel="alternate" title="English"> en </a> |\r
+<a href="../fr/misc/perf-tuning.html" title="Français"> fr </a> |\r
+<a href="../ko/misc/perf-tuning.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |\r
+<a href="../tr/misc/perf-tuning.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>\r
+</div><div id="footer">\r
+<p class="apache">Copyright 2009 The Apache Software Foundation.<br />Authorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>\r
+<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p></div>\r
</body></html>
\ No newline at end of file
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Conseils sur la sécurité - Serveur Apache HTTP</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page"><div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p>
-<p class="apache">Serveur Apache HTTP Version 2.3</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Serveur HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.3</a> > <a href="./">Documentations diverses</a></div><div id="page-content"><div id="preamble"><h1>Conseils sur la sécurité</h1>
-<div class="toplang">
-<p><span>Langues Disponibles: </span><a href="../en/misc/security_tips.html" hreflang="en" rel="alternate" title="English"> en </a> |
-<a href="../fr/misc/security_tips.html" title="Français"> fr </a> |
-<a href="../ko/misc/security_tips.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |
-<a href="../tr/misc/security_tips.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>
-</div>
-
- <p>Ce document propose quelques conseils et astuces concernant les
- problèmes de sécurité liés
- à l'installation d'un serveur web. Certaines suggestions seront à caractère
- général, tandis que d'autres seront spécifiques à Apache.</p>
- </div>
-<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#uptodate">Maintenez votre serveur à jour</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#dos">Attaques de type "Déni de service"
- (Denial of Service - DoS)</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#serverroot">Permissions sur les répertoires de la racine du serveur</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#ssi">Inclusions côté serveur</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#cgi">Les CGI en général</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#nsaliasedcgi">CGI sans alias de script</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#saliasedcgi">CGI avec alias de script</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#dynamic">Autres sources de contenu dynamique</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#systemsettings">Protection de la configuration du système</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#protectserverfiles">Protection par défaut des fichiers du serveur</a></li>
-<li><img alt="" src="../images/down.gif" /> <a href="#watchyourlogs">Surveillez vos journaux</a></li>
-</ul></div>
-<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="uptodate" id="uptodate">Maintenez votre serveur à jour</a></h2>
-
- <p>Le serveur HTTP Apache a une bonne réputation en matière de sécurité
- et possède une communauté de développeurs très sensibilisés aux problèmes
- de sécurité. Mais il est inévitable de trouver certains problèmes
- -- petits ou grands -- une fois le logiciel mis à disposition. C'est pour
- cette raison qu'il est crucial de se tenir informé des mises à jour. Si
- vous avez obtenu votre version du serveur HTTP directement depuis Apache,
- nous vous conseillons grandement de vous abonner à la <a href="http://httpd.apache.org/lists.html#http-announce">Liste de diffusion
- des annonces du serveur HTTP</a> qui vous informera de
- la parution des nouvelles versions et des mises à jour de sécurité. La
- plupart des distributeurs tiers d'Apache fournissent des services
- similaires.</p>
-
- <p>Gardez cependant à l'esprit que lorsqu'un serveur web est compromis, le
- code du serveur HTTP n'est la plupart du temps pas en cause. Les problèmes
- proviennent plutôt de code ajouté, de scripts CGI, ou du système
- d'exploitation sous-jacent. Vous devez donc vous tenir informé des
- problèmes et mises à jour concernant tous les logiciels présents sur
- votre système.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="dos" id="dos">Attaques de type "Déni de service"
- (Denial of Service - DoS)</a></h2>
-
-
-
- <p>Tous les services réseau peuvent faire l'objet d'attaques de type
- "Déni de service" qui tentent de les empêcher de répondre aux clients en
- saturant leurs ressources. Il est impossible de se prémunir totalement
- contre ce type d'attaques, mais vous pouvez accomplir certaines actions
- afin de minimiser les problèmes qu'elles créent.</p>
-
- <p>Souvent, l'outil anti-DoS le plus efficace sera constitué par le
- pare-feu ou certaines configurations du système d'exploitation. Par
- exemple, la plupart des pare-feu peuvent être configurés de façon à
- limiter le nombre de connexions simultanées depuis une adresse IP ou un
- réseau, ce qui permet de prévenir toute une gamme d'attaques simples.
- Bien sûr, ceci n'est d'aucun secours contre les attaques de type
- "Déni de service" distribuées (DDoS).</p>
-
- <p>Certains réglages de la configuration d'Apache peuvent aussi
- minimiser les problèmes :</p>
-
- <ul>
- <li>La valeur de la directive
- <code class="directive"><a href="../mod/core.html#timeout">TimeOut</a></code> doit être diminuée sur les
- sites sujets aux attaques DoS. Une valeur de quelques secondes devrait
- convenir. Cependant, comme <code class="directive"><a href="../mod/core.html#timeout">TimeOut</a></code>
- est actuellement concerné par de nombreuses opérations différentes, lui
- attribuer une valeur trop faible peut provoquer des problèmes avec les
- scripts CGI qui présentent un long temps de réponse.</li>
-
- <li>La valeur de la directive
- <code class="directive"><a href="../mod/core.html#keepalivetimeout">KeepAliveTimeout</a></code> doit aussi être
- diminuée sur les sites sujets aux attaques DoS. Certains sites
- désactivent même complètement le "maintien en vie" (keepalives)
- à l'aide de la directive
- <code class="directive"><a href="../mod/core.html#keepalive">KeepAlive</a></code>, ce qui bien sûr
- présente des inconvénients en matière de performances.</li>
-
- <li>Les valeurs des différentes directives fournies par d'autres modules
- et en rapport avec des délais doivent aussi être vérifiées.</li>
-
- <li>Les directives
- <code class="directive"><a href="../mod/core.html#limitrequestbody">LimitRequestBody</a></code>,
- <code class="directive"><a href="../mod/core.html#limitrequestfields">LimitRequestFields</a></code>,
- <code class="directive"><a href="../mod/core.html#limitrequestfieldsize">LimitRequestFieldSize</a></code>,
- <code class="directive"><a href="../mod/core.html#limitrequestline">LimitRequestLine</a></code>, et
- <code class="directive"><a href="../mod/core.html#limitxmlrequestbody">LimitXMLRequestBody</a></code> doivent être
- configurées avec prudence afin de limiter la consommation de ressources
- induite par les demandes des clients.
- </li>
-
- <li>Sur les systèmes d'exploitation qui le supportent, assurez-vous que
- la directive <code class="directive"><a href="../mod/core.html#acceptfilter">AcceptFilter</a></code> est
- activée afin de déléguer une partie du traitement des requêtes au
- système d'exploitation. Elle est activée par défaut dans le démon httpd
- d'Apache, mais peut nécessiter une reconfiguration de votre noyau.</li>
-
- <li>Optimisez la directive <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code> de façon à définir le nombre
- maximum de connexions simultanées au dessus duquel les ressources
- s'épuisent. Voir aussi la <a href="perf-tuning.html">documentation sur l'optimisation des
- performances</a>.</li>
-
- <li>L'utilisation d'un <a href="../mpm.html">module mpm</a> threadé
- vous permet de traiter d'avantage de connexions simultanées, ce qui
- minimise l'effet des attaques DoS. Dans le futur, le module mpm expérimental
- <code class="module"><a href="../mod/event.html">event</a></code> utilisera un traitement asynchrone afin de ne pas
- dédier un thread à chaque connexion. Il est en cours d'étude à
- l'heure actuelle et n'est pas encore entièrement implémenté. En
- particulier, le mpm <code class="module"><a href="../mod/event.html">event</a></code> est actuellement incompatible
- avec le module <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> ainsi que d'autres filtres
- en entrée.</li>
-
- <li>Il existe de nombreux modules tiers disponibles à <a href="http://modules.apache.org/">http://modules.apache.org/</a> qui
- peuvent retreindre les comportements de certains clients et ainsi
- minimiser les problèmes de DoS.</li>
-
- </ul>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="serverroot" id="serverroot">Permissions sur les répertoires de la racine du serveur</a></h2>
-
-
-
- <p>Typiquement, Apache est démarré par l'utilisateur root, puis il devient
- la propriété de l'utilisateur défini par la directive <code class="directive"><a href="../mod/mpm_common.html#user">User</a></code> afin de répondre aux demandes. Comme
- pour toutes les commandes exécutées par root, vous devez vous assurer
- qu'elle n'est pas modifiable par les utilisateurs autres que root. Les
- fichiers eux-mêmes, mais aussi les répertoires ainsi que leurs parents ne
- doivent être modifiables que par root. Par exemple, si vous avez choisi de
- placer la racine du serveur dans <code>/usr/local/apache</code>, il est conseillé de
- créer le répertoire en tant que root, avec des commandes du style :</p>
-
- <div class="example"><p><code>
- mkdir /usr/local/apache <br />
- cd /usr/local/apache <br />
- mkdir bin conf logs <br />
- chown 0 . bin conf logs <br />
- chgrp 0 . bin conf logs <br />
- chmod 755 . bin conf logs
- </code></p></div>
-
- <p>Nous supposerons que <code>/</code>, <code>/usr</code> et
- <code>/usr/local</code> ne sont modifiables que par
- root. Quand vous installez l'exécutable <code class="program"><a href="../programs/httpd.html">httpd</a></code>, vous
- devez vous assurer qu'il possède des protections similaires :</p>
-
- <div class="example"><p><code>
- cp httpd /usr/local/apache/bin <br />
- chown 0 /usr/local/apache/bin/httpd <br />
- chgrp 0 /usr/local/apache/bin/httpd <br />
- chmod 511 /usr/local/apache/bin/httpd
- </code></p></div>
-
- <p>Vous pouvez créer un sous-répertoire htdocs modifiable par d'autres
- utilisateurs -- car root ne crée ni exécute aucun fichier dans ce
- sous-répertoire.</p>
-
- <p>Si vous permettez à des utilisateurs non root de modifier des fichiers
- que root écrit ou exécute, vous exposez votre système à une compromission
- de l'utilisateur root. Par exemple, quelqu'un pourrait remplacer le binaire
- <code class="program"><a href="../programs/httpd.html">httpd</a></code> de façon à ce que la prochaine fois que vous le
- redémarrerez, il exécutera un code arbitraire. Si le répertoire des
- journaux a les droits en écriture (pour un utilisateur non root), quelqu'un
- pourrait remplacer un fichier journal par un lien symbolique vers un autre
- fichier système, et root pourrait alors écraser ce fichier avec des données
- arbitraires. Si les fichiers journaux eux-mêmes ont des droits en
- écriture (pour un utilisateur non root), quelqu'un pourrait
- modifier les journaux eux-mêmes avec des données fausses.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="ssi" id="ssi">Inclusions côté serveur</a></h2>
-
-
-
- <p>Les inclusions côté serveur (Server Side Includes - SSI) exposent
- l'administrateur du serveur à de nombreux risques potentiels en matière de
- sécurité.</p>
-
- <p>Le premier risque est l'augmentation de la charge du serveur. Tous les
- fichiers où SSI est activé doivent être analysés par Apache, qu'ils
- contiennent des directives SSI ou non. L'augmentation de la charge induite
- est minime, mais peut devenir significative dans le contexte d'un
- serveur partagé.</p>
-
- <p>Les fichiers SSI présentent les mêmes risques que les scripts CGI en
- général. Les fichiers où SSI est activé peuvent exécuter tout script CGI
- ou autre programme à l'aide de la commande <code>"exec cmd"</code> avec les permissions
- des utilisateur et groupe sous lesquels Apache s'exécute, comme défini
- dans <code>httpd.conf</code>.</p>
-
- <p>Des méthodes existent pour améliorer la sécurité des fichiers SSI, tout
- en tirant parti des bénéfices qu'ils apportent.</p>
-
- <p>Pour limiter les dommages qu'un fichier SSI agressif pourrait causer,
- l'administrateur du serveur peut activer<a href="../suexec.html">suexec</a>
- comme décrit dans la section <a href="#cgi">Les CGI en général</a>.</p>
-
- <p>L'activation des SSI pour des fichiers possédant des extensions
- <code>.html</code> ou
- <code>.htm</code> peut s'avérer dangereux. Ceci est particulièrement vrai dans un
- environnement de serveur partagé ou étant le siège d'un traffic élevé. Les
- fichiers où SSI est activé doivent posséder une extension spécifique, telle
- que la conventionnelle <code>.shtml</code>. Ceci permet de limiter la charge du serveur
- à un niveau minimum et de simplifier la gestion des risques.</p>
-
- <p>Une autre solution consiste à interdire l'exécution de scripts et
- programmes à partir de pages SSI. Pour ce faire, remplacez
- <code>Includes</code> par <code>IncludesNOEXEC</code> dans la directive
- <code class="directive"><a href="../mod/core.html#options">Options</a></code>. Notez que les utilisateurs
- pourront encore utiliser <code><--#include virtual="..." --></code> pour exécuter
- des scripts CGI si ces scripts sont situés dans des répertoires spécifiés
- par une directive
- <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code>.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="cgi" id="cgi">Les CGI en général</a></h2>
-
-
-
- <p>Tout d'abord, vous devez toujours garder à l'esprit que vous devez
- faire confiance aux développeurs de scripts ou programmes CGI ainsi qu'à
- vos compétences pour déceler les trous de sécurité potentiels dans les
- CGI, que ceux-ci soient délibérés ou accidentels. Les scripts CGI peuvent
- essentiellement exécuter des commandes arbitraires sur votre système avec
- les droits de l'utilisateur du serveur web, et peuvent par conséquent être
- extrèmement dangereux s'ils ne sont pas vérifiés avec soin.</p>
-
- <p>Tous les scripts CGI s'exécutent sous le même utilisateur, il peuvent
- donc entrer en conflit (accidentellement ou délibérément) avec d'autres
- scripts. Par exemple, l'utilisateur A hait l'utilisateur B, il écrit donc
- un script qui efface la base de données CGI de l'utilisateur B. Vous pouvez
- utiliser le programme <a href="../suexec.html">suEXEC</a> pour faire en
- sorte que les scripts s'exécutent sous des utilisateurs différents. Ce
- programme est inclus dans la distribution d'Apache depuis la version 1.2
- et est appelé à partir de certaines portions de code du serveur Apache. Une
- autre méthode plus connue est l'utilisation de
- <a href="http://cgiwrap.unixtools.org/">CGIWrap</a>.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="nsaliasedcgi" id="nsaliasedcgi">CGI sans alias de script</a></h2>
-
-
-
- <p>Vous ne devez permettre aux utilisateurs d'exécuter des scripts CGI
- depuis n'importe quel répertoire que dans l'éventualité où :</p>
-
- <ul>
- <li>Vous faites confiance à vos utilisateurs pour ne pas écrire de
- scripts qui vont délibérément ou accidentellement exposer votre
- système à une attaque.</li>
- <li>Vous estimez que le niveau de sécurité dans les autres parties de
- votre site est si faible qu'un trou de sécurité de plus ou de moins
- n'est pas très important.</li>
- <li>Votre système ne comporte aucun utilisateur, et personne ne visite
- jamais votre site.</li>
- </ul>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="saliasedcgi" id="saliasedcgi">CGI avec alias de script</a></h2>
-
-
-
- <p>Le confinement des CGI dans des répertoires spécifiques permet à
- l'administrateur de contrôler ce que l'on met dans ces répertoires. Ceci
- est bien entendu mieux sécurisé que les CGI sans alias de script, mais
- seulement à condition que les utilisateurs avec les droits en écriture sur
- les répertoires soient dignes de confiance, et que l'administrateur ait la
- volonté de tester chaque programme ou script CGI à la recherche d'éventuels
- trous de sécurité.</p>
-
- <p>La plupart des sites choisissent cette approche au détriment des CGI
- sans alias de script.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="dynamic" id="dynamic">Autres sources de contenu dynamique</a></h2>
-
-
-
- <p>
- Les options de scripting intégrées qui s'exécutent en tant que partie du
- serveur lui-même, comme <code>mod_php</code>, <code>mod_perl</code>,
- <code>mod_tcl</code>, et <code>mod_python</code>,
- s'exécutent sous le même utilisateur que le serveur (voir la directive
- <code class="directive"><a href="../mod/mpm_common.html#user">User</a></code>), et par conséquent,
- les scripts que ces moteurs exécutent peuvent accéder aux mêmes ressources
- que le serveur. Certains moteurs de scripting peuvent proposer des
- restrictions, mais pour plus de sûreté, il vaut mieux partir du principe
- que ce n'est pas le cas.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="systemsettings" id="systemsettings">Protection de la configuration du système</a></h2>
-
-
-
- <p>Pour contrôler étroitement votre serveur, vous pouvez interdire
- l'utilisation des fichiers <code>.htaccess</code> qui permettent de
- passer outre les fonctionnalités de sécurité que vous avez configurées.
- Voici un moyen pour y parvenir :</p>
-
- <p>Ajoutez dans le fichier de configuration du serveur</p>
-
- <div class="example"><p><code>
- <Directory /> <br />
- AllowOverride None <br />
- </Directory>
- </code></p></div>
-
- <p>Ceci interdit l'utilisation des fichiers <code>.htaccess</code> dans
- tous les répertoires, sauf ceux pour lesquels c'est explicitement
- autorisé.</p>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="protectserverfiles" id="protectserverfiles">Protection par défaut des fichiers du serveur</a></h2>
-
-
-
- <p>Le concept d'accès par défaut est un aspect d'Apache qui est parfois mal
- compris. C'est à dire que, à moins que vous ne changiez explicitement ce
- comportement, si le serveur trouve son chemin vers un fichier en suivant
- les règles normales de correspondance URL - fichier, il peut le retourner
- aux clients.</p>
-
- <p>Considérons l'exemple suivant :</p>
-
- <div class="example"><p><code>
- # cd /; ln -s / public_html <br />
- puis accès à <code>http://localhost/~root/</code>
- </code></p></div>
-
- <p>Ceci permettrait aux clients de parcourir l'ensemble du système de
- fichiers. Pour l'éviter, ajoutez le bloc suivant à la configuration
- de votre serveur :</p>
-
- <div class="example"><p><code>
- <Directory /> <br />
- Order Deny,Allow <br />
- Deny from all <br />
- </Directory>
- </code></p></div>
-
- <p>ceci va interdire l'accès par défaut à tous les fichiers du système de
- fichiers. Vous devrez ensuite ajouter les blocs
- <code class="directive"><a href="../mod/core.html#directory">Directory</a></code> appropriés correspondant
- aux répertoires auxquels vous voulez autorisez l'accès. Par exemple,</p>
-
- <div class="example"><p><code>
- <Directory /usr/users/*/public_html> <br />
- Order Deny,Allow <br />
- Allow from all <br />
- </Directory> <br />
- <Directory /usr/local/httpd> <br />
- Order Deny,Allow <br />
- Allow from all <br />
- </Directory>
- </code></p></div>
-
- <p>Portez une attention particulière aux interactions entre les directives
- <code class="directive"><a href="../mod/core.html#location">Location</a></code> et
- <code class="directive"><a href="../mod/core.html#directory">Directory</a></code> ; par exemple, si une
- directive <code><Directory /></code> interdit un accès, une
- directive <code><Location /></code> pourra passer outre.</p>
-
- <p>De même, soyez méfiant en jouant avec la directive
- <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> ; la positionner à
- <code>"./"</code> aurait le même effet, pour root, que le premier exemple plus haut.
- Si vous utilisez Apache version 1.3 ou supérieure, nous vous conseillons
- fortement d'inclure la ligne suivante dans le fichier de configuration de
- votre serveur :</p>
-
- <div class="example"><p><code>
- UserDir disabled root
- </code></p></div>
-
- </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
-<div class="section">
-<h2><a name="watchyourlogs" id="watchyourlogs">Surveillez vos journaux</a></h2>
-
-
-
- <p>Pour vous tenir informé de ce qui se passe réellement dans votre
- serveur, vous devez consulter vos
- <a href="../logs.html">fichiers journaux</a>. Même si les fichiers journaux
- ne consignent que des évènements qui se sont déjà produits, ils vous
- informeront sur la nature des attaques qui sont lancées contre le serveur
- et vous permettront de vérifier si le niveau de sécurité nécessaire est
- atteint.</p>
-
- <p>Quelques exemples :</p>
-
- <div class="example"><p><code>
- grep -c "/jsp/source.jsp?/jsp/ /jsp/source.jsp??" access_log <br />
- grep "client denied" error_log | tail -n 10
- </code></p></div>
-
- <p>Le premier exemple listera les attaques essayant d'exploiter la
- <a href="http://online.securityfocus.com/bid/4876/info/">vulnérabilité
- d'Apache Tomcat pouvant provoquer la divulgation d'informations par des
- requêtes Source.JSP mal formées</a>, le second donnera la liste des dix
- dernières interdictions client ; par exemple :</p>
-
- <div class="example"><p><code>
- [Thu Jul 11 17:18:39 2002] [error] [client foo.example.com] client denied
- by server configuration: /usr/local/apache/htdocs/.htpasswd
- </code></p></div>
-
- <p>Comme vous le voyez, les fichiers journaux ne consignent que ce qui
- s'est déjà produit ; ainsi, si le client a pu accéder au fichier
- <code>.htpasswd</code>, vous devriez avoir quelque chose du style :</p>
-
- <div class="example"><p><code>
- foo.example.com - - [12/Jul/2002:01:59:13 +0200] "GET /.htpasswd HTTP/1.1"
- </code></p></div>
-
- <p>dans votre <a href="../logs.html#accesslog">journal des accès</a> ; ce
- qui signifie que vous avez probablement mis en commentaire ce qui suit dans
- le fichier de configuration de votre serveur :</p>
-
- <div class="example"><p><code>
- <Files ~ "^\.ht"> <br />
- Order allow,deny <br />
- Deny from all <br />
- </Files>
- </code></p></div>
-
- </div></div>
-<div class="bottomlang">
-<p><span>Langues Disponibles: </span><a href="../en/misc/security_tips.html" hreflang="en" rel="alternate" title="English"> en </a> |
-<a href="../fr/misc/security_tips.html" title="Français"> fr </a> |
-<a href="../ko/misc/security_tips.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |
-<a href="../tr/misc/security_tips.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>
-</div><div id="footer">
-<p class="apache">Copyright 2009 The Apache Software Foundation.<br />Authorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p></div>
+<?xml version="1.0" encoding="ISO-8859-1"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head><!--\r
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r
+ This file is generated from xml source: DO NOT EDIT\r
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r
+ -->\r
+<title>Conseils sur la sécurité - Serveur Apache HTTP</title>\r
+<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />\r
+<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />\r
+<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />\r
+<link href="../images/favicon.ico" rel="shortcut icon" /></head>\r
+<body id="manual-page"><div id="page-header">\r
+<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p>\r
+<p class="apache">Serveur Apache HTTP Version 2.3</p>\r
+<img alt="" src="../images/feather.gif" /></div>\r
+<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div>\r
+<div id="path">\r
+<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Serveur HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.3</a> > <a href="./">Documentations diverses</a></div><div id="page-content"><div id="preamble"><h1>Conseils sur la sécurité</h1>\r
+<div class="toplang">\r
+<p><span>Langues Disponibles: </span><a href="../en/misc/security_tips.html" hreflang="en" rel="alternate" title="English"> en </a> |\r
+<a href="../fr/misc/security_tips.html" title="Français"> fr </a> |\r
+<a href="../ko/misc/security_tips.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |\r
+<a href="../tr/misc/security_tips.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>\r
+</div>\r
+\r
+ <p>Ce document propose quelques conseils et astuces concernant les\r
+ problèmes de sécurité liés\r
+ à l'installation d'un serveur web. Certaines suggestions seront à caractère\r
+ général, tandis que d'autres seront spécifiques à Apache.</p>\r
+ </div>\r
+<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#uptodate">Maintenez votre serveur à jour</a></li>\r
+<li><img alt="" src="../images/down.gif" /> <a href="#dos">Attaques de type "Déni de service"\r
+ (Denial of Service - DoS)</a></li>\r
+<li><img alt="" src="../images/down.gif" /> <a href="#serverroot">Permissions sur les répertoires de la racine du serveur</a></li>\r
+<li><img alt="" src="../images/down.gif" /> <a href="#ssi">Inclusions côté serveur</a></li>\r
+<li><img alt="" src="../images/down.gif" /> <a href="#cgi">Les CGI en général</a></li>\r
+<li><img alt="" src="../images/down.gif" /> <a href="#nsaliasedcgi">CGI sans alias de script</a></li>\r
+<li><img alt="" src="../images/down.gif" /> <a href="#saliasedcgi">CGI avec alias de script</a></li>\r
+<li><img alt="" src="../images/down.gif" /> <a href="#dynamic">Autres sources de contenu dynamique</a></li>\r
+<li><img alt="" src="../images/down.gif" /> <a href="#systemsettings">Protection de la configuration du système</a></li>\r
+<li><img alt="" src="../images/down.gif" /> <a href="#protectserverfiles">Protection par défaut des fichiers du serveur</a></li>\r
+<li><img alt="" src="../images/down.gif" /> <a href="#watchyourlogs">Surveillez vos journaux</a></li>\r
+</ul></div>\r
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="uptodate" id="uptodate">Maintenez votre serveur à jour</a></h2>\r
+\r
+ <p>Le serveur HTTP Apache a une bonne réputation en matière de sécurité\r
+ et possède une communauté de développeurs très sensibilisés aux problèmes\r
+ de sécurité. Mais il est inévitable de trouver certains problèmes\r
+ -- petits ou grands -- une fois le logiciel mis à disposition. C'est pour\r
+ cette raison qu'il est crucial de se tenir informé des mises à jour. Si\r
+ vous avez obtenu votre version du serveur HTTP directement depuis Apache,\r
+ nous vous conseillons grandement de vous abonner à la <a href="http://httpd.apache.org/lists.html#http-announce">Liste de diffusion\r
+ des annonces du serveur HTTP</a> qui vous informera de\r
+ la parution des nouvelles versions et des mises à jour de sécurité. La\r
+ plupart des distributeurs tiers d'Apache fournissent des services\r
+ similaires.</p>\r
+\r
+ <p>Gardez cependant à l'esprit que lorsqu'un serveur web est compromis, le\r
+ code du serveur HTTP n'est la plupart du temps pas en cause. Les problèmes\r
+ proviennent plutôt de code ajouté, de scripts CGI, ou du système\r
+ d'exploitation sous-jacent. Vous devez donc vous tenir informé des\r
+ problèmes et mises à jour concernant tous les logiciels présents sur\r
+ votre système.</p>\r
+\r
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="dos" id="dos">Attaques de type "Déni de service"\r
+ (Denial of Service - DoS)</a></h2>\r
+\r
+ \r
+\r
+ <p>Tous les services réseau peuvent faire l'objet d'attaques de type\r
+ "Déni de service" qui tentent de les empêcher de répondre aux clients en\r
+ saturant leurs ressources. Il est impossible de se prémunir totalement\r
+ contre ce type d'attaques, mais vous pouvez accomplir certaines actions\r
+ afin de minimiser les problèmes qu'elles créent.</p>\r
+\r
+ <p>Souvent, l'outil anti-DoS le plus efficace sera constitué par le\r
+ pare-feu ou certaines configurations du système d'exploitation. Par\r
+ exemple, la plupart des pare-feu peuvent être configurés de façon à\r
+ limiter le nombre de connexions simultanées depuis une adresse IP ou un\r
+ réseau, ce qui permet de prévenir toute une gamme d'attaques simples.\r
+ Bien sûr, ceci n'est d'aucun secours contre les attaques de type\r
+ "Déni de service" distribuées (DDoS).</p>\r
+\r
+ <p>Certains réglages de la configuration d'Apache peuvent aussi\r
+ minimiser les problèmes :</p>\r
+\r
+ <ul>\r
+ <li>La valeur de la directive\r
+ <code class="directive"><a href="../mod/core.html#timeout">TimeOut</a></code> doit être diminuée sur les\r
+ sites sujets aux attaques DoS. Une valeur de quelques secondes devrait\r
+ convenir. Cependant, comme <code class="directive"><a href="../mod/core.html#timeout">TimeOut</a></code>\r
+ est actuellement concerné par de nombreuses opérations différentes, lui\r
+ attribuer une valeur trop faible peut provoquer des problèmes avec les\r
+ scripts CGI qui présentent un long temps de réponse.</li>\r
+\r
+ <li>La valeur de la directive\r
+ <code class="directive"><a href="../mod/core.html#keepalivetimeout">KeepAliveTimeout</a></code> doit aussi être\r
+ diminuée sur les sites sujets aux attaques DoS. Certains sites\r
+ désactivent même complètement le "maintien en vie" (keepalives)\r
+ à l'aide de la directive\r
+ <code class="directive"><a href="../mod/core.html#keepalive">KeepAlive</a></code>, ce qui bien sûr\r
+ présente des inconvénients en matière de performances.</li>\r
+\r
+ <li>Les valeurs des différentes directives fournies par d'autres modules\r
+ et en rapport avec des délais doivent aussi être vérifiées.</li>\r
+\r
+ <li>Les directives\r
+ <code class="directive"><a href="../mod/core.html#limitrequestbody">LimitRequestBody</a></code>,\r
+ <code class="directive"><a href="../mod/core.html#limitrequestfields">LimitRequestFields</a></code>,\r
+ <code class="directive"><a href="../mod/core.html#limitrequestfieldsize">LimitRequestFieldSize</a></code>,\r
+ <code class="directive"><a href="../mod/core.html#limitrequestline">LimitRequestLine</a></code>, et\r
+ <code class="directive"><a href="../mod/core.html#limitxmlrequestbody">LimitXMLRequestBody</a></code> doivent être\r
+ configurées avec prudence afin de limiter la consommation de ressources\r
+ induite par les demandes des clients.\r
+ </li>\r
+\r
+ <li>Sur les systèmes d'exploitation qui le supportent, assurez-vous que\r
+ la directive <code class="directive"><a href="../mod/core.html#acceptfilter">AcceptFilter</a></code> est\r
+ activée afin de déléguer une partie du traitement des requêtes au\r
+ système d'exploitation. Elle est activée par défaut dans le démon httpd\r
+ d'Apache, mais peut nécessiter une reconfiguration de votre noyau.</li>\r
+\r
+ <li>Optimisez la directive <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code> de façon à définir le nombre\r
+ maximum de connexions simultanées au dessus duquel les ressources\r
+ s'épuisent. Voir aussi la <a href="perf-tuning.html">documentation sur l'optimisation des\r
+ performances</a>.</li>\r
+\r
+ <li>L'utilisation d'un <a href="../mpm.html">module mpm</a> threadé\r
+ vous permet de traiter d'avantage de connexions simultanées, ce qui\r
+ minimise l'effet des attaques DoS. Dans le futur, le module mpm expérimental\r
+ <code class="module"><a href="../mod/event.html">event</a></code> utilisera un traitement asynchrone afin de ne pas\r
+ dédier un thread à chaque connexion. Il est en cours d'étude à\r
+ l'heure actuelle et n'est pas encore entièrement implémenté. En\r
+ particulier, le mpm <code class="module"><a href="../mod/event.html">event</a></code> est actuellement incompatible\r
+ avec le module <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> ainsi que d'autres filtres\r
+ en entrée.</li>\r
+\r
+ <li>Il existe de nombreux modules tiers disponibles à <a href="http://modules.apache.org/">http://modules.apache.org/</a> qui\r
+ peuvent retreindre les comportements de certains clients et ainsi\r
+ minimiser les problèmes de DoS.</li>\r
+\r
+ </ul>\r
+\r
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="serverroot" id="serverroot">Permissions sur les répertoires de la racine du serveur</a></h2>\r
+\r
+ \r
+\r
+ <p>Typiquement, Apache est démarré par l'utilisateur root, puis il devient\r
+ la propriété de l'utilisateur défini par la directive <code class="directive"><a href="../mod/mpm_common.html#user">User</a></code> afin de répondre aux demandes. Comme\r
+ pour toutes les commandes exécutées par root, vous devez vous assurer\r
+ qu'elle n'est pas modifiable par les utilisateurs autres que root. Les\r
+ fichiers eux-mêmes, mais aussi les répertoires ainsi que leurs parents ne\r
+ doivent être modifiables que par root. Par exemple, si vous avez choisi de\r
+ placer la racine du serveur dans <code>/usr/local/apache</code>, il est conseillé de\r
+ créer le répertoire en tant que root, avec des commandes du style :</p>\r
+\r
+ <div class="example"><p><code>\r
+ mkdir /usr/local/apache <br />\r
+ cd /usr/local/apache <br />\r
+ mkdir bin conf logs <br />\r
+ chown 0 . bin conf logs <br />\r
+ chgrp 0 . bin conf logs <br />\r
+ chmod 755 . bin conf logs\r
+ </code></p></div>\r
+\r
+ <p>Nous supposerons que <code>/</code>, <code>/usr</code> et\r
+ <code>/usr/local</code> ne sont modifiables que par\r
+ root. Quand vous installez l'exécutable <code class="program"><a href="../programs/httpd.html">httpd</a></code>, vous\r
+ devez vous assurer qu'il possède des protections similaires :</p>\r
+\r
+ <div class="example"><p><code>\r
+ cp httpd /usr/local/apache/bin <br />\r
+ chown 0 /usr/local/apache/bin/httpd <br />\r
+ chgrp 0 /usr/local/apache/bin/httpd <br />\r
+ chmod 511 /usr/local/apache/bin/httpd\r
+ </code></p></div>\r
+\r
+ <p>Vous pouvez créer un sous-répertoire htdocs modifiable par d'autres\r
+ utilisateurs -- car root ne crée ni exécute aucun fichier dans ce\r
+ sous-répertoire.</p>\r
+\r
+ <p>Si vous permettez à des utilisateurs non root de modifier des fichiers\r
+ que root écrit ou exécute, vous exposez votre système à une compromission\r
+ de l'utilisateur root. Par exemple, quelqu'un pourrait remplacer le binaire\r
+ <code class="program"><a href="../programs/httpd.html">httpd</a></code> de façon à ce que la prochaine fois que vous le\r
+ redémarrerez, il exécutera un code arbitraire. Si le répertoire des\r
+ journaux a les droits en écriture (pour un utilisateur non root), quelqu'un\r
+ pourrait remplacer un fichier journal par un lien symbolique vers un autre\r
+ fichier système, et root pourrait alors écraser ce fichier avec des données\r
+ arbitraires. Si les fichiers journaux eux-mêmes ont des droits en\r
+ écriture (pour un utilisateur non root), quelqu'un pourrait\r
+ modifier les journaux eux-mêmes avec des données fausses.</p>\r
+\r
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="ssi" id="ssi">Inclusions côté serveur</a></h2>\r
+\r
+ \r
+\r
+ <p>Les inclusions côté serveur (Server Side Includes - SSI) exposent\r
+ l'administrateur du serveur à de nombreux risques potentiels en matière de\r
+ sécurité.</p>\r
+\r
+ <p>Le premier risque est l'augmentation de la charge du serveur. Tous les\r
+ fichiers où SSI est activé doivent être analysés par Apache, qu'ils\r
+ contiennent des directives SSI ou non. L'augmentation de la charge induite\r
+ est minime, mais peut devenir significative dans le contexte d'un\r
+ serveur partagé.</p>\r
+\r
+ <p>Les fichiers SSI présentent les mêmes risques que les scripts CGI en\r
+ général. Les fichiers où SSI est activé peuvent exécuter tout script CGI\r
+ ou autre programme à l'aide de la commande <code>"exec cmd"</code> avec les permissions\r
+ des utilisateur et groupe sous lesquels Apache s'exécute, comme défini\r
+ dans <code>httpd.conf</code>.</p>\r
+\r
+ <p>Des méthodes existent pour améliorer la sécurité des fichiers SSI, tout\r
+ en tirant parti des bénéfices qu'ils apportent.</p>\r
+\r
+ <p>Pour limiter les dommages qu'un fichier SSI agressif pourrait causer,\r
+ l'administrateur du serveur peut activer<a href="../suexec.html">suexec</a>\r
+ comme décrit dans la section <a href="#cgi">Les CGI en général</a>.</p>\r
+\r
+ <p>L'activation des SSI pour des fichiers possédant des extensions\r
+ <code>.html</code> ou\r
+ <code>.htm</code> peut s'avérer dangereux. Ceci est particulièrement vrai dans un\r
+ environnement de serveur partagé ou étant le siège d'un traffic élevé. Les\r
+ fichiers où SSI est activé doivent posséder une extension spécifique, telle\r
+ que la conventionnelle <code>.shtml</code>. Ceci permet de limiter la charge du serveur\r
+ à un niveau minimum et de simplifier la gestion des risques.</p>\r
+\r
+ <p>Une autre solution consiste à interdire l'exécution de scripts et\r
+ programmes à partir de pages SSI. Pour ce faire, remplacez\r
+ <code>Includes</code> par <code>IncludesNOEXEC</code> dans la directive\r
+ <code class="directive"><a href="../mod/core.html#options">Options</a></code>. Notez que les utilisateurs\r
+ pourront encore utiliser <code><--#include virtual="..." --></code> pour exécuter\r
+ des scripts CGI si ces scripts sont situés dans des répertoires spécifiés\r
+ par une directive\r
+ <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code>.</p>\r
+\r
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="cgi" id="cgi">Les CGI en général</a></h2>\r
+\r
+ \r
+\r
+ <p>Tout d'abord, vous devez toujours garder à l'esprit que vous devez\r
+ faire confiance aux développeurs de scripts ou programmes CGI ainsi qu'à\r
+ vos compétences pour déceler les trous de sécurité potentiels dans les\r
+ CGI, que ceux-ci soient délibérés ou accidentels. Les scripts CGI peuvent\r
+ essentiellement exécuter des commandes arbitraires sur votre système avec\r
+ les droits de l'utilisateur du serveur web, et peuvent par conséquent être\r
+ extrèmement dangereux s'ils ne sont pas vérifiés avec soin.</p>\r
+\r
+ <p>Tous les scripts CGI s'exécutent sous le même utilisateur, il peuvent\r
+ donc entrer en conflit (accidentellement ou délibérément) avec d'autres\r
+ scripts. Par exemple, l'utilisateur A hait l'utilisateur B, il écrit donc\r
+ un script qui efface la base de données CGI de l'utilisateur B. Vous pouvez\r
+ utiliser le programme <a href="../suexec.html">suEXEC</a> pour faire en\r
+ sorte que les scripts s'exécutent sous des utilisateurs différents. Ce\r
+ programme est inclus dans la distribution d'Apache depuis la version 1.2\r
+ et est appelé à partir de certaines portions de code du serveur Apache. Une\r
+ autre méthode plus connue est l'utilisation de\r
+ <a href="http://cgiwrap.unixtools.org/">CGIWrap</a>.</p>\r
+\r
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="nsaliasedcgi" id="nsaliasedcgi">CGI sans alias de script</a></h2>\r
+\r
+ \r
+\r
+ <p>Vous ne devez permettre aux utilisateurs d'exécuter des scripts CGI\r
+ depuis n'importe quel répertoire que dans l'éventualité où :</p>\r
+\r
+ <ul>\r
+ <li>Vous faites confiance à vos utilisateurs pour ne pas écrire de\r
+ scripts qui vont délibérément ou accidentellement exposer votre\r
+ système à une attaque.</li>\r
+ <li>Vous estimez que le niveau de sécurité dans les autres parties de\r
+ votre site est si faible qu'un trou de sécurité de plus ou de moins\r
+ n'est pas très important.</li>\r
+ <li>Votre système ne comporte aucun utilisateur, et personne ne visite\r
+ jamais votre site.</li>\r
+ </ul>\r
+\r
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="saliasedcgi" id="saliasedcgi">CGI avec alias de script</a></h2>\r
+\r
+ \r
+\r
+ <p>Le confinement des CGI dans des répertoires spécifiques permet à\r
+ l'administrateur de contrôler ce que l'on met dans ces répertoires. Ceci\r
+ est bien entendu mieux sécurisé que les CGI sans alias de script, mais\r
+ seulement à condition que les utilisateurs avec les droits en écriture sur\r
+ les répertoires soient dignes de confiance, et que l'administrateur ait la\r
+ volonté de tester chaque programme ou script CGI à la recherche d'éventuels\r
+ trous de sécurité.</p>\r
+\r
+ <p>La plupart des sites choisissent cette approche au détriment des CGI\r
+ sans alias de script.</p>\r
+\r
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="dynamic" id="dynamic">Autres sources de contenu dynamique</a></h2>\r
+\r
+ \r
+\r
+ <p>\r
+ Les options de scripting intégrées qui s'exécutent en tant que partie du\r
+ serveur lui-même, comme <code>mod_php</code>, <code>mod_perl</code>,\r
+ <code>mod_tcl</code>, et <code>mod_python</code>,\r
+ s'exécutent sous le même utilisateur que le serveur (voir la directive\r
+ <code class="directive"><a href="../mod/mpm_common.html#user">User</a></code>), et par conséquent,\r
+ les scripts que ces moteurs exécutent peuvent accéder aux mêmes ressources\r
+ que le serveur. Certains moteurs de scripting peuvent proposer des\r
+ restrictions, mais pour plus de sûreté, il vaut mieux partir du principe\r
+ que ce n'est pas le cas.</p>\r
+\r
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="systemsettings" id="systemsettings">Protection de la configuration du système</a></h2>\r
+\r
+ \r
+\r
+ <p>Pour contrôler étroitement votre serveur, vous pouvez interdire\r
+ l'utilisation des fichiers <code>.htaccess</code> qui permettent de\r
+ passer outre les fonctionnalités de sécurité que vous avez configurées.\r
+ Voici un moyen pour y parvenir :</p>\r
+\r
+ <p>Ajoutez dans le fichier de configuration du serveur</p>\r
+\r
+ <div class="example"><p><code>\r
+ <Directory /> <br />\r
+ AllowOverride None <br />\r
+ </Directory>\r
+ </code></p></div>\r
+\r
+ <p>Ceci interdit l'utilisation des fichiers <code>.htaccess</code> dans\r
+ tous les répertoires, sauf ceux pour lesquels c'est explicitement\r
+ autorisé.</p>\r
+\r
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="protectserverfiles" id="protectserverfiles">Protection par défaut des fichiers du serveur</a></h2>\r
+\r
+ \r
+\r
+ <p>Le concept d'accès par défaut est un aspect d'Apache qui est parfois mal\r
+ compris. C'est à dire que, à moins que vous ne changiez explicitement ce\r
+ comportement, si le serveur trouve son chemin vers un fichier en suivant\r
+ les règles normales de correspondance URL - fichier, il peut le retourner\r
+ aux clients.</p>\r
+\r
+ <p>Considérons l'exemple suivant :</p>\r
+\r
+ <div class="example"><p><code>\r
+ # cd /; ln -s / public_html <br />\r
+ puis accès à <code>http://localhost/~root/</code>\r
+ </code></p></div>\r
+\r
+ <p>Ceci permettrait aux clients de parcourir l'ensemble du système de\r
+ fichiers. Pour l'éviter, ajoutez le bloc suivant à la configuration\r
+ de votre serveur :</p>\r
+\r
+ <div class="example"><p><code>\r
+ <Directory /> <br />\r
+ Order Deny,Allow <br />\r
+ Deny from all <br />\r
+ </Directory>\r
+ </code></p></div>\r
+\r
+ <p>ceci va interdire l'accès par défaut à tous les fichiers du système de\r
+ fichiers. Vous devrez ensuite ajouter les blocs\r
+ <code class="directive"><a href="../mod/core.html#directory">Directory</a></code> appropriés correspondant\r
+ aux répertoires auxquels vous voulez autorisez l'accès. Par exemple,</p>\r
+\r
+ <div class="example"><p><code>\r
+ <Directory /usr/users/*/public_html> <br />\r
+ Order Deny,Allow <br />\r
+ Allow from all <br />\r
+ </Directory> <br />\r
+ <Directory /usr/local/httpd> <br />\r
+ Order Deny,Allow <br />\r
+ Allow from all <br />\r
+ </Directory>\r
+ </code></p></div>\r
+\r
+ <p>Portez une attention particulière aux interactions entre les directives\r
+ <code class="directive"><a href="../mod/core.html#location">Location</a></code> et\r
+ <code class="directive"><a href="../mod/core.html#directory">Directory</a></code> ; par exemple, si une\r
+ directive <code><Directory /></code> interdit un accès, une\r
+ directive <code><Location /></code> pourra passer outre.</p>\r
+\r
+ <p>De même, soyez méfiant en jouant avec la directive\r
+ <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> ; la positionner à\r
+ <code>"./"</code> aurait le même effet, pour root, que le premier exemple plus haut.\r
+ Si vous utilisez Apache version 1.3 ou supérieure, nous vous conseillons\r
+ fortement d'inclure la ligne suivante dans le fichier de configuration de\r
+ votre serveur :</p>\r
+\r
+ <div class="example"><p><code>\r
+ UserDir disabled root\r
+ </code></p></div>\r
+\r
+ </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="watchyourlogs" id="watchyourlogs">Surveillez vos journaux</a></h2>\r
+\r
+ \r
+\r
+ <p>Pour vous tenir informé de ce qui se passe réellement dans votre\r
+ serveur, vous devez consulter vos\r
+ <a href="../logs.html">fichiers journaux</a>. Même si les fichiers journaux\r
+ ne consignent que des évènements qui se sont déjà produits, ils vous\r
+ informeront sur la nature des attaques qui sont lancées contre le serveur\r
+ et vous permettront de vérifier si le niveau de sécurité nécessaire est\r
+ atteint.</p>\r
+\r
+ <p>Quelques exemples :</p>\r
+\r
+ <div class="example"><p><code>\r
+ grep -c "/jsp/source.jsp?/jsp/ /jsp/source.jsp??" access_log <br />\r
+ grep "client denied" error_log | tail -n 10\r
+ </code></p></div>\r
+\r
+ <p>Le premier exemple listera les attaques essayant d'exploiter la\r
+ <a href="http://online.securityfocus.com/bid/4876/info/">vulnérabilité\r
+ d'Apache Tomcat pouvant provoquer la divulgation d'informations par des\r
+ requêtes Source.JSP mal formées</a>, le second donnera la liste des dix\r
+ dernières interdictions client ; par exemple :</p>\r
+\r
+ <div class="example"><p><code>\r
+ [Thu Jul 11 17:18:39 2002] [error] [client foo.example.com] client denied\r
+ by server configuration: /usr/local/apache/htdocs/.htpasswd\r
+ </code></p></div>\r
+\r
+ <p>Comme vous le voyez, les fichiers journaux ne consignent que ce qui\r
+ s'est déjà produit ; ainsi, si le client a pu accéder au fichier\r
+ <code>.htpasswd</code>, vous devriez avoir quelque chose du style :</p>\r
+\r
+ <div class="example"><p><code>\r
+ foo.example.com - - [12/Jul/2002:01:59:13 +0200] "GET /.htpasswd HTTP/1.1"\r
+ </code></p></div>\r
+\r
+ <p>dans votre <a href="../logs.html#accesslog">journal des accès</a> ; ce\r
+ qui signifie que vous avez probablement mis en commentaire ce qui suit dans\r
+ le fichier de configuration de votre serveur :</p>\r
+\r
+ <div class="example"><p><code>\r
+ <Files ~ "^\.ht"> <br />\r
+ Order allow,deny <br />\r
+ Deny from all <br />\r
+ </Files>\r
+ </code></p></div>\r
+\r
+ </div></div>\r
+<div class="bottomlang">\r
+<p><span>Langues Disponibles: </span><a href="../en/misc/security_tips.html" hreflang="en" rel="alternate" title="English"> en </a> |\r
+<a href="../fr/misc/security_tips.html" title="Français"> fr </a> |\r
+<a href="../ko/misc/security_tips.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |\r
+<a href="../tr/misc/security_tips.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>\r
+</div><div id="footer">\r
+<p class="apache">Copyright 2009 The Apache Software Foundation.<br />Authorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>\r
+<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p></div>\r
</body></html>
\ No newline at end of file
<modulefile>mod_proxy_ftp.xml</modulefile>
<modulefile>mod_proxy_http.xml</modulefile>
<modulefile>mod_proxy_scgi.xml</modulefile>
+ <modulefile>mod_remoteip.xml</modulefile>
<modulefile>mod_request.xml</modulefile>
<modulefile>mod_rewrite.xml</modulefile>
<modulefile>mod_sed.xml</modulefile>
<modulefile>mod_proxy_ftp.xml</modulefile>
<modulefile>mod_proxy_http.xml</modulefile>
<modulefile>mod_proxy_scgi.xml</modulefile>
+ <modulefile>mod_remoteip.xml</modulefile>
<modulefile>mod_request.xml</modulefile>
<modulefile>mod_rewrite.xml</modulefile>
<modulefile>mod_sed.xml</modulefile>
<modulefile>mod_proxy_ftp.xml</modulefile>
<modulefile>mod_proxy_http.xml</modulefile>
<modulefile>mod_proxy_scgi.xml</modulefile>
+ <modulefile>mod_remoteip.xml</modulefile>
<modulefile>mod_request.xml</modulefile>
<modulefile>mod_rewrite.xml</modulefile>
<modulefile>mod_sed.xml</modulefile>
<modulefile>mod_proxy_ftp.xml</modulefile>
<modulefile>mod_proxy_http.xml</modulefile>
<modulefile>mod_proxy_scgi.xml</modulefile>
+ <modulefile>mod_remoteip.xml</modulefile>
<modulefile>mod_request.xml</modulefile>
<modulefile>mod_rewrite.xml</modulefile>
<modulefile>mod_sed.xml</modulefile>
<modulefile>mod_proxy_ftp.xml</modulefile>
<modulefile>mod_proxy_http.xml</modulefile>
<modulefile>mod_proxy_scgi.xml</modulefile>
+ <modulefile>mod_remoteip.xml</modulefile>
<modulefile>mod_request.xml</modulefile>
<modulefile>mod_rewrite.xml</modulefile>
<modulefile>mod_sed.xml</modulefile>
<modulefile>mod_proxy_ftp.xml</modulefile>
<modulefile>mod_proxy_http.xml</modulefile>
<modulefile>mod_proxy_scgi.xml</modulefile>
+ <modulefile>mod_remoteip.xml</modulefile>
<modulefile>mod_request.xml</modulefile>
<modulefile>mod_rewrite.xml</modulefile>
<modulefile>mod_sed.xml</modulefile>
<modulefile>mod_proxy_ftp.xml</modulefile>
<modulefile>mod_proxy_http.xml</modulefile>
<modulefile>mod_proxy_scgi.xml</modulefile>
+ <modulefile>mod_remoteip.xml</modulefile>
<modulefile>mod_request.xml.tr</modulefile>
<modulefile>mod_rewrite.xml</modulefile>
<modulefile>mod_sed.xml</modulefile>
<p>A single <code class="directive">NameVirtualHost</code> directive
identifies a set of identical virtual hosts on which the server will
further select from on the basis of the <em>hostname</em>
-requested by the client. The <code class="directive">NameVirtualHost</code>
+requested by the client. The <code class="directive">NameVirtualHost</code>
directive is a required directive if you want to configure
<a href="../vhosts/">name-based virtual hosts</a>.</p>
<a href="../ja/mod/core.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> |
<a href="../tr/mod/core.html" title="Türkçe"> tr </a></p>
</div>
+<div class="outofdate">Bu çeviri güncel olmayabilir. Son değişiklikler için İngilizce sürüm geçerlidir.</div>
<table class="module"><tr><th><a href="module-dict.html#Description">Açıklama:</a></th><td>Apache HTTP Sunucusunda daima mevcut olan çekirdek
özellikler</td></tr>
<tr><th><a href="module-dict.html#Status">Durum:</a></th><td>Çekirdek</td></tr></table>
<p>A single <directive>NameVirtualHost</directive> directive
identifies a set of identical virtual hosts on which the server will
further select from on the basis of the <em>hostname</em>
-requested by the client. The <code class="directive">NameVirtualHost</code>
+requested by the client. The <directive>NameVirtualHost</directive>
directive is a required directive if you want to configure
<a href="../vhosts/">name-based virtual hosts</a>.</p>
<?xml version="1.0"?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.de.xsl"?>
-<!-- English Revision: 167959:758929 (outdated) -->
+<!-- English Revision: 167959:766945 (outdated) -->
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
-<!-- English Revision: 669847:758929 (outdated) -->
+<!-- English Revision: 669847:766945 (outdated) -->
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
<variant outdated="yes">de</variant>
<variant>en</variant>
<variant outdated="yes">ja</variant>
- <variant>tr</variant>
+ <variant outdated="yes">tr</variant>
</variants>
</metafile>
<?xml version="1.0"?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.tr.xsl"?>
-<!-- English Revision: 758929 -->
+<!-- English Revision: 758929:766945 (outdated) -->
<!-- =====================================================
Translated by: Nilgün Belma Bugüner <nilgun belgeler.org>
Reviewed by: Orhan Berent <berent belgeler.org>
<li><a href="mod_alias.html#redirectmatch">RedirectMatch</a></li>
<li><a href="mod_alias.html#redirectpermanent">RedirectPermanent</a></li>
<li><a href="mod_alias.html#redirecttemp">RedirectTemp</a></li>
+<li><a href="mod_remoteip.html#remoteipheader">RemoteIPHeader</a></li>
+<li><a href="mod_remoteip.html#remoteipinternalproxy">RemoteIPInternalProxy</a></li>
+<li><a href="mod_remoteip.html#remoteipinternalproxylist">RemoteIPInternalProxyList</a></li>
+<li><a href="mod_remoteip.html#remoteipproxiesheader">RemoteIPProxiesHeader</a></li>
+<li><a href="mod_remoteip.html#remoteiptrustedproxy">RemoteIPTrustedProxy</a></li>
+<li><a href="mod_remoteip.html#remoteiptrustedproxylist">RemoteIPTrustedProxyList</a></li>
<li><a href="mod_mime.html#removecharset">RemoveCharset</a></li>
<li><a href="mod_mime.html#removeencoding">RemoveEncoding</a></li>
<li><a href="mod_mime.html#removehandler">RemoveHandler</a></li>
<li><a href="mod_alias.html#redirectmatch">RedirectMatch</a></li>
<li><a href="mod_alias.html#redirectpermanent">RedirectPermanent</a></li>
<li><a href="mod_alias.html#redirecttemp">RedirectTemp</a></li>
+<li><a href="mod_remoteip.html#remoteipheader">RemoteIPHeader</a></li>
+<li><a href="mod_remoteip.html#remoteipinternalproxy">RemoteIPInternalProxy</a></li>
+<li><a href="mod_remoteip.html#remoteipinternalproxylist">RemoteIPInternalProxyList</a></li>
+<li><a href="mod_remoteip.html#remoteipproxiesheader">RemoteIPProxiesHeader</a></li>
+<li><a href="mod_remoteip.html#remoteiptrustedproxy">RemoteIPTrustedProxy</a></li>
+<li><a href="mod_remoteip.html#remoteiptrustedproxylist">RemoteIPTrustedProxyList</a></li>
<li><a href="mod_mime.html#removecharset">RemoveCharset</a></li>
<li><a href="mod_mime.html#removeencoding">RemoveEncoding</a></li>
<li><a href="mod_mime.html#removehandler">RemoveHandler</a></li>
<li><a href="mod_alias.html#redirectmatch">RedirectMatch</a></li>
<li><a href="mod_alias.html#redirectpermanent">RedirectPermanent</a></li>
<li><a href="mod_alias.html#redirecttemp">RedirectTemp</a></li>
+<li><a href="mod_remoteip.html#remoteipheader">RemoteIPHeader</a></li>
+<li><a href="mod_remoteip.html#remoteipinternalproxy">RemoteIPInternalProxy</a></li>
+<li><a href="mod_remoteip.html#remoteipinternalproxylist">RemoteIPInternalProxyList</a></li>
+<li><a href="mod_remoteip.html#remoteipproxiesheader">RemoteIPProxiesHeader</a></li>
+<li><a href="mod_remoteip.html#remoteiptrustedproxy">RemoteIPTrustedProxy</a></li>
+<li><a href="mod_remoteip.html#remoteiptrustedproxylist">RemoteIPTrustedProxyList</a></li>
<li><a href="mod_mime.html#removecharset">RemoveCharset</a></li>
<li><a href="mod_mime.html#removeencoding">RemoveEncoding</a></li>
<li><a href="mod_mime.html#removehandler">RemoveHandler</a></li>
<li><a href="mod_alias.html#redirectmatch">RedirectMatch</a></li>
<li><a href="mod_alias.html#redirectpermanent">RedirectPermanent</a></li>
<li><a href="mod_alias.html#redirecttemp">RedirectTemp</a></li>
+<li><a href="mod_remoteip.html#remoteipheader">RemoteIPHeader</a></li>
+<li><a href="mod_remoteip.html#remoteipinternalproxy">RemoteIPInternalProxy</a></li>
+<li><a href="mod_remoteip.html#remoteipinternalproxylist">RemoteIPInternalProxyList</a></li>
+<li><a href="mod_remoteip.html#remoteipproxiesheader">RemoteIPProxiesHeader</a></li>
+<li><a href="mod_remoteip.html#remoteiptrustedproxy">RemoteIPTrustedProxy</a></li>
+<li><a href="mod_remoteip.html#remoteiptrustedproxylist">RemoteIPTrustedProxyList</a></li>
<li><a href="mod_mime.html#removecharset">RemoveCharset</a></li>
<li><a href="mod_mime.html#removeencoding">RemoveEncoding</a></li>
<li><a href="mod_mime.html#removehandler">RemoveHandler</a></li>
<li><a href="mod_alias.html#redirectmatch">RedirectMatch</a></li>
<li><a href="mod_alias.html#redirectpermanent">RedirectPermanent</a></li>
<li><a href="mod_alias.html#redirecttemp">RedirectTemp</a></li>
+<li><a href="mod_remoteip.html#remoteipheader">RemoteIPHeader</a></li>
+<li><a href="mod_remoteip.html#remoteipinternalproxy">RemoteIPInternalProxy</a></li>
+<li><a href="mod_remoteip.html#remoteipinternalproxylist">RemoteIPInternalProxyList</a></li>
+<li><a href="mod_remoteip.html#remoteipproxiesheader">RemoteIPProxiesHeader</a></li>
+<li><a href="mod_remoteip.html#remoteiptrustedproxy">RemoteIPTrustedProxy</a></li>
+<li><a href="mod_remoteip.html#remoteiptrustedproxylist">RemoteIPTrustedProxyList</a></li>
<li><a href="mod_mime.html#removecharset">RemoveCharset</a></li>
<li><a href="mod_mime.html#removeencoding">RemoveEncoding</a></li>
<li><a href="mod_mime.html#removehandler">RemoveHandler</a></li>
<li><a href="mod_alias.html#redirectmatch">RedirectMatch</a></li>
<li><a href="mod_alias.html#redirectpermanent">RedirectPermanent</a></li>
<li><a href="mod_alias.html#redirecttemp">RedirectTemp</a></li>
+<li><a href="mod_remoteip.html#remoteipheader">RemoteIPHeader</a></li>
+<li><a href="mod_remoteip.html#remoteipinternalproxy">RemoteIPInternalProxy</a></li>
+<li><a href="mod_remoteip.html#remoteipinternalproxylist">RemoteIPInternalProxyList</a></li>
+<li><a href="mod_remoteip.html#remoteipproxiesheader">RemoteIPProxiesHeader</a></li>
+<li><a href="mod_remoteip.html#remoteiptrustedproxy">RemoteIPTrustedProxy</a></li>
+<li><a href="mod_remoteip.html#remoteiptrustedproxylist">RemoteIPTrustedProxyList</a></li>
<li><a href="mod_mime.html#removecharset">RemoveCharset</a></li>
<li><a href="mod_mime.html#removeencoding">RemoveEncoding</a></li>
<li><a href="mod_mime.html#removehandler">RemoveHandler</a></li>
<dt><a href="mod_proxy_http.html">mod_proxy_http</a></dt><dd>HTTP support module for
<code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code></dd>
<dt><a href="mod_proxy_scgi.html">mod_proxy_scgi</a></dt><dd>SCGI gateway module for <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code></dd>
-<dt><a href="mod_request.html" id="R" name="R">mod_request</a></dt><dd>Filters to handle and make available HTTP request bodies</dd>
+<dt><a href="mod_remoteip.html" id="R" name="R">mod_remoteip</a></dt><dd>Replaces the apparent client remote IP address and hostname
+for the request with the IP address list presented by a proxies or a load
+balancer via the request headers.
+</dd>
+<dt><a href="mod_request.html">mod_request</a></dt><dd>Filters to handle and make available HTTP request bodies</dd>
<dt><a href="mod_rewrite.html">mod_rewrite</a></dt><dd>Provides a rule-based rewriting engine to rewrite requested
URLs on the fly</dd>
<dt><a href="mod_sed.html" id="S" name="S">mod_sed</a></dt><dd>Filter Input (request) and Output (response) content using <code>sed</code> syntax</dd>
<dt><a href="mod_proxy_http.html">mod_proxy_http</a></dt><dd>HTTP support module for
<code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code></dd>
<dt><a href="mod_proxy_scgi.html">mod_proxy_scgi</a></dt><dd>SCGI gateway module for <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code></dd>
-<dt><a href="mod_request.html" id="R" name="R">mod_request</a></dt><dd>Filters to handle and make available HTTP request bodies</dd>
+<dt><a href="mod_remoteip.html" id="R" name="R">mod_remoteip</a></dt><dd>Replaces the apparent client remote IP address and hostname
+for the request with the IP address list presented by a proxies or a load
+balancer via the request headers.
+</dd>
+<dt><a href="mod_request.html">mod_request</a></dt><dd>Filters to handle and make available HTTP request bodies</dd>
<dt><a href="mod_rewrite.html">mod_rewrite</a></dt><dd>Provides a rule-based rewriting engine to rewrite requested
URLs on the fly</dd>
<dt><a href="mod_sed.html" id="S" name="S">mod_sed</a></dt><dd>Filter Input (request) and Output (response) content using <code>sed</code> syntax</dd>
<dt><a href="mod_proxy_http.html">mod_proxy_http</a></dt><dd>HTTP support module for
<code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code></dd>
<dt><a href="mod_proxy_scgi.html">mod_proxy_scgi</a></dt><dd>SCGI gateway module for <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code></dd>
-<dt><a href="mod_request.html" id="R" name="R">mod_request</a></dt><dd>Filters to handle and make available HTTP request bodies</dd>
+<dt><a href="mod_remoteip.html" id="R" name="R">mod_remoteip</a></dt><dd>Replaces the apparent client remote IP address and hostname
+for the request with the IP address list presented by a proxies or a load
+balancer via the request headers.
+</dd>
+<dt><a href="mod_request.html">mod_request</a></dt><dd>Filters to handle and make available HTTP request bodies</dd>
<dt><a href="mod_rewrite.html">mod_rewrite</a></dt><dd>Provides a rule-based rewriting engine to rewrite requested
URLs on the fly</dd>
<dt><a href="mod_sed.html" id="S" name="S">mod_sed</a></dt><dd>Filter Input (request) and Output (response) content using <code>sed</code> syntax</dd>
<dt><a href="mod_proxy_http.html">mod_proxy_http</a></dt><dd>HTTP support module for
<code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code></dd>
<dt><a href="mod_proxy_scgi.html">mod_proxy_scgi</a></dt><dd>SCGI gateway module for <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code></dd>
-<dt><a href="mod_request.html" id="R" name="R">mod_request</a></dt><dd>Filters to handle and make available HTTP request bodies</dd>
+<dt><a href="mod_remoteip.html" id="R" name="R">mod_remoteip</a></dt><dd>Replaces the apparent client remote IP address and hostname
+for the request with the IP address list presented by a proxies or a load
+balancer via the request headers.
+</dd>
+<dt><a href="mod_request.html">mod_request</a></dt><dd>Filters to handle and make available HTTP request bodies</dd>
<dt><a href="mod_rewrite.html">mod_rewrite</a></dt><dd>Provides a rule-based rewriting engine to rewrite requested
URLs on the fly</dd>
<dt><a href="mod_sed.html" id="S" name="S">mod_sed</a></dt><dd>Filter Input (request) and Output (response) content using <code>sed</code> syntax</dd>
<dt><a href="mod_proxy_http.html">mod_proxy_http</a></dt><dd>HTTP support module for
<code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code></dd>
<dt><a href="mod_proxy_scgi.html">mod_proxy_scgi</a></dt><dd>SCGI gateway module for <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code></dd>
-<dt><a href="mod_request.html" id="R" name="R">mod_request</a></dt><dd>Filters to handle and make available HTTP request bodies</dd>
+<dt><a href="mod_remoteip.html" id="R" name="R">mod_remoteip</a></dt><dd>Replaces the apparent client remote IP address and hostname
+for the request with the IP address list presented by a proxies or a load
+balancer via the request headers.
+</dd>
+<dt><a href="mod_request.html">mod_request</a></dt><dd>Filters to handle and make available HTTP request bodies</dd>
<dt><a href="mod_rewrite.html">mod_rewrite</a></dt><dd>Provides a rule-based rewriting engine to rewrite requested
URLs on the fly</dd>
<dt><a href="mod_sed.html" id="S" name="S">mod_sed</a></dt><dd>Filter Input (request) and Output (response) content using <code>sed</code> syntax</dd>
<dt><a href="mod_proxy_http.html">mod_proxy_http</a></dt><dd>HTTP support module for
<code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code></dd>
<dt><a href="mod_proxy_scgi.html">mod_proxy_scgi</a></dt><dd>SCGI gateway module for <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code></dd>
-<dt><a href="mod_request.html" id="R" name="R">mod_request</a></dt><dd>HTTP istek gövdelerini işleme sokup kullanılabilir kılan süzgeçler</dd>
+<dt><a href="mod_remoteip.html" id="R" name="R">mod_remoteip</a></dt><dd>Replaces the apparent client remote IP address and hostname
+for the request with the IP address list presented by a proxies or a load
+balancer via the request headers.
+</dd>
+<dt><a href="mod_request.html">mod_request</a></dt><dd>HTTP istek gövdelerini işleme sokup kullanılabilir kılan süzgeçler</dd>
<dt><a href="mod_rewrite.html">mod_rewrite</a></dt><dd>Provides a rule-based rewriting engine to rewrite requested
URLs on the fly</dd>
<dt><a href="mod_sed.html" id="S" name="S">mod_sed</a></dt><dd>Filter Input (request) and Output (response) content using <code>sed</code> syntax</dd>
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_plainmem - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.3</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP Server</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.3</a> > <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_plainmem</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_plainmem.html" title="English"> en </a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Slot-based shared memory provider.</td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>plainmem_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_plainmem.c</td></tr></table>
-<h3>Summary</h3>
-
- <p><code>mod_plainmem</code> is a memory provider which
- provides for creation and access to a plain memory segment
- in which the datasets are organized in "slots." Although
- it can be used directly, normally <code class="module"><a href="../mod/mod_slotmem.html">mod_slotmem</a></code>
- is used as a front-end.
- </p>
-
- <p>If the memory needs to be shared between threads and
- processes, a better provider would be
- <code class="module"><a href="../mod/mod_sharedmem.html">mod_sharedmem</a></code>.
- </p>
-
- <p><code>mod_plainmem</code> provides the following
- API functions:
- </p>
-
- <dl>
- <dt>apr_status_t slotmem_do(ap_slotmem_t *s, ap_slotmem_callback_fn_t *func, void *data, apr_pool_t *pool)</dt>
- <dd>call the callback on all worker slots</dd>
-
- <dt>apr_status_t slotmem_create(ap_slotmem_t **new, const char *name, apr_size_t item_size, int item_num, apr_pool_t *pool)</dt>
- <dd>create a new slotmem with each item size is item_size.</dd>
-
- <dt>apr_status_t slotmem_attach(ap_slotmem_t **new, const char *name, apr_size_t *item_size, int *item_num, apr_pool_t *pool)</dt>
- <dd>attach to an existing slotmem.</dd>
-
- <dt>apr_status_t slotmem_mem(ap_slotmem_t *s, int item_id, void**mem)</dt>
- <dd>get the memory associated with this worker slot.</dd>
-
- <dt>apr_status_t slotmem_lock(ap_slotmem_t *s)</dt>
- <dd>lock the memory segment</dd>
-
- <dt>(apr_status_t slotmem_unlock(ap_slotmem_t *s)</dt>
- <dd>unlock the memory segment</dd>
- </dl>
-
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<p>This module provides no
- directives.</p>
-</div>
-
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_plainmem.html" title="English"> en </a></p>
-</div><div id="footer">
-<p class="apache">Copyright 2009 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
+<?xml version="1.0" encoding="ISO-8859-1"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--\r
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r
+ This file is generated from xml source: DO NOT EDIT\r
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r
+ -->\r
+<title>mod_plainmem - Apache HTTP Server</title>\r
+<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />\r
+<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />\r
+<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />\r
+<link href="../images/favicon.ico" rel="shortcut icon" /></head>\r
+<body>\r
+<div id="page-header">\r
+<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>\r
+<p class="apache">Apache HTTP Server Version 2.3</p>\r
+<img alt="" src="../images/feather.gif" /></div>\r
+<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div>\r
+<div id="path">\r
+<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP Server</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.3</a> > <a href="./">Modules</a></div>\r
+<div id="page-content">\r
+<div id="preamble"><h1>Apache Module mod_plainmem</h1>\r
+<div class="toplang">\r
+<p><span>Available Languages: </span><a href="../en/mod/mod_plainmem.html" title="English"> en </a></p>\r
+</div>\r
+<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Slot-based shared memory provider.</td></tr>\r
+<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Extension</td></tr>\r
+<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>plainmem_module</td></tr>\r
+<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_plainmem.c</td></tr></table>\r
+<h3>Summary</h3>\r
+\r
+ <p><code>mod_plainmem</code> is a memory provider which\r
+ provides for creation and access to a plain memory segment\r
+ in which the datasets are organized in "slots." Although\r
+ it can be used directly, normally <code class="module"><a href="../mod/mod_slotmem.html">mod_slotmem</a></code>\r
+ is used as a front-end.\r
+ </p>\r
+\r
+ <p>If the memory needs to be shared between threads and\r
+ processes, a better provider would be\r
+ <code class="module"><a href="../mod/mod_sharedmem.html">mod_sharedmem</a></code>.\r
+ </p>\r
+\r
+ <p><code>mod_plainmem</code> provides the following\r
+ API functions:\r
+ </p>\r
+\r
+ <dl>\r
+ <dt>apr_status_t slotmem_do(ap_slotmem_t *s, ap_slotmem_callback_fn_t *func, void *data, apr_pool_t *pool)</dt>\r
+ <dd>call the callback on all worker slots</dd>\r
+\r
+ <dt>apr_status_t slotmem_create(ap_slotmem_t **new, const char *name, apr_size_t item_size, int item_num, apr_pool_t *pool)</dt>\r
+ <dd>create a new slotmem with each item size is item_size.</dd>\r
+\r
+ <dt>apr_status_t slotmem_attach(ap_slotmem_t **new, const char *name, apr_size_t *item_size, int *item_num, apr_pool_t *pool)</dt>\r
+ <dd>attach to an existing slotmem.</dd>\r
+\r
+ <dt>apr_status_t slotmem_mem(ap_slotmem_t *s, int item_id, void**mem)</dt>\r
+ <dd>get the memory associated with this worker slot.</dd>\r
+\r
+ <dt>apr_status_t slotmem_lock(ap_slotmem_t *s)</dt>\r
+ <dd>lock the memory segment</dd>\r
+\r
+ <dt>(apr_status_t slotmem_unlock(ap_slotmem_t *s)</dt>\r
+ <dd>unlock the memory segment</dd>\r
+ </dl>\r
+\r
+</div>\r
+<div id="quickview"><h3 class="directives">Directives</h3>\r
+<p>This module provides no\r
+ directives.</p>\r
+</div>\r
+\r
+</div>\r
+<div class="bottomlang">\r
+<p><span>Available Languages: </span><a href="../en/mod/mod_plainmem.html" title="English"> en </a></p>\r
+</div><div id="footer">\r
+<p class="apache">Copyright 2009 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>\r
+<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>\r
</body></html>
\ No newline at end of file
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>mod_proxy_fdpass - Apache HTTP Server</title>
-<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="../images/favicon.ico" rel="shortcut icon" /></head>
-<body>
-<div id="page-header">
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
-<p class="apache">Apache HTTP Server Version 2.3</p>
-<img alt="" src="../images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP Server</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.3</a> > <a href="./">Modules</a></div>
-<div id="page-content">
-<div id="preamble"><h1>Apache Module mod_proxy_fdpass</h1>
-<div class="toplang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_proxy_fdpass.html" title="English"> en </a></p>
-</div>
-<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>fdpass external process support module for
-<code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code></td></tr>
-<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Extension</td></tr>
-<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>proxy_fdpass_module</td></tr>
-<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_proxy_fdpass.c</td></tr>
-<tr><th><a href="module-dict.html#Compatibility">Compatibility:</a></th><td>Available for unix in version 2.3 and later</td></tr></table>
-<h3>Summary</h3>
-
- <p>This module <em>requires</em> the service of <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code>. It provides support for the passing the socket of the
- client to another process.</p>
-
- <p><code>mod_proxy_fdpass</code> uses the ability of AF_UNIX domain
- sockets to <a href="http://www.freebsd.org/cgi/man.cgi?query=recv">pass an
- open file descriptor</a> to allow another process to finish handling a request.
- </p>
-
- <p>The module has a <code>proxy_fdpass_flusher</code> provider interface,
- which allows another module to optionally send the response headers, or even
- the start of the response body. The default flush provider disables keep-alive,
- and sends the response headers, letting the external process just send a
- response body.</p>
-
- <p>At this time the only data passed to the external process is the client
- socket. To recieve a client socket, call recvfrom with the an allocated
- <a href="http://www.kernel.org/doc/man-pages/online/pages/man3/cmsg.3.html"><code>struct cmsghdr</code></a>. Future versions of this module may include
- more data after the client socket, but this is not implemented at this time.
- </p>
-</div>
-<div id="quickview"><h3 class="directives">Directives</h3>
-<p>This module provides no
- directives.</p>
-<h3>See also</h3>
-<ul class="seealso">
-<li><code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code></li>
-</ul></div>
-
-</div>
-<div class="bottomlang">
-<p><span>Available Languages: </span><a href="../en/mod/mod_proxy_fdpass.html" title="English"> en </a></p>
-</div><div id="footer">
-<p class="apache">Copyright 2009 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
+<?xml version="1.0" encoding="ISO-8859-1"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--\r
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r
+ This file is generated from xml source: DO NOT EDIT\r
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r
+ -->\r
+<title>mod_proxy_fdpass - Apache HTTP Server</title>\r
+<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />\r
+<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />\r
+<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />\r
+<link href="../images/favicon.ico" rel="shortcut icon" /></head>\r
+<body>\r
+<div id="page-header">\r
+<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>\r
+<p class="apache">Apache HTTP Server Version 2.3</p>\r
+<img alt="" src="../images/feather.gif" /></div>\r
+<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div>\r
+<div id="path">\r
+<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP Server</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.3</a> > <a href="./">Modules</a></div>\r
+<div id="page-content">\r
+<div id="preamble"><h1>Apache Module mod_proxy_fdpass</h1>\r
+<div class="toplang">\r
+<p><span>Available Languages: </span><a href="../en/mod/mod_proxy_fdpass.html" title="English"> en </a></p>\r
+</div>\r
+<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>fdpass external process support module for\r
+<code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code></td></tr>\r
+<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Extension</td></tr>\r
+<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>proxy_fdpass_module</td></tr>\r
+<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_proxy_fdpass.c</td></tr>\r
+<tr><th><a href="module-dict.html#Compatibility">Compatibility:</a></th><td>Available for unix in version 2.3 and later</td></tr></table>\r
+<h3>Summary</h3>\r
+\r
+ <p>This module <em>requires</em> the service of <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code>. It provides support for the passing the socket of the\r
+ client to another process.</p>\r
+\r
+ <p><code>mod_proxy_fdpass</code> uses the ability of AF_UNIX domain \r
+ sockets to <a href="http://www.freebsd.org/cgi/man.cgi?query=recv">pass an \r
+ open file descriptor</a> to allow another process to finish handling a request.\r
+ </p>\r
+\r
+ <p>The module has a <code>proxy_fdpass_flusher</code> provider interface, \r
+ which allows another module to optionally send the response headers, or even\r
+ the start of the response body. The default flush provider disables keep-alive,\r
+ and sends the response headers, letting the external process just send a\r
+ response body.</p>\r
+\r
+ <p>At this time the only data passed to the external process is the client \r
+ socket. To recieve a client socket, call recvfrom with the an allocated \r
+ <a href="http://www.kernel.org/doc/man-pages/online/pages/man3/cmsg.3.html"><code>struct cmsghdr</code></a>. Future versions of this module may include\r
+ more data after the client socket, but this is not implemented at this time.\r
+ </p>\r
+</div>\r
+<div id="quickview"><h3 class="directives">Directives</h3>\r
+<p>This module provides no\r
+ directives.</p>\r
+<h3>See also</h3>\r
+<ul class="seealso">\r
+<li><code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code></li>\r
+</ul></div>\r
+\r
+</div>\r
+<div class="bottomlang">\r
+<p><span>Available Languages: </span><a href="../en/mod/mod_proxy_fdpass.html" title="English"> en </a></p>\r
+</div><div id="footer">\r
+<p class="apache">Copyright 2009 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>\r
+<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>\r
</body></html>
\ No newline at end of file
--- /dev/null
+# GENERATED FROM XML -- DO NOT EDIT
+
+URI: mod_remoteip.html.en
+Content-Language: en
+Content-type: text/html; charset=ISO-8859-1
--- /dev/null
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ This file is generated from xml source: DO NOT EDIT
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ -->
+<title>mod_remoteip - Apache HTTP Server</title>
+<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
+<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
+<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
+<link href="../images/favicon.ico" rel="shortcut icon" /></head>
+<body>
+<div id="page-header">
+<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
+<p class="apache">Apache HTTP Server Version 2.3</p>
+<img alt="" src="../images/feather.gif" /></div>
+<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div>
+<div id="path">
+<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP Server</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.3</a> > <a href="./">Modules</a></div>
+<div id="page-content">
+<div id="preamble"><h1>Apache Module mod_remoteip</h1>
+<div class="toplang">
+<p><span>Available Languages: </span><a href="../en/mod/mod_remoteip.html" title="English"> en </a></p>
+</div>
+<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Replaces the apparent client remote IP address and hostname
+for the request with the IP address list presented by a proxies or a load
+balancer via the request headers.
+</td></tr>
+<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Base</td></tr>
+<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>remoteip_module</td></tr>
+<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_remoteip.c</td></tr></table>
+<h3>Summary</h3>
+
+ <p>This module is used to treat the remote host which initiated the
+ request as the originating remote host as identified by httpd for the
+ purposes of authorization and logging, even where that remote host is
+ behind a load balancer, front end server, or proxy server.</p>
+
+ <p>The module replaces the apparent remote (client) IP/hostname for
+ the request with the IP address reported in the request header
+ configured with the <code class="directive">RemoteIPHeader</code> directive.</p>
+
+ <p>Once replaced as instructed, this apparent IP address is then used
+ for <code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code> features
+ <code class="directive"><a href="../mod/mod_authz_host.html#require host"><Require host></a></code>
+ and <code class="directive"><a href="../mod/mod_authz_host.html#require ip"><Require ip></a></code>,
+ is reported by <code class="module"><a href="../mod/mod_status.html">mod_status</a></code>, and is recorded by
+ <code class="module"><a href="../mod/mod_log_config.html">mod_log_config</a></code> <code>%a</code> and <code>%h</code>
+ directives. It also determines the machine probed for an inetd
+ identity by <code class="module"><a href="../mod/mod_ident.html">mod_ident</a></code> based on the
+ <code class="directive"><a href="../mod/mod_ident.html#identitycheck">IdentityCheck</a></code> configuration.</p>
+
+ <div class="warning">It is critical to only enable this behavior from
+
+ intermediate hosts (proxies, etc) which are trusted by this server, since
+ it is trivial for the remote client to impersonate another client.</div>
+</div>
+<div id="quickview"><h3 class="directives">Directives</h3>
+<ul id="toc">
+<li><img alt="" src="../images/down.gif" /> <a href="#remoteipheader">RemoteIPHeader</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#remoteipinternalproxy">RemoteIPInternalProxy</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#remoteipinternalproxylist">RemoteIPInternalProxyList</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#remoteipproxiesheader">RemoteIPProxiesHeader</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#remoteiptrustedproxy">RemoteIPTrustedProxy</a></li>
+<li><img alt="" src="../images/down.gif" /> <a href="#remoteiptrustedproxylist">RemoteIPTrustedProxyList</a></li>
+</ul>
+<h3>Topics</h3>
+<ul id="topics">
+<li><img alt="" src="../images/down.gif" /> <a href="#processing">Remote IP Processing</a></li>
+</ul><h3>See also</h3>
+<ul class="seealso">
+<li><code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code></li>
+<li><code class="module"><a href="../mod/mod_status.html">mod_status</a></code></li>
+<li><code class="module"><a href="../mod/mod_log_config.html">mod_log_config</a></code></li>
+<li><code class="module"><a href="../mod/mod_ident.html">mod_ident</a></code></li>
+</ul></div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="section">
+<h2><a name="processing" id="processing">Remote IP Processing</a></h2>
+
+ <p>Apache identifies the client with the connection's remote_ip value,
+ and the connection remote_host and remote_logname are derived from this
+ value. These fields play a role in authentication, authorization and
+ logging and other purposes by other loadable modules.</p>
+
+ <p>mod_remoteip replaces the true remote_ip with the advertised remote_ip as
+ provided by a proxy, for every evaluation of the client that occurs in the
+ server, and resets the remote_host and remote_logname values to trigger a
+ fresh dns or ident query of the remote IP address.</p>
+
+ <p>When multiple, comma delimited remote IP addresses are listed in the
+ header value, they are processed in Right-to-Left order. Processessing
+ halts when the a given remote IP address is not trusted to present the
+ preceeding IP address. The header field is updated to this remaining
+ list of unconfirmed IP addresses, or if all IP addresses were trusted,
+ this header is removed from the request altogether.</p>
+
+ <p>In replacing the remote_ip, the module stores the list of intermediate
+ hosts in a remoteip-proxy-ip-list note, which <code class="module"><a href="../mod/mod_log_config.html">mod_log_config</a></code>
+ can record using the <code>%{remoteip-proxy-ip-list}n</code> format token.
+ If the administrator needs to store this as an additional header, this
+ same value can also be recording as a header using the directive
+ <code class="directive">RemoteIPProxiesHeader</code>.</p>
+
+ <div class="note"><h3>IPv4-over-IPv6 Mapped Addresses</h3>
+ As with httpd in general, any IPv4-over-IPv6 mapped addresses are recorded
+ in their IPv4 representation.</div>
+
+ <div class="note"><h3>Internal (Private) Addresses</h3>
+ All internal addresses 10/8, 172.16/12, 192.168/16, 169.254/16 and 127/8
+ blocks (and IPv6 addresses outside of the public 2000::/3 block) are only
+ evaluated by mod_remoteip when <code class="directive">RemoteIPInternalProxy</code>
+ internal (intranet) proxies are registered.</div>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="RemoteIPHeader" id="RemoteIPHeader">RemoteIPHeader</a> <a name="remoteipheader" id="remoteipheader">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Declare the header field which should be parsed for client IP addresses</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>RemoteIPHeader <var>header-field</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_remoteip</td></tr>
+</table>
+ <p>The <code class="directive">RemoteIPHeader</code> directive triggers
+ <code class="module"><a href="../mod/mod_remoteip.html">mod_remoteip</a></code> to treat the value of the specified
+ <var>header-field</var> header as the client IP address, or list
+ of intermediate client IP addresses, subject to further configuration
+ of the <code class="directive">RemoteIPInternalProxy</code> and
+ <code class="directive">RemoteIPTrustedProxy</code> directives. Unless these
+ other directives are used, <code class="module"><a href="../mod/mod_remoteip.html">mod_remoteip</a></code> will trust all
+ hosts presenting a <code class="directive">RemoteIPHeader</code> IP value.</p>
+
+ <div class="example"><h3>Internal (Load Balancer) Example</h3><p><code>
+ RemoteIPHeader X-Client-IP
+ </code></p></div>
+
+ <div class="example"><h3>Proxy Example</h3><p><code>
+ RemoteIPHeader X-Forwarded-For
+ </code></p></div>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="RemoteIPInternalProxy" id="RemoteIPInternalProxy">RemoteIPInternalProxy</a> <a name="remoteipinternalproxy" id="remoteipinternalproxy">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Declare client intranet IP addresses trusted to present the RemoteIPHeader value</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>RemoteIPInternalProxy <var>proxy-ip</var>|<var>proxy-ip/subnet</var>|<var>hostname</var> ...</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_remoteip</td></tr>
+</table>
+ <p>The <code class="directive">RemoteIPInternalProxy</code> directive adds one
+ or more addresses (or address blocks) to trust as presenting a valid
+ RemoteIPHeader value of the client IP. Unlike the
+ <code class="directive">RemoteIPTrustedProxy</code> directive, any IP address
+ presented in this header, including private intranet addresses, are
+ trusted when passed from these proxies.</p>
+
+ <div class="example"><h3>Internal (Load Balancer) Example</h3><p><code>
+ RemoteIPHeader X-Client-IP<br />
+ RemoteIPTrustedProxy 10.0.2.0/24<br />
+ RemoteIPTrustedProxy gateway.localdomain
+ </code></p></div>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="RemoteIPInternalProxyList" id="RemoteIPInternalProxyList">RemoteIPInternalProxyList</a> <a name="remoteipinternalproxylist" id="remoteipinternalproxylist">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Declare client intranet IP addresses trusted to present the RemoteIPHeader value</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>RemoteIPInternalProxyList <var>filename</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_remoteip</td></tr>
+</table>
+ <p>The <code class="directive">RemoteIPInternalProxyList</code> directive specifies
+ a file parsed at startup, and builds a list of addresses (or address blocks)
+ to trust as presenting a valid RemoteIPHeader value of the client IP.</p>
+
+ <p>The '<code>#</code>' hash character designates a comment line, otherwise
+ each whitespace or newline seperated entry is processed identically to
+ the <code class="directive">RemoteIPInternalProxy</code> directive.</p>
+
+ <div class="example"><h3>Internal (Load Balancer) Example</h3><p><code>
+ RemoteIPHeader X-Client-IP<br />
+ RemoteIPTrustedProxyList conf/trusted-proxies.lst
+ </code></p></div>
+
+ <div class="example"><h3>conf/trusted-proxies.lst contents</h3><p><code>
+ # Our internally trusted proxies;<br />
+ 10.0.2.0/24 #Everyone in the testing group<br />
+ gateway.localdomain #The front end balancer
+ </code></p></div>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="RemoteIPProxiesHeader" id="RemoteIPProxiesHeader">RemoteIPProxiesHeader</a> <a name="remoteipproxiesheader" id="remoteipproxiesheader">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Declare the header field which will record all intermediate IP addresses</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>RemoteIPProxiesHeader <var>HeaderFieldName</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_remoteip</td></tr>
+</table>
+ <p>The <code class="directive">RemoteIPProxiesHeader</code> directive specifies
+ a header into which <code class="module"><a href="../mod/mod_remoteip.html">mod_remoteip</a></code> will collect a list of
+ all of the intermediate client IP addresses trusted to resolve the actual
+ remote IP. Note that intermediate <code class="directive">RemoteIPTrustedProxy</code>
+ addresses are recorded in this header, while any intermediate
+ <code class="directive">RemoteIPInternalProxy</code> addresses are discarded.</p>
+
+ <div class="example"><h3>Example</h3><p><code>
+ RemoteIPHeader X-Forwarded-For<br />
+ RemoteIPProxiesHeader X-Forwarded-By
+ </code></p></div>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="RemoteIPTrustedProxy" id="RemoteIPTrustedProxy">RemoteIPTrustedProxy</a> <a name="remoteiptrustedproxy" id="remoteiptrustedproxy">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Declare client intranet IP addresses trusted to present the RemoteIPHeader value</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>RemoteIPTrustedProxy <var>proxy-ip</var>|<var>proxy-ip/subnet</var>|<var>hostname</var> ...</code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_remoteip</td></tr>
+</table>
+ <p>The <code class="directive">RemoteIPTrustedProxy</code> directive adds one
+ or more addresses (or address blocks) to trust as presenting a valid
+ RemoteIPHeader value of the client IP. Unlike the
+ <code class="directive">RemoteIPInternalProxy</code> directive, any intranet
+ or private IP address reported by such proxies, including the 10/8, 172.16/12,
+ 192.168/16, 169.254/16 and 127/8 blocks (or outside of the IPv6 public
+ 2000::/3 block) are not trusted as the remote IP, and are left in the
+ <code class="directive">RemoteIPHeader</code> header's value.</p>
+
+ <div class="example"><h3>Trusted (Load Balancer) Example</h3><p><code>
+ RemoteIPHeader X-Forwarded-For<br />
+ RemoteIPTrustedProxy 10.0.2.16/28<br />
+ RemoteIPTrustedProxy proxy.example.com
+ </code></p></div>
+
+</div>
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+<div class="directive-section"><h2><a name="RemoteIPTrustedProxyList" id="RemoteIPTrustedProxyList">RemoteIPTrustedProxyList</a> <a name="remoteiptrustedproxylist" id="remoteiptrustedproxylist">Directive</a></h2>
+<table class="directive">
+<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Declare client intranet IP addresses trusted to present the RemoteIPHeader value</td></tr>
+<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>RemoteIPTrustedProxyList <var>filename</var></code></td></tr>
+<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
+<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
+<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_remoteip</td></tr>
+</table>
+ <p>The <code class="directive">RemoteIPTrustedProxyList</code> directive specifies
+ a file parsed at startup, and builds a list of addresses (or address blocks)
+ to trust as presenting a valid RemoteIPHeader value of the client IP.</p>
+
+ <p>The '<code>#</code>' hash character designates a comment line, otherwise
+ each whitespace or newline seperated entry is processed identically to
+ the <code class="directive">RemoteIPTrustedProxy</code> directive.</p>
+
+ <div class="example"><h3>Trusted (Load Balancer) Example</h3><p><code>
+ RemoteIPHeader X-Forwarded-For<br />
+ RemoteIPTrustedProxyList conf/trusted-proxies.lst
+ </code></p></div>
+
+ <div class="example"><h3>conf/trusted-proxies.lst contents</h3><p><code>
+ # Identified external proxies;<br />
+ 192.0.2.16/28 #wap phone group of proxies<br />
+ proxy.isp.example.com #some well known ISP
+ </code></p></div>
+
+</div>
+</div>
+<div class="bottomlang">
+<p><span>Available Languages: </span><a href="../en/mod/mod_remoteip.html" title="English"> en </a></p>
+</div><div id="footer">
+<p class="apache">Copyright 2009 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
+<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
+</body></html>
\ No newline at end of file
a different URL</td></tr>
<tr><td><a href="mod_alias.html#redirecttemp">RedirectTemp <var>URL-path</var> <var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Sends an external temporary redirect asking the client to fetch
a different URL</td></tr>
+<tr class="odd"><td><a href="mod_remoteip.html#remoteipheader">RemoteIPHeader <var>header-field</var></a></td><td></td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Declare the header field which should be parsed for client IP addresses</td></tr>
+<tr><td><a href="mod_remoteip.html#remoteipinternalproxy">RemoteIPInternalProxy <var>proxy-ip</var>|<var>proxy-ip/subnet</var>|<var>hostname</var> ...</a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Declare client intranet IP addresses trusted to present the RemoteIPHeader value</td></tr>
+<tr class="odd"><td><a href="mod_remoteip.html#remoteipinternalproxylist">RemoteIPInternalProxyList <var>filename</var></a></td><td></td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Declare client intranet IP addresses trusted to present the RemoteIPHeader value</td></tr>
+<tr><td><a href="mod_remoteip.html#remoteipproxiesheader">RemoteIPProxiesHeader <var>HeaderFieldName</var></a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Declare the header field which will record all intermediate IP addresses</td></tr>
+<tr class="odd"><td><a href="mod_remoteip.html#remoteiptrustedproxy">RemoteIPTrustedProxy <var>proxy-ip</var>|<var>proxy-ip/subnet</var>|<var>hostname</var> ...</a></td><td></td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Declare client intranet IP addresses trusted to present the RemoteIPHeader value</td></tr>
+<tr><td><a href="mod_remoteip.html#remoteiptrustedproxylist">RemoteIPTrustedProxyList <var>filename</var></a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Declare client intranet IP addresses trusted to present the RemoteIPHeader value</td></tr>
<tr class="odd"><td><a href="mod_mime.html#removecharset">RemoveCharset <var>extension</var> [<var>extension</var>]
...</a></td><td></td><td>vdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Removes any character set associations for a set of file
extensions</td></tr>
a different URL</td></tr>
<tr><td><a href="mod_alias.html#redirecttemp">RedirectTemp <var>URL-path</var> <var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Sends an external temporary redirect asking the client to fetch
a different URL</td></tr>
+<tr class="odd"><td><a href="mod_remoteip.html#remoteipheader">RemoteIPHeader <var>header-field</var></a></td><td></td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Declare the header field which should be parsed for client IP addresses</td></tr>
+<tr><td><a href="mod_remoteip.html#remoteipinternalproxy">RemoteIPInternalProxy <var>proxy-ip</var>|<var>proxy-ip/subnet</var>|<var>hostname</var> ...</a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Declare client intranet IP addresses trusted to present the RemoteIPHeader value</td></tr>
+<tr class="odd"><td><a href="mod_remoteip.html#remoteipinternalproxylist">RemoteIPInternalProxyList <var>filename</var></a></td><td></td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Declare client intranet IP addresses trusted to present the RemoteIPHeader value</td></tr>
+<tr><td><a href="mod_remoteip.html#remoteipproxiesheader">RemoteIPProxiesHeader <var>HeaderFieldName</var></a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Declare the header field which will record all intermediate IP addresses</td></tr>
+<tr class="odd"><td><a href="mod_remoteip.html#remoteiptrustedproxy">RemoteIPTrustedProxy <var>proxy-ip</var>|<var>proxy-ip/subnet</var>|<var>hostname</var> ...</a></td><td></td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Declare client intranet IP addresses trusted to present the RemoteIPHeader value</td></tr>
+<tr><td><a href="mod_remoteip.html#remoteiptrustedproxylist">RemoteIPTrustedProxyList <var>filename</var></a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Declare client intranet IP addresses trusted to present the RemoteIPHeader value</td></tr>
<tr class="odd"><td><a href="mod_mime.html#removecharset">RemoveCharset <var>extension</var> [<var>extension</var>]
...</a></td><td></td><td>vdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Removes any character set associations for a set of file
extensions</td></tr>
a different URL</td></tr>
<tr><td><a href="mod_alias.html#redirecttemp">RedirectTemp <var>URL-path</var> <var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Sends an external temporary redirect asking the client to fetch
a different URL</td></tr>
+<tr class="odd"><td><a href="mod_remoteip.html#remoteipheader">RemoteIPHeader <var>header-field</var></a></td><td></td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Declare the header field which should be parsed for client IP addresses</td></tr>
+<tr><td><a href="mod_remoteip.html#remoteipinternalproxy">RemoteIPInternalProxy <var>proxy-ip</var>|<var>proxy-ip/subnet</var>|<var>hostname</var> ...</a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Declare client intranet IP addresses trusted to present the RemoteIPHeader value</td></tr>
+<tr class="odd"><td><a href="mod_remoteip.html#remoteipinternalproxylist">RemoteIPInternalProxyList <var>filename</var></a></td><td></td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Declare client intranet IP addresses trusted to present the RemoteIPHeader value</td></tr>
+<tr><td><a href="mod_remoteip.html#remoteipproxiesheader">RemoteIPProxiesHeader <var>HeaderFieldName</var></a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Declare the header field which will record all intermediate IP addresses</td></tr>
+<tr class="odd"><td><a href="mod_remoteip.html#remoteiptrustedproxy">RemoteIPTrustedProxy <var>proxy-ip</var>|<var>proxy-ip/subnet</var>|<var>hostname</var> ...</a></td><td></td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Declare client intranet IP addresses trusted to present the RemoteIPHeader value</td></tr>
+<tr><td><a href="mod_remoteip.html#remoteiptrustedproxylist">RemoteIPTrustedProxyList <var>filename</var></a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Declare client intranet IP addresses trusted to present the RemoteIPHeader value</td></tr>
<tr class="odd"><td><a href="mod_mime.html#removecharset">RemoveCharset <var>extension</var> [<var>extension</var>]
...</a></td><td></td><td>vdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Removes any character set associations for a set of file
extensions</td></tr>
リダイレクトを送る</td></tr>
<tr><td><a href="mod_alias.html#redirecttemp">RedirectTemp <var>URL-path</var> <var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr><td class="descr" colspan="4">クライアントが違う URL を取得するように外部への一時的な
リダイレクトを送る</td></tr>
+<tr class="odd"><td><a href="mod_remoteip.html#remoteipheader">RemoteIPHeader <var>header-field</var></a></td><td></td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Declare the header field which should be parsed for client IP addresses</td></tr>
+<tr><td><a href="mod_remoteip.html#remoteipinternalproxy">RemoteIPInternalProxy <var>proxy-ip</var>|<var>proxy-ip/subnet</var>|<var>hostname</var> ...</a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Declare client intranet IP addresses trusted to present the RemoteIPHeader value</td></tr>
+<tr class="odd"><td><a href="mod_remoteip.html#remoteipinternalproxylist">RemoteIPInternalProxyList <var>filename</var></a></td><td></td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Declare client intranet IP addresses trusted to present the RemoteIPHeader value</td></tr>
+<tr><td><a href="mod_remoteip.html#remoteipproxiesheader">RemoteIPProxiesHeader <var>HeaderFieldName</var></a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Declare the header field which will record all intermediate IP addresses</td></tr>
+<tr class="odd"><td><a href="mod_remoteip.html#remoteiptrustedproxy">RemoteIPTrustedProxy <var>proxy-ip</var>|<var>proxy-ip/subnet</var>|<var>hostname</var> ...</a></td><td></td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Declare client intranet IP addresses trusted to present the RemoteIPHeader value</td></tr>
+<tr><td><a href="mod_remoteip.html#remoteiptrustedproxylist">RemoteIPTrustedProxyList <var>filename</var></a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Declare client intranet IP addresses trusted to present the RemoteIPHeader value</td></tr>
<tr class="odd"><td><a href="mod_mime.html#removecharset">RemoveCharset <var>extension</var> [<var>extension</var>]
...</a></td><td></td><td>vdh</td><td /></tr><tr class="odd"><td class="descr" colspan="4">ファイルの拡張子に関連付けられたすべての文字セット
を解除する</td></tr>
¿µ±¸ ¸®´ÙÀÌ·º¼ÇÀ» º¸³½´Ù</td></tr>
<tr class="odd"><td><a href="mod_alias.html#redirecttemp">RedirectTemp <var>URL-path</var> <var>URL</var></a></td><td></td><td>svdh</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Ŭ¶óÀÌ¾ðÆ®°¡ ´Ù¸¥ URL¿¡ Á¢¼ÓÇϵµ·Ï ¿äûÇÏ´Â ¿ÜºÎ
Àӽà ¸®´ÙÀÌ·º¼ÇÀ» º¸³½´Ù</td></tr>
+<tr><td><a href="mod_remoteip.html#remoteipheader">RemoteIPHeader <var>header-field</var></a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Declare the header field which should be parsed for client IP addresses</td></tr>
+<tr class="odd"><td><a href="mod_remoteip.html#remoteipinternalproxy">RemoteIPInternalProxy <var>proxy-ip</var>|<var>proxy-ip/subnet</var>|<var>hostname</var> ...</a></td><td></td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Declare client intranet IP addresses trusted to present the RemoteIPHeader value</td></tr>
+<tr><td><a href="mod_remoteip.html#remoteipinternalproxylist">RemoteIPInternalProxyList <var>filename</var></a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Declare client intranet IP addresses trusted to present the RemoteIPHeader value</td></tr>
+<tr class="odd"><td><a href="mod_remoteip.html#remoteipproxiesheader">RemoteIPProxiesHeader <var>HeaderFieldName</var></a></td><td></td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Declare the header field which will record all intermediate IP addresses</td></tr>
+<tr><td><a href="mod_remoteip.html#remoteiptrustedproxy">RemoteIPTrustedProxy <var>proxy-ip</var>|<var>proxy-ip/subnet</var>|<var>hostname</var> ...</a></td><td></td><td>sv</td><td>B</td></tr><tr><td class="descr" colspan="4">Declare client intranet IP addresses trusted to present the RemoteIPHeader value</td></tr>
+<tr class="odd"><td><a href="mod_remoteip.html#remoteiptrustedproxylist">RemoteIPTrustedProxyList <var>filename</var></a></td><td></td><td>sv</td><td>B</td></tr><tr class="odd"><td class="descr" colspan="4">Declare client intranet IP addresses trusted to present the RemoteIPHeader value</td></tr>
<tr><td><a href="mod_mime.html#removecharset">RemoveCharset <var>extension</var> [<var>extension</var>]
...</a></td><td></td><td>vdh</td><td>B</td></tr><tr><td class="descr" colspan="4">Removes any character set associations for a set of file
extensions</td></tr>
URL’ye yönlendirir.</td></tr>
<tr><td><a href="mod_alias.html#redirecttemp">RedirectTemp <var>URL-yolu</var> <var>URL</var></a></td><td></td><td>skdh</td><td>T</td></tr><tr><td class="descr" colspan="4">İstemciyi, geçici bir yönlendirme isteği döndürerek farklı bir
URL’ye yönlendirir.</td></tr>
+<tr class="odd"><td><a href="mod_remoteip.html#remoteipheader">RemoteIPHeader <var>header-field</var></a></td><td></td><td>sk</td><td>T</td></tr><tr class="odd"><td class="descr" colspan="4">Declare the header field which should be parsed for client IP addresses</td></tr>
+<tr><td><a href="mod_remoteip.html#remoteipinternalproxy">RemoteIPInternalProxy <var>proxy-ip</var>|<var>proxy-ip/subnet</var>|<var>hostname</var> ...</a></td><td></td><td>sk</td><td>T</td></tr><tr><td class="descr" colspan="4">Declare client intranet IP addresses trusted to present the RemoteIPHeader value</td></tr>
+<tr class="odd"><td><a href="mod_remoteip.html#remoteipinternalproxylist">RemoteIPInternalProxyList <var>filename</var></a></td><td></td><td>sk</td><td>T</td></tr><tr class="odd"><td class="descr" colspan="4">Declare client intranet IP addresses trusted to present the RemoteIPHeader value</td></tr>
+<tr><td><a href="mod_remoteip.html#remoteipproxiesheader">RemoteIPProxiesHeader <var>HeaderFieldName</var></a></td><td></td><td>sk</td><td>T</td></tr><tr><td class="descr" colspan="4">Declare the header field which will record all intermediate IP addresses</td></tr>
+<tr class="odd"><td><a href="mod_remoteip.html#remoteiptrustedproxy">RemoteIPTrustedProxy <var>proxy-ip</var>|<var>proxy-ip/subnet</var>|<var>hostname</var> ...</a></td><td></td><td>sk</td><td>T</td></tr><tr class="odd"><td class="descr" colspan="4">Declare client intranet IP addresses trusted to present the RemoteIPHeader value</td></tr>
+<tr><td><a href="mod_remoteip.html#remoteiptrustedproxylist">RemoteIPTrustedProxyList <var>filename</var></a></td><td></td><td>sk</td><td>T</td></tr><tr><td class="descr" colspan="4">Declare client intranet IP addresses trusted to present the RemoteIPHeader value</td></tr>
<tr class="odd"><td><a href="mod_mime.html#removecharset">RemoveCharset <var>extension</var> [<var>extension</var>]
...</a></td><td></td><td>kdh</td><td>T</td></tr><tr class="odd"><td class="descr" colspan="4">Removes any character set associations for a set of file
extensions</td></tr>
<li><a href="mod/mod_proxy_ftp.html">Apache-Modul mod_proxy_ftp</a></li>
<li><a href="mod/mod_proxy_http.html">Apache-Modul mod_proxy_http</a></li>
<li><a href="mod/mod_proxy_scgi.html">Apache-Modul mod_proxy_scgi</a></li>
+<li><a href="mod/mod_remoteip.html">Apache-Modul mod_remoteip</a></li>
<li><a href="mod/mod_request.html">Apache-Modul mod_request</a></li>
<li><a href="mod/mod_rewrite.html">Apache-Modul mod_rewrite</a></li>
<li><a href="mod/mod_sed.html">Apache-Modul mod_sed</a></li>
<li><a href="mod/mod_proxy_ftp.html">Apache Module mod_proxy_ftp</a></li>
<li><a href="mod/mod_proxy_http.html">Apache Module mod_proxy_http</a></li>
<li><a href="mod/mod_proxy_scgi.html">Apache Module mod_proxy_scgi</a></li>
+<li><a href="mod/mod_remoteip.html">Apache Module mod_remoteip</a></li>
<li><a href="mod/mod_request.html">Apache Module mod_request</a></li>
<li><a href="mod/mod_rewrite.html">Apache Module mod_rewrite</a></li>
<li><a href="mod/mod_sed.html">Apache Module mod_sed</a></li>
<li><a href="mod/mod_proxy_ftp.html">Módulo Apache mod_proxy_ftp</a></li>
<li><a href="mod/mod_proxy_http.html">Módulo Apache mod_proxy_http</a></li>
<li><a href="mod/mod_proxy_scgi.html">Módulo Apache mod_proxy_scgi</a></li>
+<li><a href="mod/mod_remoteip.html">Módulo Apache mod_remoteip</a></li>
<li><a href="mod/mod_request.html">Módulo Apache mod_request</a></li>
<li><a href="mod/mod_rewrite.html">Módulo Apache mod_rewrite</a></li>
<li><a href="mod/mod_sed.html">Módulo Apache mod_sed</a></li>
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head><!--
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- This file is generated from xml source: DO NOT EDIT
- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- -->
-<title>Plan du site - Serveur Apache HTTP</title>
-<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
-<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
-<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
-<link href="./images/favicon.ico" rel="shortcut icon" /></head>
-<body id="manual-page">
-<div id="page-header">
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossaire</a> | <a href="./sitemap.html">Plan du site</a></p>
-<p class="apache">Serveur Apache HTTP Version 2.3</p>
-<img alt="" src="./images/feather.gif" /></div>
-<div class="up"><a href="./"><img title="<-" alt="<-" src="./images/left.gif" /></a></div>
-<div id="path">
-<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Serveur HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="./">Version 2.3</a></div>
-<div id="page-content"><div id="preamble"><h1>Plan du site</h1>
-<div class="toplang">
-<p><span>Langues Disponibles: </span><a href="./de/sitemap.html" hreflang="de" rel="alternate" title="Deutsch"> de </a> |
-<a href="./en/sitemap.html" hreflang="en" rel="alternate" title="English"> en </a> |
-<a href="./es/sitemap.html" hreflang="es" rel="alternate" title="Español"> es </a> |
-<a href="./fr/sitemap.html" title="Français"> fr </a> |
-<a href="./ja/sitemap.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> |
-<a href="./ko/sitemap.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |
-<a href="./tr/sitemap.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>
-</div>
-
-<p>Cette page contient la liste des éléments actuellement disponibles de
-la <a href="./">Documentation du serveur HTTP Apache Version
-2.3</a>.</p>
-</div>
-<div id="quickview"><ul id="toc">
-<li><img alt="" src="./images/down.gif" /> <a href="#release">Notes de version</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#using">Utilisation du serveur HTTP Apache</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#vhosts">Documentation des serveurs virtuels Apache</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#rewrite">Guide de réécriture d'URLs</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#ssl">Chiffrement SSL/TLS avec Apache</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#howto">Guides, Tutoriels, and Recettes</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#platform">Notes spécifiques à certains systèmes</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#programs">Le serveur HTTP Apache et ses programmes associés</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#misc">Documentations diverses sur Apache</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#modules">Modules Apache</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#developer">Documentation du développeur</a></li>
-<li><img alt="" src="./images/down.gif" /> <a href="#index">Glossaire et Index</a></li>
-</ul>
-</div>
-<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="release" id="release">Notes de version</a></h2>
-<ul><li><a href="upgrading.html">Mise à jour vers 2.4 depuis 2.2</a></li>
-<li><a href="new_features_2_4.html">Nouvelles fonctionnalités d'Apache 2.3/2.4</a></li>
-<li><a href="new_features_2_2.html">Nouvelles fonctionnalités d'Apache 2.1/2.2</a></li>
-<li><a href="new_features_2_0.html">Nouvelles fonctionnalités d'Apache 2.0</a></li>
-<li><a href="license.html">License Apache</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="using" id="using">Utilisation du serveur HTTP Apache</a></h2>
-<ul><li><a href="install.html">Compilation et installation</a></li>
-<li><a href="invoking.html">Démarrage</a></li>
-<li><a href="stopping.html">Arrêt ou redémarrage</a></li>
-<li><a href="configuring.html">Fichiers de configuration</a></li>
-<li><a href="sections.html">Comment fonctionnent les sections Directory,
-Location et Files</a></li>
-<li><a href="caching.html">Mise en cache du contenu</a></li>
-<li><a href="server-wide.html">Configuration niveau serveur</a></li>
-<li><a href="logs.html">Fichiers de traces</a></li>
-<li><a href="urlmapping.html">Mise en correspondance des URLs avec le système de fichiers</a></li>
-<li><a href="misc/security_tips.html">Conseils sur la sécurité</a></li>
-<li><a href="dso.html">Objets Dynamiques Partagés (DSO)</a></li>
-<li><a href="content-negotiation.html">Négociation sur le contenu</a></li>
-<li><a href="custom-error.html">Messages d'erreur personnalisés</a></li>
-<li><a href="bind.html">Définition des adresses et ports qu'utilise
-Apache</a></li>
-<li><a href="mpm.html">Modules multi-processus (MPMs)</a></li>
-<li><a href="env.html">Les variables d'environnement d'Apache</a></li>
-<li><a href="handler.html">Utilisation des gestionnaires d'Apache</a></li>
-<li><a href="filter.html">Filtres</a></li>
-<li><a href="suexec.html">Support de suEXEC</a></li>
-<li><a href="misc/perf-tuning.html">Optimisation des performances</a></li>
-<li><a href="faq/">Frequently Asked Questions</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="vhosts" id="vhosts">Documentation des serveurs virtuels Apache</a></h2>
-<ul><li class="separate"><a href="vhosts/">Aperçu</a></li>
-<li><a href="vhosts/name-based.html">Serveurs virtuels basés sur le nom</a></li>
-<li><a href="vhosts/ip-based.html">Support des serveurs virtuels basés
-sur l'adresse IP</a></li>
-<li><a href="vhosts/mass.html">Configuration dynamique de l'hébergement
-virtuel de masse</a></li>
-<li><a href="vhosts/examples.html">Exemples de serveurs virtuels</a></li>
-<li><a href="vhosts/details.html">Discussion approfondie à propos de la
-sélection d'un serveur virtuel</a></li>
-<li><a href="vhosts/fd-limits.html">Limitations inhérentes aux
-descripteurs de fichiers</a></li>
-<li><a href="dns-caveats.html">Problèmes avec DNS et Apache</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="rewrite" id="rewrite">Guide de réécriture d'URLs</a></h2>
-<ul><li class="separate"><a href="rewrite/">Survol</a></li>
-<li><a href="mod/mod_rewrite.html">Documentation de référence de mod_rewrite</a></li>
-<li><a href="rewrite/rewrite_intro.html">Introduction</a></li>
-<li><a href="rewrite/rewrite_flags.html">Drapeaux</a></li>
-<li><a href="rewrite/rewrite_tech.html">Détails techniques</a></li>
-<li><a href="rewrite/rewrite_guide.html">Guide de réécriture - exemples utiles</a></li>
-<li><a href="rewrite/rewrite_guide_advanced.html">Guide de réécriture avancée -
-autres exemples utiles</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="ssl" id="ssl">Chiffrement SSL/TLS avec Apache</a></h2>
-<ul><li class="separate"><a href="ssl/">Aperçu</a></li>
-<li><a href="ssl/ssl_intro.html">Chiffrement SSL/TLS :
-Introduction</a></li>
-<li><a href="ssl/ssl_compat.html">Chiffrement SSL/TLS :
-Compatibilité</a></li>
-<li><a href="ssl/ssl_howto.html">Chiffrement SSL/TLS : Recettes</a></li>
-<li><a href="ssl/ssl_faq.html">Chiffrement SSL/TLS : FAQ</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="howto" id="howto">Guides, Tutoriels, and Recettes</a></h2>
-<ul><li class="separate"><a href="howto/">Aperçu</a></li>
-<li><a href="howto/auth.html">Authentification</a></li>
-<li><a href="howto/cgi.html">Contenu dynamique avec CGI</a></li>
-<li><a href="howto/ssi.html">Introduction aux Inclusions côté serveur
-(Server Side Includes - SSI)</a></li>
-<li><a href="howto/htaccess.html">Fichiers .htaccess</a></li>
-<li><a href="howto/public_html.html">Répertoires web des
-utilisateurs</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="platform" id="platform">Notes spécifiques à certains systèmes</a></h2>
-<ul><li class="separate"><a href="platform/">Aperçu</a></li>
-<li><a href="platform/windows.html">Utiliser Apache avec Microsoft
-Windows</a></li>
-<li><a href="platform/win_compiling.html">Compiler Apache pour
-Microsoft Windows</a></li>
-<li><a href="platform/netware.html">Utiliser Apache avec Novell
-NetWare</a></li>
-<li><a href="platform/perf-hp.html">Mise en oeuvre d'un serveur web
-hautes performances sous HPUX</a></li>
-<li><a href="platform/ebcdic.html">Le portage EBCDIC d'Apache</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="programs" id="programs">Le serveur HTTP Apache et ses programmes associés</a></h2>
-<ul><li class="separate"><a href="programs/">Aperçu</a></li>
-<li><a href="programs/httpd.html">Page de manuel : httpd</a></li>
-<li><a href="programs/ab.html">Page de manuel : ab</a></li>
-<li><a href="programs/apachectl.html">Page de manuel : apachectl</a></li>
-<li><a href="programs/apxs.html">Page de manuel : apxs</a></li>
-<li><a href="programs/configure.html">Page de manuel : configure</a></li>
-<li><a href="programs/dbmmanage.html">Page de manuel : dbmmanage</a></li>
-<li><a href="programs/htcacheclean.html">Page de manuel : htcacheclean</a></li>
-<li><a href="programs/htdbm.html">Page de manuel : htdbm</a></li>
-<li><a href="programs/htdigest.html">Page de manuel : htdigest</a></li>
-<li><a href="programs/htpasswd.html">Page de manuel : htpasswd</a></li>
-<li><a href="programs/logresolve.html">Page de manuel : logresolve</a></li>
-<li><a href="programs/rotatelogs.html">Page de manuel : rotatelogs</a></li>
-<li><a href="programs/suexec.html">Page de manuel : suexec</a></li>
-<li><a href="programs/other.html">Autres programmes</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="misc" id="misc">Documentations diverses sur Apache</a></h2>
-<ul><li class="separate"><a href="misc/">Aperçu</a></li>
-<li><a href="misc/relevant_standards.html">Standards concernés</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="modules" id="modules">Modules Apache</a></h2>
-<ul><li><a href="mod/module-dict.html">Définitions des termes utilisés pour
-décrire les modules Apache</a></li>
-<li><a href="mod/directive-dict.html">Définitions des termes utilisés
-pour décrire les directives Apache</a></li>
-</ul><ul><li><a href="mod/core.html">Fonctionalités de Base Apache</a></li>
-<li><a href="mod/mpm_common.html">Apache MPM: Directives Communes</a></li>
-<li><a href="mod/event.html">Apache MPM event</a></li>
-<li><a href="mod/mpm_netware.html">Apache MPM netware</a></li>
-<li><a href="mod/prefork.html">Apache MPM prefork</a></li>
-<li><a href="mod/mpm_winnt.html">Apache MPM winnt</a></li>
-<li><a href="mod/worker.html">Apache MPM worker</a></li>
-</ul><ul><li><a href="mod/mod_access_compat.html">Mudule Apache mod_access_compat</a></li>
-<li><a href="mod/mod_actions.html">Mudule Apache mod_actions</a></li>
-<li><a href="mod/mod_alias.html">Mudule Apache mod_alias</a></li>
-<li><a href="mod/mod_asis.html">Mudule Apache mod_asis</a></li>
-<li><a href="mod/mod_auth_basic.html">Mudule Apache mod_auth_basic</a></li>
-<li><a href="mod/mod_auth_digest.html">Mudule Apache mod_auth_digest</a></li>
-<li><a href="mod/mod_auth_form.html">Mudule Apache mod_auth_form</a></li>
-<li><a href="mod/mod_authn_anon.html">Mudule Apache mod_authn_anon</a></li>
-<li><a href="mod/mod_authn_core.html">Mudule Apache mod_authn_core</a></li>
-<li><a href="mod/mod_authn_dbd.html">Mudule Apache mod_authn_dbd</a></li>
-<li><a href="mod/mod_authn_dbm.html">Mudule Apache mod_authn_dbm</a></li>
-<li><a href="mod/mod_authn_file.html">Mudule Apache mod_authn_file</a></li>
-<li><a href="mod/mod_authnz_ldap.html">Mudule Apache mod_authnz_ldap</a></li>
-<li><a href="mod/mod_authz_core.html">Mudule Apache mod_authz_core</a></li>
-<li><a href="mod/mod_authz_dbd.html">Mudule Apache mod_authz_dbd</a></li>
-<li><a href="mod/mod_authz_dbm.html">Mudule Apache mod_authz_dbm</a></li>
-<li><a href="mod/mod_authz_groupfile.html">Mudule Apache mod_authz_groupfile</a></li>
-<li><a href="mod/mod_authz_host.html">Mudule Apache mod_authz_host</a></li>
-<li><a href="mod/mod_authz_owner.html">Mudule Apache mod_authz_owner</a></li>
-<li><a href="mod/mod_authz_user.html">Mudule Apache mod_authz_user</a></li>
-<li><a href="mod/mod_autoindex.html">Mudule Apache mod_autoindex</a></li>
-<li><a href="mod/mod_buffer.html">Mudule Apache mod_buffer</a></li>
-<li><a href="mod/mod_cache.html">Mudule Apache mod_cache</a></li>
-<li><a href="mod/mod_cern_meta.html">Mudule Apache mod_cern_meta</a></li>
-<li><a href="mod/mod_cgi.html">Mudule Apache mod_cgi</a></li>
-<li><a href="mod/mod_cgid.html">Mudule Apache mod_cgid</a></li>
-<li><a href="mod/mod_charset_lite.html">Mudule Apache mod_charset_lite</a></li>
-<li><a href="mod/mod_dav.html">Mudule Apache mod_dav</a></li>
-<li><a href="mod/mod_dav_fs.html">Mudule Apache mod_dav_fs</a></li>
-<li><a href="mod/mod_dav_lock.html">Mudule Apache mod_dav_lock</a></li>
-<li><a href="mod/mod_dbd.html">Mudule Apache mod_dbd</a></li>
-<li><a href="mod/mod_deflate.html">Mudule Apache mod_deflate</a></li>
-<li><a href="mod/mod_dir.html">Mudule Apache mod_dir</a></li>
-<li><a href="mod/mod_disk_cache.html">Mudule Apache mod_disk_cache</a></li>
-<li><a href="mod/mod_dumpio.html">Mudule Apache mod_dumpio</a></li>
-<li><a href="mod/mod_echo.html">Mudule Apache mod_echo</a></li>
-<li><a href="mod/mod_env.html">Mudule Apache mod_env</a></li>
-<li><a href="mod/mod_example.html">Mudule Apache mod_example</a></li>
-<li><a href="mod/mod_expires.html">Mudule Apache mod_expires</a></li>
-<li><a href="mod/mod_ext_filter.html">Mudule Apache mod_ext_filter</a></li>
-<li><a href="mod/mod_file_cache.html">Mudule Apache mod_file_cache</a></li>
-<li><a href="mod/mod_filter.html">Mudule Apache mod_filter</a></li>
-<li><a href="mod/mod_headers.html">Mudule Apache mod_headers</a></li>
-<li><a href="mod/mod_heartbeat.html">Mudule Apache mod_heartbeat</a></li>
-<li><a href="mod/mod_heartmonitor.html">Mudule Apache mod_heartmonitor</a></li>
-<li><a href="mod/mod_ident.html">Mudule Apache mod_ident</a></li>
-<li><a href="mod/mod_imagemap.html">Mudule Apache mod_imagemap</a></li>
-<li><a href="mod/mod_include.html">Mudule Apache mod_include</a></li>
-<li><a href="mod/mod_info.html">Mudule Apache mod_info</a></li>
-<li><a href="mod/mod_isapi.html">Mudule Apache mod_isapi</a></li>
-<li><a href="mod/mod_lbmethod_bybusyness.html">Mudule Apache mod_lbmethod_bybusyness</a></li>
-<li><a href="mod/mod_lbmethod_byrequests.html">Mudule Apache mod_lbmethod_byrequests</a></li>
-<li><a href="mod/mod_lbmethod_bytraffic.html">Mudule Apache mod_lbmethod_bytraffic</a></li>
-<li><a href="mod/mod_lbmethod_heartbeat.html">Mudule Apache mod_lbmethod_heartbeat</a></li>
-<li><a href="mod/mod_ldap.html">Mudule Apache mod_ldap</a></li>
-<li><a href="mod/mod_log_config.html">Mudule Apache mod_log_config</a></li>
-<li><a href="mod/mod_log_forensic.html">Mudule Apache mod_log_forensic</a></li>
-<li><a href="mod/mod_logio.html">Mudule Apache mod_logio</a></li>
-<li><a href="mod/mod_mime.html">Mudule Apache mod_mime</a></li>
-<li><a href="mod/mod_mime_magic.html">Mudule Apache mod_mime_magic</a></li>
-<li><a href="mod/mod_negotiation.html">Mudule Apache mod_negotiation</a></li>
-<li><a href="mod/mod_nw_ssl.html">Mudule Apache mod_nw_ssl</a></li>
-<li><a href="mod/mod_plainmem.html">Mudule Apache mod_plainmem</a></li>
-<li><a href="mod/mod_privileges.html">Mudule Apache mod_privileges</a></li>
-<li><a href="mod/mod_proxy.html">Mudule Apache mod_proxy</a></li>
-<li><a href="mod/mod_proxy_ajp.html">Mudule Apache mod_proxy_ajp</a></li>
-<li><a href="mod/mod_proxy_balancer.html">Mudule Apache mod_proxy_balancer</a></li>
-<li><a href="mod/mod_proxy_connect.html">Mudule Apache mod_proxy_connect</a></li>
-<li><a href="mod/mod_proxy_fcgi.html">Mudule Apache mod_proxy_fcgi</a></li>
-<li><a href="mod/mod_proxy_fdpass.html">Mudule Apache mod_proxy_fdpass</a></li>
-<li><a href="mod/mod_proxy_ftp.html">Mudule Apache mod_proxy_ftp</a></li>
-<li><a href="mod/mod_proxy_http.html">Mudule Apache mod_proxy_http</a></li>
-<li><a href="mod/mod_proxy_scgi.html">Mudule Apache mod_proxy_scgi</a></li>
-<li><a href="mod/mod_request.html">Mudule Apache mod_request</a></li>
-<li><a href="mod/mod_rewrite.html">Mudule Apache mod_rewrite</a></li>
-<li><a href="mod/mod_sed.html">Mudule Apache mod_sed</a></li>
-<li><a href="mod/mod_session.html">Mudule Apache mod_session</a></li>
-<li><a href="mod/mod_session_cookie.html">Mudule Apache mod_session_cookie</a></li>
-<li><a href="mod/mod_session_crypto.html">Mudule Apache mod_session_crypto</a></li>
-<li><a href="mod/mod_session_dbd.html">Mudule Apache mod_session_dbd</a></li>
-<li><a href="mod/mod_setenvif.html">Mudule Apache mod_setenvif</a></li>
-<li><a href="mod/mod_sharedmem.html">Mudule Apache mod_sharedmem</a></li>
-<li><a href="mod/mod_slotmem.html">Mudule Apache mod_slotmem</a></li>
-<li><a href="mod/mod_so.html">Mudule Apache mod_so</a></li>
-<li><a href="mod/mod_speling.html">Mudule Apache mod_speling</a></li>
-<li><a href="mod/mod_ssl.html">Mudule Apache mod_ssl</a></li>
-<li><a href="mod/mod_status.html">Mudule Apache mod_status</a></li>
-<li><a href="mod/mod_substitute.html">Mudule Apache mod_substitute</a></li>
-<li><a href="mod/mod_suexec.html">Mudule Apache mod_suexec</a></li>
-<li><a href="mod/mod_unique_id.html">Mudule Apache mod_unique_id</a></li>
-<li><a href="mod/mod_unixd.html">Mudule Apache mod_unixd</a></li>
-<li><a href="mod/mod_userdir.html">Mudule Apache mod_userdir</a></li>
-<li><a href="mod/mod_usertrack.html">Mudule Apache mod_usertrack</a></li>
-<li><a href="mod/mod_version.html">Mudule Apache mod_version</a></li>
-<li><a href="mod/mod_vhost_alias.html">Mudule Apache mod_vhost_alias</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="developer" id="developer">Documentation du développeur</a></h2>
-<ul><li class="separate"><a href="developer/">Aperçu</a></li>
-<li><a href="developer/API.html">Notes sur l'API Apache</a></li>
-<li><a href="developer/debugging.html">Débogage de l'allocation mémoire
-dans APR</a></li>
-<li><a href="developer/documenting.html">Documenter Apache 2.0</a></li>
-<li><a href="developer/hooks.html">Fonctions d'accroche (Hook Functions)
-d'Apache 2.0</a></li>
-<li><a href="developer/modules.html">Convertir un module depuis Apache
-1.3 vers Apache 2.0</a></li>
-<li><a href="developer/request.html">Traitement des requêtes avec Apache
-2.0</a></li>
-<li><a href="developer/filters.html">Fonctionnement des filtres dans
-Apache 2.0</a></li>
-</ul>
-</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
-<div class="section"><h2><a name="index" id="index">Glossaire et Index</a></h2>
-<ul><li><a href="glossary.html">Glossaire</a></li>
-<li><a href="mod/">Index des modules</a></li>
-<li><a href="mod/directives.html">Index des directives</a></li>
-<li><a href="mod/quickreference.html">Référence rapide des directives</a></li>
-</ul>
-</div></div>
-<div class="bottomlang">
-<p><span>Langues Disponibles: </span><a href="./de/sitemap.html" hreflang="de" rel="alternate" title="Deutsch"> de </a> |
-<a href="./en/sitemap.html" hreflang="en" rel="alternate" title="English"> en </a> |
-<a href="./es/sitemap.html" hreflang="es" rel="alternate" title="Español"> es </a> |
-<a href="./fr/sitemap.html" title="Français"> fr </a> |
-<a href="./ja/sitemap.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> |
-<a href="./ko/sitemap.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |
-<a href="./tr/sitemap.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>
-</div><div id="footer">
-<p class="apache">Copyright 2009 The Apache Software Foundation.<br />Authorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
-<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossaire</a> | <a href="./sitemap.html">Plan du site</a></p></div>
+<?xml version="1.0" encoding="ISO-8859-1"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head><!--\r
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r
+ This file is generated from xml source: DO NOT EDIT\r
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\r
+ -->\r
+<title>Plan du site - Serveur Apache HTTP</title>\r
+<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />\r
+<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />\r
+<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />\r
+<link href="./images/favicon.ico" rel="shortcut icon" /></head>\r
+<body id="manual-page">\r
+<div id="page-header">\r
+<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossaire</a> | <a href="./sitemap.html">Plan du site</a></p>\r
+<p class="apache">Serveur Apache HTTP Version 2.3</p>\r
+<img alt="" src="./images/feather.gif" /></div>\r
+<div class="up"><a href="./"><img title="<-" alt="<-" src="./images/left.gif" /></a></div>\r
+<div id="path">\r
+<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Serveur HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="./">Version 2.3</a></div>\r
+<div id="page-content"><div id="preamble"><h1>Plan du site</h1>\r
+<div class="toplang">\r
+<p><span>Langues Disponibles: </span><a href="./de/sitemap.html" hreflang="de" rel="alternate" title="Deutsch"> de </a> |\r
+<a href="./en/sitemap.html" hreflang="en" rel="alternate" title="English"> en </a> |\r
+<a href="./es/sitemap.html" hreflang="es" rel="alternate" title="Español"> es </a> |\r
+<a href="./fr/sitemap.html" title="Français"> fr </a> |\r
+<a href="./ja/sitemap.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> |\r
+<a href="./ko/sitemap.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |\r
+<a href="./tr/sitemap.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>\r
+</div>\r
+\r
+<p>Cette page contient la liste des éléments actuellement disponibles de\r
+la <a href="./">Documentation du serveur HTTP Apache Version\r
+2.3</a>.</p>\r
+</div>\r
+<div id="quickview"><ul id="toc">\r
+<li><img alt="" src="./images/down.gif" /> <a href="#release">Notes de version</a></li>\r
+<li><img alt="" src="./images/down.gif" /> <a href="#using">Utilisation du serveur HTTP Apache</a></li>\r
+<li><img alt="" src="./images/down.gif" /> <a href="#vhosts">Documentation des serveurs virtuels Apache</a></li>\r
+<li><img alt="" src="./images/down.gif" /> <a href="#rewrite">Guide de réécriture d'URLs</a></li>\r
+<li><img alt="" src="./images/down.gif" /> <a href="#ssl">Chiffrement SSL/TLS avec Apache</a></li>\r
+<li><img alt="" src="./images/down.gif" /> <a href="#howto">Guides, Tutoriels, and Recettes</a></li>\r
+<li><img alt="" src="./images/down.gif" /> <a href="#platform">Notes spécifiques à certains systèmes</a></li>\r
+<li><img alt="" src="./images/down.gif" /> <a href="#programs">Le serveur HTTP Apache et ses programmes associés</a></li>\r
+<li><img alt="" src="./images/down.gif" /> <a href="#misc">Documentations diverses sur Apache</a></li>\r
+<li><img alt="" src="./images/down.gif" /> <a href="#modules">Modules Apache</a></li>\r
+<li><img alt="" src="./images/down.gif" /> <a href="#developer">Documentation du développeur</a></li>\r
+<li><img alt="" src="./images/down.gif" /> <a href="#index">Glossaire et Index</a></li>\r
+</ul>\r
+</div>\r
+<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>\r
+<div class="section"><h2><a name="release" id="release">Notes de version</a></h2>\r
+<ul><li><a href="upgrading.html">Mise à jour vers 2.4 depuis 2.2</a></li>\r
+<li><a href="new_features_2_4.html">Nouvelles fonctionnalités d'Apache 2.3/2.4</a></li>\r
+<li><a href="new_features_2_2.html">Nouvelles fonctionnalités d'Apache 2.1/2.2</a></li>\r
+<li><a href="new_features_2_0.html">Nouvelles fonctionnalités d'Apache 2.0</a></li>\r
+<li><a href="license.html">License Apache</a></li>\r
+</ul>\r
+</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>\r
+<div class="section"><h2><a name="using" id="using">Utilisation du serveur HTTP Apache</a></h2>\r
+<ul><li><a href="install.html">Compilation et installation</a></li>\r
+<li><a href="invoking.html">Démarrage</a></li>\r
+<li><a href="stopping.html">Arrêt ou redémarrage</a></li>\r
+<li><a href="configuring.html">Fichiers de configuration</a></li>\r
+<li><a href="sections.html">Comment fonctionnent les sections Directory,\r
+Location et Files</a></li>\r
+<li><a href="caching.html">Mise en cache du contenu</a></li>\r
+<li><a href="server-wide.html">Configuration niveau serveur</a></li>\r
+<li><a href="logs.html">Fichiers de traces</a></li>\r
+<li><a href="urlmapping.html">Mise en correspondance des URLs avec le système de fichiers</a></li>\r
+<li><a href="misc/security_tips.html">Conseils sur la sécurité</a></li>\r
+<li><a href="dso.html">Objets Dynamiques Partagés (DSO)</a></li>\r
+<li><a href="content-negotiation.html">Négociation sur le contenu</a></li>\r
+<li><a href="custom-error.html">Messages d'erreur personnalisés</a></li>\r
+<li><a href="bind.html">Définition des adresses et ports qu'utilise\r
+Apache</a></li>\r
+<li><a href="mpm.html">Modules multi-processus (MPMs)</a></li>\r
+<li><a href="env.html">Les variables d'environnement d'Apache</a></li>\r
+<li><a href="handler.html">Utilisation des gestionnaires d'Apache</a></li>\r
+<li><a href="filter.html">Filtres</a></li>\r
+<li><a href="suexec.html">Support de suEXEC</a></li>\r
+<li><a href="misc/perf-tuning.html">Optimisation des performances</a></li>\r
+<li><a href="faq/">Frequently Asked Questions</a></li>\r
+</ul>\r
+</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>\r
+<div class="section"><h2><a name="vhosts" id="vhosts">Documentation des serveurs virtuels Apache</a></h2>\r
+<ul><li class="separate"><a href="vhosts/">Aperçu</a></li>\r
+<li><a href="vhosts/name-based.html">Serveurs virtuels basés sur le nom</a></li>\r
+<li><a href="vhosts/ip-based.html">Support des serveurs virtuels basés\r
+sur l'adresse IP</a></li>\r
+<li><a href="vhosts/mass.html">Configuration dynamique de l'hébergement\r
+virtuel de masse</a></li>\r
+<li><a href="vhosts/examples.html">Exemples de serveurs virtuels</a></li>\r
+<li><a href="vhosts/details.html">Discussion approfondie à propos de la\r
+sélection d'un serveur virtuel</a></li>\r
+<li><a href="vhosts/fd-limits.html">Limitations inhérentes aux\r
+descripteurs de fichiers</a></li>\r
+<li><a href="dns-caveats.html">Problèmes avec DNS et Apache</a></li>\r
+</ul>\r
+</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>\r
+<div class="section"><h2><a name="rewrite" id="rewrite">Guide de réécriture d'URLs</a></h2>\r
+<ul><li class="separate"><a href="rewrite/">Survol</a></li>\r
+<li><a href="mod/mod_rewrite.html">Documentation de référence de mod_rewrite</a></li>\r
+<li><a href="rewrite/rewrite_intro.html">Introduction</a></li>\r
+<li><a href="rewrite/rewrite_flags.html">Drapeaux</a></li>\r
+<li><a href="rewrite/rewrite_tech.html">Détails techniques</a></li>\r
+<li><a href="rewrite/rewrite_guide.html">Guide de réécriture - exemples utiles</a></li>\r
+<li><a href="rewrite/rewrite_guide_advanced.html">Guide de réécriture avancée -\r
+autres exemples utiles</a></li>\r
+</ul>\r
+</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>\r
+<div class="section"><h2><a name="ssl" id="ssl">Chiffrement SSL/TLS avec Apache</a></h2>\r
+<ul><li class="separate"><a href="ssl/">Aperçu</a></li>\r
+<li><a href="ssl/ssl_intro.html">Chiffrement SSL/TLS :\r
+Introduction</a></li>\r
+<li><a href="ssl/ssl_compat.html">Chiffrement SSL/TLS :\r
+Compatibilité</a></li>\r
+<li><a href="ssl/ssl_howto.html">Chiffrement SSL/TLS : Recettes</a></li>\r
+<li><a href="ssl/ssl_faq.html">Chiffrement SSL/TLS : FAQ</a></li>\r
+</ul>\r
+</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>\r
+<div class="section"><h2><a name="howto" id="howto">Guides, Tutoriels, and Recettes</a></h2>\r
+<ul><li class="separate"><a href="howto/">Aperçu</a></li>\r
+<li><a href="howto/auth.html">Authentification</a></li>\r
+<li><a href="howto/cgi.html">Contenu dynamique avec CGI</a></li>\r
+<li><a href="howto/ssi.html">Introduction aux Inclusions côté serveur\r
+(Server Side Includes - SSI)</a></li>\r
+<li><a href="howto/htaccess.html">Fichiers .htaccess</a></li>\r
+<li><a href="howto/public_html.html">Répertoires web des\r
+utilisateurs</a></li>\r
+</ul>\r
+</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>\r
+<div class="section"><h2><a name="platform" id="platform">Notes spécifiques à certains systèmes</a></h2>\r
+<ul><li class="separate"><a href="platform/">Aperçu</a></li>\r
+<li><a href="platform/windows.html">Utiliser Apache avec Microsoft\r
+Windows</a></li>\r
+<li><a href="platform/win_compiling.html">Compiler Apache pour\r
+Microsoft Windows</a></li>\r
+<li><a href="platform/netware.html">Utiliser Apache avec Novell\r
+NetWare</a></li>\r
+<li><a href="platform/perf-hp.html">Mise en oeuvre d'un serveur web\r
+hautes performances sous HPUX</a></li>\r
+<li><a href="platform/ebcdic.html">Le portage EBCDIC d'Apache</a></li>\r
+</ul>\r
+</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>\r
+<div class="section"><h2><a name="programs" id="programs">Le serveur HTTP Apache et ses programmes associés</a></h2>\r
+<ul><li class="separate"><a href="programs/">Aperçu</a></li>\r
+<li><a href="programs/httpd.html">Page de manuel : httpd</a></li>\r
+<li><a href="programs/ab.html">Page de manuel : ab</a></li>\r
+<li><a href="programs/apachectl.html">Page de manuel : apachectl</a></li>\r
+<li><a href="programs/apxs.html">Page de manuel : apxs</a></li>\r
+<li><a href="programs/configure.html">Page de manuel : configure</a></li>\r
+<li><a href="programs/dbmmanage.html">Page de manuel : dbmmanage</a></li>\r
+<li><a href="programs/htcacheclean.html">Page de manuel : htcacheclean</a></li>\r
+<li><a href="programs/htdbm.html">Page de manuel : htdbm</a></li>\r
+<li><a href="programs/htdigest.html">Page de manuel : htdigest</a></li>\r
+<li><a href="programs/htpasswd.html">Page de manuel : htpasswd</a></li>\r
+<li><a href="programs/logresolve.html">Page de manuel : logresolve</a></li>\r
+<li><a href="programs/rotatelogs.html">Page de manuel : rotatelogs</a></li>\r
+<li><a href="programs/suexec.html">Page de manuel : suexec</a></li>\r
+<li><a href="programs/other.html">Autres programmes</a></li>\r
+</ul>\r
+</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>\r
+<div class="section"><h2><a name="misc" id="misc">Documentations diverses sur Apache</a></h2>\r
+<ul><li class="separate"><a href="misc/">Aperçu</a></li>\r
+<li><a href="misc/relevant_standards.html">Standards concernés</a></li>\r
+</ul>\r
+</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>\r
+<div class="section"><h2><a name="modules" id="modules">Modules Apache</a></h2>\r
+<ul><li><a href="mod/module-dict.html">Définitions des termes utilisés pour\r
+décrire les modules Apache</a></li>\r
+<li><a href="mod/directive-dict.html">Définitions des termes utilisés\r
+pour décrire les directives Apache</a></li>\r
+</ul><ul><li><a href="mod/core.html">Fonctionalités de Base Apache</a></li>\r
+<li><a href="mod/mpm_common.html">Apache MPM: Directives Communes</a></li>\r
+<li><a href="mod/event.html">Apache MPM event</a></li>\r
+<li><a href="mod/mpm_netware.html">Apache MPM netware</a></li>\r
+<li><a href="mod/prefork.html">Apache MPM prefork</a></li>\r
+<li><a href="mod/mpm_winnt.html">Apache MPM winnt</a></li>\r
+<li><a href="mod/worker.html">Apache MPM worker</a></li>\r
+</ul><ul><li><a href="mod/mod_access_compat.html">Mudule Apache mod_access_compat</a></li>\r
+<li><a href="mod/mod_actions.html">Mudule Apache mod_actions</a></li>\r
+<li><a href="mod/mod_alias.html">Mudule Apache mod_alias</a></li>\r
+<li><a href="mod/mod_asis.html">Mudule Apache mod_asis</a></li>\r
+<li><a href="mod/mod_auth_basic.html">Mudule Apache mod_auth_basic</a></li>\r
+<li><a href="mod/mod_auth_digest.html">Mudule Apache mod_auth_digest</a></li>\r
+<li><a href="mod/mod_auth_form.html">Mudule Apache mod_auth_form</a></li>\r
+<li><a href="mod/mod_authn_anon.html">Mudule Apache mod_authn_anon</a></li>\r
+<li><a href="mod/mod_authn_core.html">Mudule Apache mod_authn_core</a></li>\r
+<li><a href="mod/mod_authn_dbd.html">Mudule Apache mod_authn_dbd</a></li>\r
+<li><a href="mod/mod_authn_dbm.html">Mudule Apache mod_authn_dbm</a></li>\r
+<li><a href="mod/mod_authn_file.html">Mudule Apache mod_authn_file</a></li>\r
+<li><a href="mod/mod_authnz_ldap.html">Mudule Apache mod_authnz_ldap</a></li>\r
+<li><a href="mod/mod_authz_core.html">Mudule Apache mod_authz_core</a></li>\r
+<li><a href="mod/mod_authz_dbd.html">Mudule Apache mod_authz_dbd</a></li>\r
+<li><a href="mod/mod_authz_dbm.html">Mudule Apache mod_authz_dbm</a></li>\r
+<li><a href="mod/mod_authz_groupfile.html">Mudule Apache mod_authz_groupfile</a></li>\r
+<li><a href="mod/mod_authz_host.html">Mudule Apache mod_authz_host</a></li>\r
+<li><a href="mod/mod_authz_owner.html">Mudule Apache mod_authz_owner</a></li>\r
+<li><a href="mod/mod_authz_user.html">Mudule Apache mod_authz_user</a></li>\r
+<li><a href="mod/mod_autoindex.html">Mudule Apache mod_autoindex</a></li>\r
+<li><a href="mod/mod_buffer.html">Mudule Apache mod_buffer</a></li>\r
+<li><a href="mod/mod_cache.html">Mudule Apache mod_cache</a></li>\r
+<li><a href="mod/mod_cern_meta.html">Mudule Apache mod_cern_meta</a></li>\r
+<li><a href="mod/mod_cgi.html">Mudule Apache mod_cgi</a></li>\r
+<li><a href="mod/mod_cgid.html">Mudule Apache mod_cgid</a></li>\r
+<li><a href="mod/mod_charset_lite.html">Mudule Apache mod_charset_lite</a></li>\r
+<li><a href="mod/mod_dav.html">Mudule Apache mod_dav</a></li>\r
+<li><a href="mod/mod_dav_fs.html">Mudule Apache mod_dav_fs</a></li>\r
+<li><a href="mod/mod_dav_lock.html">Mudule Apache mod_dav_lock</a></li>\r
+<li><a href="mod/mod_dbd.html">Mudule Apache mod_dbd</a></li>\r
+<li><a href="mod/mod_deflate.html">Mudule Apache mod_deflate</a></li>\r
+<li><a href="mod/mod_dir.html">Mudule Apache mod_dir</a></li>\r
+<li><a href="mod/mod_disk_cache.html">Mudule Apache mod_disk_cache</a></li>\r
+<li><a href="mod/mod_dumpio.html">Mudule Apache mod_dumpio</a></li>\r
+<li><a href="mod/mod_echo.html">Mudule Apache mod_echo</a></li>\r
+<li><a href="mod/mod_env.html">Mudule Apache mod_env</a></li>\r
+<li><a href="mod/mod_example.html">Mudule Apache mod_example</a></li>\r
+<li><a href="mod/mod_expires.html">Mudule Apache mod_expires</a></li>\r
+<li><a href="mod/mod_ext_filter.html">Mudule Apache mod_ext_filter</a></li>\r
+<li><a href="mod/mod_file_cache.html">Mudule Apache mod_file_cache</a></li>\r
+<li><a href="mod/mod_filter.html">Mudule Apache mod_filter</a></li>\r
+<li><a href="mod/mod_headers.html">Mudule Apache mod_headers</a></li>\r
+<li><a href="mod/mod_heartbeat.html">Mudule Apache mod_heartbeat</a></li>\r
+<li><a href="mod/mod_heartmonitor.html">Mudule Apache mod_heartmonitor</a></li>\r
+<li><a href="mod/mod_ident.html">Mudule Apache mod_ident</a></li>\r
+<li><a href="mod/mod_imagemap.html">Mudule Apache mod_imagemap</a></li>\r
+<li><a href="mod/mod_include.html">Mudule Apache mod_include</a></li>\r
+<li><a href="mod/mod_info.html">Mudule Apache mod_info</a></li>\r
+<li><a href="mod/mod_isapi.html">Mudule Apache mod_isapi</a></li>\r
+<li><a href="mod/mod_lbmethod_bybusyness.html">Mudule Apache mod_lbmethod_bybusyness</a></li>\r
+<li><a href="mod/mod_lbmethod_byrequests.html">Mudule Apache mod_lbmethod_byrequests</a></li>\r
+<li><a href="mod/mod_lbmethod_bytraffic.html">Mudule Apache mod_lbmethod_bytraffic</a></li>\r
+<li><a href="mod/mod_lbmethod_heartbeat.html">Mudule Apache mod_lbmethod_heartbeat</a></li>\r
+<li><a href="mod/mod_ldap.html">Mudule Apache mod_ldap</a></li>\r
+<li><a href="mod/mod_log_config.html">Mudule Apache mod_log_config</a></li>\r
+<li><a href="mod/mod_log_forensic.html">Mudule Apache mod_log_forensic</a></li>\r
+<li><a href="mod/mod_logio.html">Mudule Apache mod_logio</a></li>\r
+<li><a href="mod/mod_mime.html">Mudule Apache mod_mime</a></li>\r
+<li><a href="mod/mod_mime_magic.html">Mudule Apache mod_mime_magic</a></li>\r
+<li><a href="mod/mod_negotiation.html">Mudule Apache mod_negotiation</a></li>\r
+<li><a href="mod/mod_nw_ssl.html">Mudule Apache mod_nw_ssl</a></li>\r
+<li><a href="mod/mod_plainmem.html">Mudule Apache mod_plainmem</a></li>\r
+<li><a href="mod/mod_privileges.html">Mudule Apache mod_privileges</a></li>\r
+<li><a href="mod/mod_proxy.html">Mudule Apache mod_proxy</a></li>\r
+<li><a href="mod/mod_proxy_ajp.html">Mudule Apache mod_proxy_ajp</a></li>\r
+<li><a href="mod/mod_proxy_balancer.html">Mudule Apache mod_proxy_balancer</a></li>\r
+<li><a href="mod/mod_proxy_connect.html">Mudule Apache mod_proxy_connect</a></li>\r
+<li><a href="mod/mod_proxy_fcgi.html">Mudule Apache mod_proxy_fcgi</a></li>\r
+<li><a href="mod/mod_proxy_fdpass.html">Mudule Apache mod_proxy_fdpass</a></li>\r
+<li><a href="mod/mod_proxy_ftp.html">Mudule Apache mod_proxy_ftp</a></li>\r
+<li><a href="mod/mod_proxy_http.html">Mudule Apache mod_proxy_http</a></li>\r
+<li><a href="mod/mod_proxy_scgi.html">Mudule Apache mod_proxy_scgi</a></li>\r
+<li><a href="mod/mod_remoteip.html">Mudule Apache mod_remoteip</a></li>\r
+<li><a href="mod/mod_request.html">Mudule Apache mod_request</a></li>\r
+<li><a href="mod/mod_rewrite.html">Mudule Apache mod_rewrite</a></li>\r
+<li><a href="mod/mod_sed.html">Mudule Apache mod_sed</a></li>\r
+<li><a href="mod/mod_session.html">Mudule Apache mod_session</a></li>\r
+<li><a href="mod/mod_session_cookie.html">Mudule Apache mod_session_cookie</a></li>\r
+<li><a href="mod/mod_session_crypto.html">Mudule Apache mod_session_crypto</a></li>\r
+<li><a href="mod/mod_session_dbd.html">Mudule Apache mod_session_dbd</a></li>\r
+<li><a href="mod/mod_setenvif.html">Mudule Apache mod_setenvif</a></li>\r
+<li><a href="mod/mod_sharedmem.html">Mudule Apache mod_sharedmem</a></li>\r
+<li><a href="mod/mod_slotmem.html">Mudule Apache mod_slotmem</a></li>\r
+<li><a href="mod/mod_so.html">Mudule Apache mod_so</a></li>\r
+<li><a href="mod/mod_speling.html">Mudule Apache mod_speling</a></li>\r
+<li><a href="mod/mod_ssl.html">Mudule Apache mod_ssl</a></li>\r
+<li><a href="mod/mod_status.html">Mudule Apache mod_status</a></li>\r
+<li><a href="mod/mod_substitute.html">Mudule Apache mod_substitute</a></li>\r
+<li><a href="mod/mod_suexec.html">Mudule Apache mod_suexec</a></li>\r
+<li><a href="mod/mod_unique_id.html">Mudule Apache mod_unique_id</a></li>\r
+<li><a href="mod/mod_unixd.html">Mudule Apache mod_unixd</a></li>\r
+<li><a href="mod/mod_userdir.html">Mudule Apache mod_userdir</a></li>\r
+<li><a href="mod/mod_usertrack.html">Mudule Apache mod_usertrack</a></li>\r
+<li><a href="mod/mod_version.html">Mudule Apache mod_version</a></li>\r
+<li><a href="mod/mod_vhost_alias.html">Mudule Apache mod_vhost_alias</a></li>\r
+</ul>\r
+</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>\r
+<div class="section"><h2><a name="developer" id="developer">Documentation du développeur</a></h2>\r
+<ul><li class="separate"><a href="developer/">Aperçu</a></li>\r
+<li><a href="developer/API.html">Notes sur l'API Apache</a></li>\r
+<li><a href="developer/debugging.html">Débogage de l'allocation mémoire\r
+dans APR</a></li>\r
+<li><a href="developer/documenting.html">Documenter Apache 2.0</a></li>\r
+<li><a href="developer/hooks.html">Fonctions d'accroche (Hook Functions)\r
+d'Apache 2.0</a></li>\r
+<li><a href="developer/modules.html">Convertir un module depuis Apache\r
+1.3 vers Apache 2.0</a></li>\r
+<li><a href="developer/request.html">Traitement des requêtes avec Apache\r
+2.0</a></li>\r
+<li><a href="developer/filters.html">Fonctionnement des filtres dans\r
+Apache 2.0</a></li>\r
+</ul>\r
+</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>\r
+<div class="section"><h2><a name="index" id="index">Glossaire et Index</a></h2>\r
+<ul><li><a href="glossary.html">Glossaire</a></li>\r
+<li><a href="mod/">Index des modules</a></li>\r
+<li><a href="mod/directives.html">Index des directives</a></li>\r
+<li><a href="mod/quickreference.html">Référence rapide des directives</a></li>\r
+</ul>\r
+</div></div>\r
+<div class="bottomlang">\r
+<p><span>Langues Disponibles: </span><a href="./de/sitemap.html" hreflang="de" rel="alternate" title="Deutsch"> de </a> |\r
+<a href="./en/sitemap.html" hreflang="en" rel="alternate" title="English"> en </a> |\r
+<a href="./es/sitemap.html" hreflang="es" rel="alternate" title="Español"> es </a> |\r
+<a href="./fr/sitemap.html" title="Français"> fr </a> |\r
+<a href="./ja/sitemap.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> |\r
+<a href="./ko/sitemap.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |\r
+<a href="./tr/sitemap.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>\r
+</div><div id="footer">\r
+<p class="apache">Copyright 2009 The Apache Software Foundation.<br />Authorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>\r
+<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossaire</a> | <a href="./sitemap.html">Plan du site</a></p></div>\r
</body></html>
\ No newline at end of file
<li><a href="mod/mod_proxy_ftp.html">Apache モジュール mod_proxy_ftp</a></li>
<li><a href="mod/mod_proxy_http.html">Apache モジュール mod_proxy_http</a></li>
<li><a href="mod/mod_proxy_scgi.html">Apache モジュール mod_proxy_scgi</a></li>
+<li><a href="mod/mod_remoteip.html">Apache モジュール mod_remoteip</a></li>
<li><a href="mod/mod_request.html">Apache モジュール mod_request</a></li>
<li><a href="mod/mod_rewrite.html">Apache モジュール mod_rewrite</a></li>
<li><a href="mod/mod_sed.html">Apache モジュール mod_sed</a></li>
<li><a href="mod/mod_proxy_ftp.html">¾ÆÆÄÄ¡ ¸ðµâ mod_proxy_ftp</a></li>
<li><a href="mod/mod_proxy_http.html">¾ÆÆÄÄ¡ ¸ðµâ mod_proxy_http</a></li>
<li><a href="mod/mod_proxy_scgi.html">¾ÆÆÄÄ¡ ¸ðµâ mod_proxy_scgi</a></li>
+<li><a href="mod/mod_remoteip.html">¾ÆÆÄÄ¡ ¸ðµâ mod_remoteip</a></li>
<li><a href="mod/mod_request.html">¾ÆÆÄÄ¡ ¸ðµâ mod_request</a></li>
<li><a href="mod/mod_rewrite.html">¾ÆÆÄÄ¡ ¸ðµâ mod_rewrite</a></li>
<li><a href="mod/mod_sed.html">¾ÆÆÄÄ¡ ¸ðµâ mod_sed</a></li>
<li><a href="mod/mod_proxy_ftp.html">Apache Modülü mod_proxy_ftp</a></li>
<li><a href="mod/mod_proxy_http.html">Apache Modülü mod_proxy_http</a></li>
<li><a href="mod/mod_proxy_scgi.html">Apache Modülü mod_proxy_scgi</a></li>
+<li><a href="mod/mod_remoteip.html">Apache Modülü mod_remoteip</a></li>
<li><a href="mod/mod_request.html">Apache Modülü mod_request</a></li>
<li><a href="mod/mod_rewrite.html">Apache Modülü mod_rewrite</a></li>
<li><a href="mod/mod_sed.html">Apache Modülü mod_sed</a></li>