<!DOCTYPE html SYSTEM "about:legacy-compat">
<html lang="fr"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta content="width=device-width, initial-scale=1" name="viewport">
<!--
        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
              This file is generated from xml source: DO NOT EDIT
        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
      -->
<title>Guide de configuration d'un mandataire inverse - Serveur HTTP Apache Version 2.4</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 rel="stylesheet" type="text/css" href="../style/css/prettify.css">
<script src="../style/scripts/prettify.min.js">
</script>

<link href="../images/favicon.png" rel="shortcut icon"></head>
<body id="manual-page"><div id="page-header">
<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/quickreference.html">Directives</a> | <a href="https://cwiki.apache.org/confluence/display/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a> | <a href="https://bz.apache.org/bugzilla/enter_bug.cgi?product=Apache%20httpd-2">Signaler un bug</a></p>
<p class="apache">Serveur HTTP Apache Version 2.4</p>
<img alt="" src="../images/feather.png"></div>
<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif"></a></div>
<div id="path">
<a href="https://www.apache.org/">Apache</a> &gt; <a href="https://httpd.apache.org/">Serveur HTTP</a> &gt; <a href="https://httpd.apache.org/docs/">Documentation</a> &gt; <a href="../">Version 2.4</a> &gt; <a href="./">Recettes / Tutoriels</a></div><div id="page-content"><div id="preamble"><h1>Guide de configuration d'un mandataire inverse</h1>
<button aria-label="Toggle language list" class="lang-toggle"><svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" stroke="currentColor" fill="none" viewBox="0 0 24 24" height="16" width="16"><circle r="10" cy="12" cx="12"/><line y2="12" x2="22" y1="12" x1="2"/><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"/></svg></button>
<div class="toplang">
<p><span>Langues Disponibles: </span><a href="../en/howto/reverse_proxy.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
<a href="../fr/howto/reverse_proxy.html" title="Fran&ccedil;ais">&nbsp;fr&nbsp;</a></p>
</div>

    <p>En plus de ses fonctions de serveur web "basique", &agrave; savoir fournir du
    contenu statique et dynamique &agrave; l'utilisateur, Apache httpd (comme la
    plupart des autres serveurs web) peut aussi assurer les fonctions de serveur
    mandataire inverse, connu aussi sous le nom de serveur "passerelle".</p>

    <p>Dans un tel sc&eacute;nario, httpd ne g&eacute;n&egrave;re et n'h&eacute;berge pas lui-m&ecirc;me les
    donn&eacute;es, le contenu &eacute;tant en g&eacute;n&eacute;ral obtenu &agrave; partir d'un ou plusieurs serveurs
    d'arri&egrave;re-plan qui n'ont normalement aucune connexion directe avec le r&eacute;seau
    externe. Lorsque httpd re&ccedil;oit une requ&ecirc;te en provenance d'un client, la
    requ&ecirc;te proprement dite est <em>mandat&eacute;e</em> vers un de ces serveurs
    d'arri&egrave;re-plan qui traite la requ&ecirc;te, g&eacute;n&egrave;re le contenu et l'envoie &agrave; httpd,
    ce dernier g&eacute;n&eacute;rant la v&eacute;ritable r&eacute;ponse HTTP &agrave; destination du client.</p>

    <p>De nombreuses raisons peuvent vous motiver &agrave; utiliser cette
    fonctionnalit&eacute;, mais elles sont souvent du domaine de la s&eacute;curit&eacute;, de
    la haute disponibilit&eacute;, de la r&eacute;partition de charge et de
    l'authentification/autorisation centralis&eacute;e. Il est alors indispensable que
    l'organisation, la conception et l'architecture de l'infrastructure
    d'arri&egrave;re-plan (les serveurs qui traitent au sens propre les requ&ecirc;tes) soient
    isol&eacute;es et prot&eacute;g&eacute;es de l'ext&eacute;rieur ; vu du client, le serveur mandataire
    inverse <em>est</em> le seul serveur accessible pouvant lui fournir du
    contenu.</p>

    <p>Voici un exemple typique d'impl&eacute;mentation de cette fonctionnalit&eacute; :</p>
    <p class="centered"><img src="../images/reverse-proxy-arch.png" alt="reverse-proxy-arch"></p>

  </div>
<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif"> <a href="#related">Mandataire inverse</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#simple">Mandatement inverse simple</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#cluster">Clusters et Balancers</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#config">Configuration du Balancer et des BalancerMembers</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#failover">Gestion des indisponibilit&eacute;s (Failover)</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#manager">Gestion du r&eacute;partiteur de charge</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#health-check">V&eacute;rification dynamique du bon fonctionnement d'un serveur
    d'arri&egrave;re-plan</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#status">Drapeaux d'&eacute;tat d'un membre du groupe de r&eacute;partition de charge</a></li>
</ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="related">Mandataire inverse <a title="Lien permanent" href="#related" class="permalink">&para;</a></h2>
  
  <table class="related"><tr><th>Modules Apparent&eacute;s</th><th>Directives Apparent&eacute;es</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code></li><li><code class="module"><a href="../mod/mod_proxy_balancer.html">mod_proxy_balancer</a></code></li><li><code class="module"><a href="../mod/mod_proxy_hcheck.html">mod_proxy_hcheck</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/mod_proxy.html#proxypass">ProxyPass</a></code></li><li><code class="directive"><a href="../mod/mod_proxy.html#balancermember">BalancerMember</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 id="simple">Mandatement inverse simple <a title="Lien permanent" href="#simple" class="permalink">&para;</a></h2>
    

    <p>
      La directive <code class="directive"><a href="../mod/mod_proxy.html#proxypass">ProxyPass</a></code> permet de
      rediriger les requ&ecirc;tes entrantes vers un serveur d'arri&egrave;re-plan (ou un
      cluster de serveurs plus connu sous le nom de groupe
      <code>Balancer</code>). Dans cet exemple le plus simple, toutes les
      requ&ecirc;tes (<code>"/"</code>) sont redirig&eacute;es vers un serveur d'arri&egrave;re-plan
      unique :
    </p>

    <pre class="prettyprint lang-config">ProxyPass "/"  "http://www.example.com/"</pre>


    <p>
      Pour &ecirc;tre sur que cette redirection soit effectu&eacute;e et que les en-t&ecirc;tes
      <code>Location:</code> g&eacute;n&eacute;r&eacute;s par le serveur d'arri&egrave;re-plan soient
      modifi&eacute;s pour pointer vers le mandataire inverse, et non vers le serveur
      d'arri&egrave;re-plan, la directive <code class="directive"><a href="../mod/mod_proxy.html#proxypassreverse">ProxyPassReverse</a></code> est souvent requise :
    </p>

    <pre class="prettyprint lang-config">ProxyPass "/"  "http://www.example.com/"
ProxyPassReverse "/"  "http://www.example.com/"</pre>


    <p>Seules des URIs sp&eacute;cifiques peuvent &ecirc;tre mandat&eacute;es, comme le montre
    l'exemple suivant :</p>

    <pre class="prettyprint lang-config">ProxyPass "/images"  "http://www.example.com/"
ProxyPassReverse "/images"  "http://www.example.com/"</pre>


    <p>Dans l'exemple pr&eacute;c&eacute;dent, si le chemin d'une requ&ecirc;te commence par
    <code>/images</code>, elle sera redirig&eacute;e vers le serveur d'arri&egrave;re-plan
    sp&eacute;cifi&eacute; ; dans le cas contraire, elle sera trait&eacute;e localement.
    </p>
  </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="cluster">Clusters et Balancers <a title="Lien permanent" href="#cluster" class="permalink">&para;</a></h2>
    

    <p>
      Utiliser un serveur d'arri&egrave;re-plan unique n'est cependant pas une solution
      id&eacute;ale car ce dernier peut devenir indisponible ou surcharg&eacute;, et le
      mandatement inverse vers ce serveur ne pr&eacute;sente alors plus aucun avantage.
      La solution r&eacute;side dans la d&eacute;finition d'un groupe de serveurs
      d'arri&egrave;re-plan qui vont se partager le traitement des requ&ecirc;tes via un
      m&eacute;canisme de r&eacute;partition de charge et de gestion des indisponibilit&eacute;s pris
      en charge par le mandataire. Ce groupe de r&eacute;partition est plus connu sous le nom de
      <em>cluster</em>, mais dans la terminologie d'Apache httpd, on utilise
      plut&ocirc;t le terme de <em>balancer</em>. Un balancer se d&eacute;finit en
      utilisant les directives <code class="directive"><a href="../mod/mod_proxy.html#proxy">&lt;Proxy&gt;</a></code> et <code class="directive"><a href="../mod/mod_proxy.html#balancermember">BalancerMember</a></code> comme suit :
    </p>

    <pre class="prettyprint lang-config">&lt;Proxy balancer://myset&gt;
    BalancerMember http://www2.example.com:8080
    BalancerMember http://www3.example.com:8080
    ProxySet lbmethod=bytraffic
&lt;/Proxy&gt;

ProxyPass "/images/"  "balancer://myset/"
ProxyPassReverse "/images/"  "balancer://myset/"</pre>


    <p>
      Le protocole <code>balancer://</code> indique &agrave; httpd que l'on souhaite
      cr&eacute;er un balancer nomm&eacute; <em>myset</em>. Ce balancer comporte deux serveurs
      d'arri&egrave;re-plan r&eacute;f&eacute;renc&eacute;s dans la terminologie httpd sous le nom de
      <em>BalancerMembers</em>. Avec cet exemple, toute requ&ecirc;te dont le chemin
      commence par <code>/images</code> sera mandat&eacute;e vers <em>un</em> des deux
      serveurs d'arri&egrave;re-plan. La directive <code class="directive"><a href="../mod/mod_proxy.html#proxyset">ProxySet</a></code> d&eacute;finit ici pour le balancer
      <em>myset</em> un algorithme de
      r&eacute;partition de charge bas&eacute; sur le trafic entr&eacute;es/sorties.
    </p>

    <div class="note"><h3>Remarque</h3>
      <p>
      	Les <em>BalancerMembers</em> sont aussi souvent r&eacute;f&eacute;renc&eacute;s sous le terme
	<em>workers</em>.
      </p>
   </div>

  </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="config">Configuration du Balancer et des BalancerMembers <a title="Lien permanent" href="#config" class="permalink">&para;</a></h2>
    

    <p>
      Vous pouvez configurer de mani&egrave;re d&eacute;taill&eacute;e les <em>balancers</em> et
      <em>workers</em> via les nombreux param&egrave;tres de la directive <code class="directive"><a href="../mod/mod_proxy.html#proxypass">ProxyPass</a></code>. Par exemple, si vous souhaitez
      que <code>http://www3.example.com:8080</code> traite avec un facteur 3 le
      trafic avec un timeout d'une seconde, utilisez la configuration suivante :
    </p>

    <pre class="prettyprint lang-config">&lt;Proxy balancer://myset&gt;
    BalancerMember http://www2.example.com:8080
    BalancerMember http://www3.example.com:8080 loadfactor=3 timeout=1
    ProxySet lbmethod=bytraffic
&lt;/Proxy&gt;

ProxyPass "/images"  "balancer://myset/"
ProxyPassReverse "/images"  "balancer://myset/"</pre>


  </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="failover">Gestion des indisponibilit&eacute;s (Failover) <a title="Lien permanent" href="#failover" class="permalink">&para;</a></h2>
    

    <p>
      Vous pouvez aussi d&eacute;finir finement des sc&eacute;narios pour les cas
      d'indisponibilit&eacute; d'un ou plusieurs serveurs d'arri&egrave;re-plan en sp&eacute;cifiant
      quels serveurs doivent alors prendre le relai. Dans l'exemple suivant,
      trois sc&eacute;narios sont envisag&eacute;s :
    </p>
    <ol>
      <li>
        <code>http://spare1.example.com:8080</code> et
        <code>http://spare2.example.com:8080</code> ne sont sollicit&eacute;s que si
	<code>http://www2.example.com:8080</code> ou
	<code>http://www3.example.com:8080</code> est indisponible (un serveur
	de remplacement sera utilis&eacute; &agrave; la place d'un membre indisponible du m&ecirc;me
	jeu de serveurs cibles).
      </li>
      <li>
        <code>http://hstandby.example.com:8080</code> n'est sollicit&eacute; que si
	tous les autres serveurs cibles du jeu de serveurs <code>0</code> sont
	indisponibles.
      </li>
      <li>
        Les serveurs <code>http://bkup1.example.com:8080</code> et
	<code>http://bkup2.example.com:8080</code> du jeu <code>1</code> ne seront sollicit&eacute;s que si
	tous les serveurs du jeu <code>0</code>, tous les serveurs de
	remplacement et tous les serveurs de standby sont indisponibles.
      </li>
    </ol>
    <p>
      Il est ainsi possible de d&eacute;finir un ou plusieurs serveurs de remplacement
      ou de standby pour chaque jeu de serveurs du r&eacute;partiteur de charge.
    </p>

    <pre class="prettyprint lang-config">&lt;Proxy balancer://myset&gt;
    BalancerMember http://www2.example.com:8080
    BalancerMember http://www3.example.com:8080 loadfactor=3 timeout=1
    BalancerMember http://spare1.example.com:8080 status=+R
    BalancerMember http://spare2.example.com:8080 status=+R
    BalancerMember http://hstandby.example.com:8080 status=+H
    BalancerMember http://bkup1.example.com:8080 lbset=1
    BalancerMember http://bkup2.example.com:8080 lbset=1
    ProxySet lbmethod=byrequests
&lt;/Proxy&gt;

ProxyPass "/images/"  "balancer://myset/"
ProxyPassReverse "/images/"  "balancer://myset/"</pre>


    <p>
      Les serveurs de remplacement &agrave; chaud remplacent les serveurs indisponibles
      du m&ecirc;me jeu de serveurs du r&eacute;partiteur de charge. Un serveur est
      consid&eacute;r&eacute; comme indisponible s'il est en maintenance, arr&ecirc;t&eacute; ou en erreur.
      Les serveurs de standby &agrave; chaud sont utilis&eacute;s si tous les serveurs et
      serveurs de remplacement du jeu de serveurs du r&eacute;partiteur de charge sont
      indisponibles. Les jeux de serveurs du r&eacute;partiteur de charge (avec leurs
      serveurs de standby et de remplacement &agrave; chaud respectifs) sont toujours
      sollicit&eacute;s dans l'ordre du plus bas lbset vers le plus haut.
    </p>

  </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="manager">Gestion du r&eacute;partiteur de charge <a title="Lien permanent" href="#manager" class="permalink">&para;</a></h2>
    

    <p>
     L'application <em>balancer-manager</em> fournie avec le mandataire inverse
     d'Apache httpd en est un des outils les plus utiles. Comme
     <code class="module"><a href="../mod/mod_status.html">mod_status</a></code>, <em>balancer-manager</em> affiche la
     configuration et l'activit&eacute; actuelles des balancers actifs. L'affichage de
     ces informations n'est cependant pas sa seule fonction ; il permet aussi de
     modifier la plupart d'entre elles et m&ecirc;me d'ajouter des membres au groupe
     de r&eacute;partition de charge en temps r&eacute;el. Pour activer ces fonctionnalit&eacute;s,
     vous devez ajouter les lignes suivantes &agrave; votre fichier de configuration : 
    </p>

    <pre class="prettyprint lang-config">&lt;Location "/balancer-manager"&gt;
    SetHandler balancer-manager
    Require host localhost
&lt;/Location&gt;</pre>


    <div class="warning"><h3>Avertissement</h3>
      <p>N'activez le <em>balancer-manager</em> que si vous avez d&eacute;j&agrave; <a href="../mod/mod_proxy.html#access">s&eacute;curis&eacute; votre serveur</a>.
      Assurez-vous en particulier que l'acc&egrave;s &agrave; l'URL soit fortement restreint.</p>
    </div>

    <p>
      Lorsque vous acc&eacute;dez au serveur mandataire avec une adresse du style
      <code>http://rproxy.example.com/balancer-manager/</code>, la page suivante
      s'affiche :
    </p>
    <p class="centered"><img src="../images/bal-man.png" alt="balancer-manager page"></p>

    <p>
      Ce formulaire permet &agrave; l'administrateur de modifier certains param&egrave;tres,
      de d&eacute;sactiver ou d'ajouter certains serveurs d'arri&egrave;re-plan, et de
      modifier les r&egrave;gles de r&eacute;partition de charge. Par exemple, si on clique
      sur le r&eacute;partiteur, la page suivante s'affiche : 
    </p>
    <p class="centered"><img src="../images/bal-man-b.png" alt="balancer-manager page"></p>

    <p>
      Si on clique sur un membre du groupe de r&eacute;partition de charge, la page
      suivante s'affiche :
    </p>
    <p class="centered"><img src="../images/bal-man-w.png" alt="balancer-manager page"></p>

    <p>
      Si vous souhaitez que ces modifications soient conserv&eacute;es apr&egrave;s un
      red&eacute;marrage du serveur, assurez-vous que la directive <code class="directive"><a href="../mod/mod_proxy.html#balancerpersist">BalancerPersist</a></code> soit d&eacute;finie &agrave; On.
    </p>

  </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="health-check">V&eacute;rification dynamique du bon fonctionnement d'un serveur
    d'arri&egrave;re-plan <a title="Lien permanent" href="#health-check" class="permalink">&para;</a></h2>
    

    <p>
      Avant que le mandataire httpd ne fasse appel &agrave; un serveur d'arri&egrave;re-plan, il
      peut <em>"tester"</em> si ce dernier est disponible en d&eacute;finissant le
      param&egrave;tre <code>ping</code> de ce serveur via la directive <code class="directive"><a href="../mod/mod_proxy.html#proxypass">ProxyPass</a></code>. Cependant, il est souvent plus
      judicieux de v&eacute;rifier le bon fonctionnement d'un serveur <em>hors
      bande</em> et de mani&egrave;re dynamique via le module
      <code class="module"><a href="../mod/mod_proxy_hcheck.html">mod_proxy_hcheck</a></code> d'Apache httpd.
    </p>

  </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="status">Drapeaux d'&eacute;tat d'un membre du groupe de r&eacute;partition de charge <a title="Lien permanent" href="#status" class="permalink">&para;</a></h2>
    

    <p>
      <em>balancer-manager</em> permet d'afficher et de modifier l'&eacute;tat d'un
      membre du groupe de r&eacute;partition de charge. Les diff&eacute;rents &eacute;tats et leurs
      significations sont les suivants :
    </p>
      <table class="bordered">
      	<tr><th>Drapeau</th><th>Sigle</th><th>Description</th></tr>
      	<tr><td>&nbsp;</td><td><em>Ok</em></td><td>Le serveur est disponible</td></tr>
      	<tr><td>&nbsp;</td><td><em>Init</em></td><td>Le serveur a &eacute;t&eacute; initialis&eacute;</td></tr>
        <tr><td><code>D</code></td><td><em>Dis</em></td><td>Le serveur est
	d&eacute;sactiv&eacute; et n'accepte aucune requ&ecirc;te ; il sera retest&eacute; automatiquement.</td></tr>
        <tr><td><code>S</code></td><td><em>Stop</em></td><td>Le serveur a &eacute;t&eacute;
	arr&ecirc;t&eacute; par l'administrateur ; il n'accepte aucune requ&ecirc;te et il ne sera
	pas retest&eacute; automatiquement.</td></tr>
        <tr><td><code>I</code></td><td><em>Ign</em></td><td>Les erreurs
	concernant ce serveur sont ignor&eacute;es et il sera donc toujours consid&eacute;r&eacute;
	comme disponible.</td></tr>
	<tr><td><code>R</code></td><td><em>Spar</em></td><td>Le serveur cible sert de rempla&ccedil;ant &agrave;
	 chaud. Lorsqu'un serveur cible avec un lbset donn&eacute; est inutilisable
	 (maintenance, arr&ecirc;t, en erreur, etc...), un serveur de remplacement &agrave;
	 chaud libre de m&ecirc;me lbset sera utilis&eacute; &agrave; sa place. Les rempla&ccedil;ants &agrave;
	 chaud permettent de s'assurer qu'un nombre d&eacute;termin&eacute; de serveurs cibles
	 sera toujours disponible pour un r&eacute;partiteur de charge.</td></tr>
        <tr><td><code>H</code></td><td><em>Stby</em></td><td>Le serveur est en
	mode hot-standby et ne sera donc utilis&eacute; que si aucun autre serveur ou
	serveur de remplacement	n'est disponible dans le jeu de serveurs du
	r&eacute;partiteur de charge.</td></tr>
        <tr><td><code>E</code></td><td><em>Err</em></td><td>Le serveur est en
	erreur, en g&eacute;n&eacute;ral suite &agrave; un test pr&eacute;alable &agrave; une requ&ecirc;te ; aucune
	requ&ecirc;te ne lui sera soumise, mais il sera retest&eacute; en fonction de la
	valeur de son param&egrave;tre <code>retry</code>.</td></tr>
        <tr><td><code>N</code></td><td><em>Drn</em></td><td>Le serveur est en
	mode drain ; il n'acceptera de requ&ecirc;tes que dans le cadre des sessions
	persistantes qui lui sont r&eacute;serv&eacute;es et ignorera toutes les autres.</td></tr>
        <tr><td><code>C</code></td><td><em>HcFl</em></td><td>Le serveur a &eacute;chou&eacute;
	au test dynamique de bon fonctionnement et ne sera utilis&eacute; que lorsqu'il
	aura r&eacute;ussi un test ult&eacute;rieur.</td></tr>
      </table>
  </div></div>
<div class="bottomlang">
<p><span>Langues Disponibles: </span><a href="../en/howto/reverse_proxy.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
<a href="../fr/howto/reverse_proxy.html" title="Fran&ccedil;ais">&nbsp;fr&nbsp;</a></p>
</div><div id="footer">
<p class="apache">Copyright 2026 The Apache Software Foundation.<br>Autoris&eacute; sous <a href="https://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/quickreference.html">Directives</a> | <a href="https://cwiki.apache.org/confluence/display/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a> | <a href="https://bz.apache.org/bugzilla/enter_bug.cgi?product=Apache%20httpd-2">Signaler un bug</a></p></div><script><!--//--><![CDATA[//><!--
if (typeof(prettyPrint) !== 'undefined') {
    prettyPrint();
}
var langToggle = document.querySelector('.lang-toggle');
var topLang = document.querySelector('.toplang');
if (langToggle && topLang) {
    langToggle.addEventListener('click', function() { topLang.classList.toggle('open'); });
}
var qv = document.getElementById('quickview');
if (qv) {
    document.body.appendChild(qv);
    var qvBtn = document.createElement('button');
    qvBtn.className = 'qv-toggle';
    qvBtn.setAttribute('aria-label', 'Toggle page navigation');
    qvBtn.innerHTML = '&#9776;';
    document.body.appendChild(qvBtn);
    qvBtn.addEventListener('click', function() {
        var isOpen = qv.classList.toggle('open');
        if (isOpen) {
            qv.style.top = window.scrollY + 10 + 'px';
        }
    });
    window.addEventListener('scroll', function() { qv.classList.remove('open'); });
}
//--><!]]></script>
</body></html>