blob: 2645440017b54ec059756e7cfc4ee693d8b688b5 [file]
<!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>mod_proxy - Serveur HTTP Apache Version 2.5</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>
<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.5</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.5</a> &gt; <a href="./">Modules</a></div>
<div id="page-content">
<div id="preamble"><h1>Module Apache mod_proxy</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/mod/mod_proxy.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
<a href="../fr/mod/mod_proxy.html" title="Fran&ccedil;ais">&nbsp;fr&nbsp;</a> |
<a href="../ja/mod/mod_proxy.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a></p>
</div>
<div class="outofdate">Cette traduction peut &ecirc;tre p&eacute;rim&eacute;e. V&eacute;rifiez la version
anglaise pour les changements r&eacute;cents.</div>
<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Serveur mandataire/passerelle multi-protocole</td></tr>
<tr><th><a href="module-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="module-dict.html#ModuleIdentifier">Identificateur&nbsp;de&nbsp;Module:</a></th><td>proxy_module</td></tr>
<tr><th><a href="module-dict.html#SourceFile">Fichier&nbsp;Source:</a></th><td>mod_proxy.c</td></tr></table>
<h3>Sommaire</h3>
<div class="warning"><h3>Avertissement</h3>
<p>N'activez pas la fonctionnalit&eacute; de mandataire avec la directive
<code class="directive"><a href="#proxyrequests">ProxyRequests</a></code> avant
d'avoir <a href="#access">s&eacute;curis&eacute; votre serveur</a>. Les serveurs
mandataires ouverts sont dangereux pour votre r&eacute;seau,
mais aussi pour l'Internet au sens large.</p>
</div>
<p><code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> et ses modules associ&eacute;s impl&eacute;mentent
un mandataire/passerelle pour le serveur HTTP Apache, et supportent
de nombreux protocoles courants, ainsi que plusieurs algorithmes de
r&eacute;partition de charge. Le support de protocoles et d'algorithmes de
r&eacute;partition de charge suppl&eacute;mentaires peut &ecirc;tre assur&eacute; par des
modules tiers.</p>
<p>Un jeu de modules charg&eacute;s dans le serveur permet de fournir les
fonctionnalit&eacute;s souhait&eacute;es. Ces modules peuvent &ecirc;tre inclus
statiquement &agrave; la compilation, ou dynamiquement via la directive
<code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code>. Ce jeu de module
doit comporter :</p>
<ul>
<li><code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code>, qui fournit les fonctionnalit&eacute;s de
base d'un mandataire</li>
<li><code class="module"><a href="../mod/mod_proxy_balancer.html">mod_proxy_balancer</a></code> et un ou plusieurs modules
de r&eacute;partition, si la r&eacute;partition de charge doit &ecirc;tre mise en
oeuvre(Voir la documentation de
<code class="module"><a href="../mod/mod_proxy_balancer.html">mod_proxy_balancer</a></code> pour plus de d&eacute;tails).</li>
<li>un ou plusieurs modules de types de mandataire, ou protocoles
:
<table class="bordered">
<tr><th>Protocole</th><th>Module</th></tr>
<tr><td>AJP13 (Protocole Apache JServe version
1.3)</td><td><code class="module"><a href="../mod/mod_proxy_ajp.html">mod_proxy_ajp</a></code></td></tr>
<tr><td>CONNECT (pour
SSL)</td><td><code class="module"><a href="../mod/mod_proxy_connect.html">mod_proxy_connect</a></code></td></tr>
<tr><td>FastCGI</td><td><code class="module"><a href="../mod/mod_proxy_fcgi.html">mod_proxy_fcgi</a></code></td></tr>
<tr><td>ftp</td><td><code class="module"><a href="../mod/mod_proxy_ftp.html">mod_proxy_ftp</a></code></td></tr>
<tr><td>HTTP/0.9, HTTP/1.0, et
HTTP/1.1</td><td><code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code></td></tr>
<tr><td>HTTP/2.0</td><td><code class="module"><a href="../mod/mod_proxy_http2.html">mod_proxy_http2</a></code></td></tr>
<tr><td>SCGI</td><td><code class="module"><a href="../mod/mod_proxy_scgi.html">mod_proxy_scgi</a></code></td></tr>
<tr><td>UWSGI</td><td><code class="module"><a href="../mod/mod_proxy_uwsgi.html">mod_proxy_uwsgi</a></code></td></tr>
<tr><td>WS and WSS (Web-sockets)</td><td><code class="module"><a href="../mod/mod_proxy_wstunnel.html">mod_proxy_wstunnel</a></code></td></tr>
</table>
</li>
</ul>
<p>En outre, d'autres modules fournissent des fonctionnalit&eacute;s
&eacute;tendues. <code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code> et ses modules associ&eacute;s
fournissent la mise en cache. Les directives <code>SSLProxy*</code>
du module <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> permettent de contacter des
serveurs distants en utilisant le protocole SSL/TLS. Ces modules
additionnels devront &ecirc;tre charg&eacute;s et configur&eacute;s pour pouvoir
disposer de ces fonctionnalit&eacute;s.</p>
</div>
<div id="quickview"><h3>Sujets</h3>
<ul id="topics">
<li><img alt="" src="../images/down.gif"> <a href="#forwardreverse">Mandataires directs et
mandataires/passerelles inverses</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#examples">Exemples simples</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#handler">Acc&egrave;s via un gestionnaire</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#workers">Workers</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#access">Contr&ocirc;ler l'acc&egrave;s &agrave; votre
mandataire</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#startup">Ralentissement au d&eacute;marrage</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#intranet">Mandataire en Intranet</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#envsettings">Ajustements relatifs au
protocole</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#request-bodies">Corps de requ&ecirc;tes</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#x-headers">En-t&ecirc;tes de requ&ecirc;te du mandataire
inverse</a></li>
</ul><h3 class="directives">Directives</h3>
<ul id="toc">
<li><img alt="" src="../images/down.gif"> <a href="#balancergrowth">BalancerGrowth</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#balancerinherit">BalancerInherit</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#balancermember">BalancerMember</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#balancerpersist">BalancerPersist</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#noproxy">NoProxy</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#proxy">&lt;Proxy&gt;</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#proxy100continue">Proxy100Continue</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#proxyaddheaders">ProxyAddHeaders</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#proxyasyncdelay">ProxyAsyncDelay</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#proxyasyncidletimeout">ProxyAsyncIdleTimeout</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#proxybadheader">ProxyBadHeader</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#proxyblock">ProxyBlock</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#proxydomain">ProxyDomain</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#proxyerroroverride">ProxyErrorOverride</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#proxyiobuffersize">ProxyIOBufferSize</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#proxymatch">&lt;ProxyMatch&gt;</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#proxymaxforwards">ProxyMaxForwards</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#proxypass">ProxyPass</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#proxypassinherit">ProxyPassInherit</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#proxypassinterpolateenv">ProxyPassInterpolateEnv</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#proxypassmatch">ProxyPassMatch</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#proxypassreverse">ProxyPassReverse</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#proxypassreversecookiedomain">ProxyPassReverseCookieDomain</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#proxypassreversecookiepath">ProxyPassReverseCookiePath</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#proxypreservehost">ProxyPreserveHost</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#proxyreceivebuffersize">ProxyReceiveBufferSize</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#proxyremote">ProxyRemote</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#proxyremotematch">ProxyRemoteMatch</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#proxyrequests">ProxyRequests</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#proxyset">ProxySet</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#proxysourceaddress">ProxySourceAddress</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#proxystatus">ProxyStatus</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#proxytimeout">ProxyTimeout</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#proxyvia">ProxyVia</a></li>
</ul>
<h3>Traitement des bugs</h3><ul class="seealso"><li><a href="https://www.apache.org/dist/httpd/CHANGES_2.4">Journal des modifications de httpd</a></li><li><a href="https://bz.apache.org/bugzilla/buglist.cgi?bug_status=__open__&amp;list_id=144532&amp;product=Apache%20httpd-2&amp;query_format=specific&amp;order=changeddate%20DESC%2Cpriority%2Cbug_severity&amp;component=mod_proxy">Probl&egrave;mes connus</a></li><li><a href="https://bz.apache.org/bugzilla/enter_bug.cgi?product=Apache%20httpd-2&amp;component=mod_proxy">Signaler un bug</a></li></ul><h3>Voir aussi</h3>
<ul class="seealso">
<li><code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code></li>
<li><code class="module"><a href="../mod/mod_proxy_ajp.html">mod_proxy_ajp</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_connect.html">mod_proxy_connect</a></code></li>
<li><code class="module"><a href="../mod/mod_proxy_fcgi.html">mod_proxy_fcgi</a></code></li>
<li><code class="module"><a href="../mod/mod_proxy_ftp.html">mod_proxy_ftp</a></code></li>
<li><code class="module"><a href="../mod/mod_proxy_hcheck.html">mod_proxy_hcheck</a></code></li>
<li><code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code></li>
<li><code class="module"><a href="../mod/mod_proxy_scgi.html">mod_proxy_scgi</a></code></li>
<li><code class="module"><a href="../mod/mod_proxy_wstunnel.html">mod_proxy_wstunnel</a></code></li>
<li><code class="module"><a href="../mod/mod_ssl.html">mod_ssl</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 id="forwardreverse">Mandataires directs et
mandataires/passerelles inverses <a title="Lien permanent" href="#forwardreverse" class="permalink">&para;</a></h2>
<p>Le serveur HTTP Apache peut &ecirc;tre configur&eacute; dans les deux modes mandataire
<dfn>direct</dfn> et mandataire <dfn>inverse</dfn> (aussi nomm&eacute;
mode <dfn>passerelle</dfn>).</p>
<p>Un <dfn>mandataire direct</dfn> standard est un serveur
interm&eacute;diaire qui s'intercale entre le client et le <em>serveur
demand&eacute;</em>. Pour obtenir un contenu h&eacute;berg&eacute; par
le serveur demand&eacute;, le client envoie une requ&ecirc;te au
mandataire en nommant le serveur demand&eacute; comme
cible, puis le mandataire extrait le contenu depuis le
serveur demand&eacute; et le renvoie enfin au client. Le client doit &ecirc;tre
configur&eacute; de mani&egrave;re appropri&eacute;e pour pouvoir utiliser le mandataire
direct afin d'acc&eacute;der &agrave; d'autres sites.</p>
<p>L'acc&egrave;s &agrave; Internet depuis des clients situ&eacute;s derri&egrave;re un
pare-feu est une utilisation typique du mandataire direct. Le
mandataire direct peut aussi utiliser la mise en cache (fournie
par <code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code>) pour r&eacute;duire la charge du
r&eacute;seau.</p>
<p>La fonctionnalit&eacute; de mandataire direct est activ&eacute;e via la
directive <code class="directive"><a href="#proxyrequests">ProxyRequests</a></code>.
Comme les mandataires directs permettent aux clients d'acc&eacute;der &agrave;
des sites quelconques via votre serveur et de dissimuler leur
v&eacute;ritable origine, il est indispensable de <a href="#access">s&eacute;curiser votre serveur</a> de fa&ccedil;on &agrave; ce que seuls
les clients autoris&eacute;s puissent acc&eacute;der &agrave; votre serveur avant
d'activer la fonctionnalit&eacute; de mandataire direct.</p>
<p>Un <dfn>mandataire inverse</dfn> (ou <dfn>passerelle</dfn>),
quant &agrave; lui, appara&icirc;t au client comme un serveur web standard.
Aucune configuration particuli&egrave;re du client n'est n&eacute;cessaire. Le
client adresse ses demandes de contenus ordinaires dans l'espace
de nommage du mandataire inverse. Ce dernier d&eacute;cide alors o&ugrave;
envoyer ces requ&ecirc;tes, et renvoie le contenu au client comme s'il
l'h&eacute;bergeait lui-m&ecirc;me.</p>
<p>L'acc&egrave;s d'utilisateurs depuis Internet vers un serveur situ&eacute;
derri&egrave;re un pare-feu est une utilisation typique du mandataire
inverse. On peut aussi utiliser les mandataires inverses pour
mettre en oeuvre une r&eacute;partition de charge entre plusieurs
serveurs en arri&egrave;re-plan, ou fournir un cache pour un serveur
d'arri&egrave;re-plan plus lent. Les mandataires inverses peuvent aussi
tout simplement servir &agrave; rassembler plusieurs serveurs dans le
m&ecirc;me espace de nommage d'URLs.</p>
<p>La fonctionnalit&eacute; de mandataire inverse est activ&eacute;e via la
directive <code class="directive"><a href="#proxypass">ProxyPass</a></code> ou
le drapeau <code>[P]</code> de la directive <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code>. Il n'est
<strong>pas</strong> n&eacute;cessaire de d&eacute;finir <code class="directive"><a href="#proxyrequests">ProxyRequests</a></code> pour configurer
un mandataire inverse.</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="examples">Exemples simples <a title="Lien permanent" href="#examples" class="permalink">&para;</a></h2>
<p>Les exemples ci-dessous illustrent de mani&egrave;re tr&egrave;s basique la
mise en oeuvre de la fonctionnalit&eacute; de mandataire et ne sont l&agrave; que
pour vous aider &agrave; d&eacute;marrer. Reportez-vous &agrave; la documentation de
chaque directive.</p>
<p>Si en outre, vous d&eacute;sirez activer la mise en cache, consultez la
documentation de <code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code>.</p>
<div class="example"><h3>Mandataire inverse</h3><pre class="prettyprint lang-config">ProxyPass "/foo" "http://foo.example.com/bar"
ProxyPassReverse "/foo" "http://foo.example.com/bar"</pre>
</div>
<div class="example"><h3>Mandataire direct</h3><pre class="prettyprint lang-config">ProxyRequests On
ProxyVia On
&lt;Proxy *&gt;
Require host internal.example.com
&lt;/Proxy&gt;</pre>
</div>
<div class="example"><h3><a id="wsupgrade" name="wsupgrade">Promotion de protocole
vers Websocket (versions 2.4.47 et ult&eacute;rieures)</a></h3><pre class="prettyprint lang-config">ProxyPass "/some/ws/capable/path/" "http://example.com/some/ws/capable/path/" upgrade=websocket</pre>
</div>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="handler">Acc&egrave;s via un gestionnaire <a title="Lien permanent" href="#handler" class="permalink">&para;</a></h2>
<p>Vous pouvez aussi forcer le traitement d'une requ&ecirc;te en tant que
requ&ecirc;te de mandataire inverse en cr&eacute;ant un gestionnaire de transfert
appropri&eacute;. Dans l'exemple suivant, toutes les requ&ecirc;tes pour
des scripts PHP seront transmises au serveur FastCGI
sp&eacute;cifi&eacute; via un mandat inverse :
</p>
<div class="example"><h3>Scripts PHP et mandataire inverse</h3><pre class="prettyprint lang-config">&lt;FilesMatch "\.php$"&gt;
SetHandler "proxy:unix:/path/to/app.sock|fcgi://localhost"
&lt;/FilesMatch&gt;</pre>
</div>
<p>Cette fonctionnalit&eacute; est disponible &agrave; partir de la version
2.4.10 du serveur HTTP Apache.</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="workers">Workers <a title="Lien permanent" href="#workers" class="permalink">&para;</a></h2>
<p>Le mandataire g&egrave;re la configuration et les param&egrave;tres de
communication des serveurs originaux au sein d'objets nomm&eacute;s
<dfn>workers</dfn>. Deux types de worker sont fournis : le worker
par d&eacute;faut du mandataire direct et le worker par d&eacute;faut du
mandataire inverse. Il est aussi possible de d&eacute;finir explicitement
des workers suppl&eacute;mentaires.</p>
<p>Les deux workers par d&eacute;faut poss&egrave;dent une configuration fig&eacute;e
et seront utilis&eacute;s si aucun autre worker ne correspond &agrave; la
requ&ecirc;te. Ils ne r&eacute;utilisent pas les connexions et n'utilisent pas les
connexions HTTP persistantes (Keep-Alive). En effet, les
connexions TCP vers le serveur original sont ferm&eacute;es et ouvertes
pour chaque requ&ecirc;te.</p>
<p>Les workers d&eacute;finis explicitement sont identifi&eacute;s par leur URL.
Ils sont en g&eacute;n&eacute;ral d&eacute;finis via les directives <code class="directive"><a href="#proxypass">ProxyPass</a></code> ou <code class="directive"><a href="#proxypassmatch">ProxyPassMatch</a></code> lorsqu'on les
utilise dans le cadre d'un mandataire inverse :</p>
<div class="example"><pre class="prettyprint lang-config">ProxyPass "/example" "http://backend.example.com" connectiontimeout=5 timeout=30</pre>
</div>
<p>Cette directive va cr&eacute;er un worker associ&eacute; &agrave; l'URL du serveur original
<code>http://backend.example.com</code>, qui utilisera les valeurs de
timeout donn&eacute;es. Toutes les sp&eacute;cifications de timeouts utilisent la
syntaxe <a href="directive-dict.html#Syntax">time-interval</a>. Lorsqu'ils
sont utilis&eacute;s dans le cadre d'un mandataire direct, les workers sont en
g&eacute;n&eacute;ral d&eacute;finis via la directive <code class="directive"><a href="#proxyset">ProxySet</a></code> :</p>
<div class="example"><pre class="prettyprint lang-config">ProxySet http://backend.example.com connectiontimeout=5 timeout=30</pre>
</div>
<p>ou encore via les directives <code class="directive"><a href="#proxy">Proxy</a></code> et <code class="directive"><a href="#proxyset">ProxySet</a></code> :</p>
<pre class="prettyprint lang-config">&lt;Proxy http://backend.example.com&gt;
ProxySet connectiontimeout=5 timeout=30
&lt;/Proxy&gt;</pre>
<p>L'utilisation de workers d&eacute;finis explicitement dans le mode
mandataire direct n'est pas tr&egrave;s courante, car les mandataires
directs communiquent en g&eacute;n&eacute;ral avec de nombreux serveurs
originaux. La cr&eacute;ation explicite de workers pour certains serveurs
originaux peut cependant s'av&eacute;rer utile si ces serveurs sont
tr&egrave;s souvent sollicit&eacute;s. A leur niveau, les workers explicitement
d&eacute;finis ne poss&egrave;dent aucune notion de mandataire direct ou
inverse. Ils encapsulent un concept de communication commun avec
les serveurs originaux. Un worker cr&eacute;&eacute; via la directive <code class="directive"><a href="#proxypass">ProxyPass</a></code> pour &ecirc;tre utilis&eacute; dans le
cadre d'un mandataire inverse sera aussi utilis&eacute; dans le cadre
d'un mandataire directe chaque fois que l'URL vers le serveur
original correspondra &agrave; l'URL du worker, et vice versa.</p>
<p>L'URL qui identifie un worker correspond &agrave; l'URL de son serveur
original, y compris un &eacute;ventuel chemin donn&eacute; :</p>
<pre class="prettyprint lang-config">ProxyPass "/examples" "http://backend.example.com/examples"
ProxyPass "/docs" "http://backend.example.com/docs"</pre>
<p>Dans cet exemple, deux workers diff&eacute;rents sont d&eacute;finis, chacun
d'eux utilisant des configurations et jeux de connexions
s&eacute;par&eacute;s.</p>
<div class="warning"><h3>Partage de workers</h3>
<p>Le partage de workers intervient lorsque les URLs des workers
s'entrecoupent, ce qui arrive lorsque l'URL d'un worker
correspond au d&eacute;but de l'URL d'un autre worker d&eacute;fini plus loin
dans le fichier de configuration. Dans l'exemple suivant,</p>
<pre class="prettyprint lang-config">ProxyPass "/apps" "http://backend.example.com/" timeout=60
ProxyPass "/examples" "http://backend.example.com/examples" timeout=10</pre>
<p>le second worker n'est pas vraiment cr&eacute;&eacute;. C'est le premier
worker qui est en fait utilis&eacute;. L'avantage de ceci r&eacute;side dans
le fait qu'il n'existe qu'un seul jeu de connexions, ces
derni&egrave;res &eacute;tant donc r&eacute;utilis&eacute;es plus souvent. Notez que tous
les attributs de configuration d&eacute;finis explicitement pour le
deuxi&egrave;me worker seront ignor&eacute;s, ce qui sera journalis&eacute; en tant
qu'avertissement. Ainsi, dans l'exemple ci-dessus, la valeur de
timeout retenue pour l'URL <code>/exemples</code> sera
<code>60</code>, et non <code>10</code> !</p>
<p>Si vous voulez emp&ecirc;cher le partage de workers, classez vos
d&eacute;finitions de workers selon la longueur des URLs, de la plus
longue &agrave; la plus courte. Si au contraire vous voulez favoriser
ce partage, utilisez l'ordre de classement inverse. Voir aussi
l'avertissement &agrave; propos de l'ordre de classement des directives
<code class="directive"><a href="#proxypass">ProxyPass</a></code>.</p>
</div>
<div class="warning"><h3>Nom d'h&ocirc;te dans l'URL</h3>
<p>Le nom d'h&ocirc;te doit commencer par une lettre [a-z]. Par exemple :</p>
<pre class="prettyprint lang-config">ProxyPass "/apps" "http://127"</pre>
<p>n'est pas valide et provoquera une erreur si une requ&ecirc;te correspond
au chemin.</p>
</div>
<p>Les workers d&eacute;finis explicitement sont de deux sortes :
<dfn>workers directs</dfn> et <dfn>workers de r&eacute;partition (de
charge)</dfn>. Ils supportent de nombreux attributs de
configuration importants d&eacute;crits dans la directive <code class="directive"><a href="#proxypass">ProxyPass</a></code>. Ces m&ecirc;mes attributs
peuvent aussi &ecirc;tre d&eacute;finis via la directive <code class="directive"><a href="#proxyset">ProxySet</a></code>.</p>
<p>Le jeu d'options disponibles pour un worker direct d&eacute;pend du
protocole sp&eacute;cifi&eacute; dans l'URL du serveur original. Les protocoles
disponibles comprennent <code>ajp</code>, <code>fcgi</code>,
<code>ftp</code>, <code>http</code> et <code>scgi</code>.</p>
<p>Les workers de r&eacute;partition sont des workers virtuels qui
utilisent les workers directs, connus comme faisant partie de leurs
membres, pour le traitement effectif des requ&ecirc;tes. Chaque
r&eacute;partiteur peut comporter plusieurs membres. Lorsqu'il traite une
requ&ecirc;te, il choisit un de ses membres en fonction de l'algorithme
de r&eacute;partition de charge d&eacute;fini.</p>
<p>Un worker de r&eacute;partition est cr&eacute;&eacute; si son URL de worker comporte
<code>balancer</code> comme indicateur de protocole. L'URL du
r&eacute;partiteur permet d'identifier de mani&egrave;re unique le worker de
r&eacute;partition. La directive <code class="directive"><a href="#balancermember">BalancerMember</a></code> permet d'ajouter des
membres au r&eacute;partiteur.</p>
<div class="note"><h3>R&eacute;solution DNS pour les domaines originaux</h3>
<p>La r&eacute;solution DNS s'effectue lorsque le socket vers le
domaine original est cr&eacute;&eacute; pour la premi&egrave;re fois. Lorsque la r&eacute;utilisation
des connexions est activ&eacute;e, chaque domaine d'arri&egrave;re-plan n'est r&eacute;solu qu'une
seule fois pour chaque processus enfant, et cette r&eacute;solution est mise en
cache pour toutes les connexions ult&eacute;rieures jusqu'&agrave; ce que le processus enfant
soit recycl&eacute;. Ce comportement doit &ecirc;tre pris en consid&eacute;ration lorsqu'on
planifie des t&acirc;ches de maintenance du DNS impactant les domaines
d'arri&egrave;re-plan. Veuillez aussi vous reporter aux param&egrave;tres de la
directive <code class="directive"><a href="#proxypass">ProxyPass</a></code> pour plus de
d&eacute;tails &agrave; propos de la r&eacute;utilisation des connexions.
</p>
</div>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="access">Contr&ocirc;ler l'acc&egrave;s &agrave; votre
mandataire <a title="Lien permanent" href="#access" class="permalink">&para;</a></h2>
<p>Vous pouvez restreindre l'acc&egrave;s &agrave; votre mandataire via le bloc
de contr&ocirc;le <code class="directive"><a href="#proxy">&lt;Proxy&gt;</a></code> comme dans
l'exemple suivant :</p>
<pre class="prettyprint lang-config">&lt;Proxy *&gt;
Require ip 192.168.0
&lt;/Proxy&gt;</pre>
<div class="note"><h3>Requ&ecirc;tes HTTPS/CONNECT</h3>
<p>L'instruction g&eacute;n&eacute;rique <code>&lt;Proxy "*"&gt;</code> ci-dessus
correspond &agrave; toutes les requ&ecirc;tes, y compris les requ&ecirc;tes HTTPS sous tunnel
via la m&eacute;thode CONNECT. Notez que le contr&ocirc;le d'acc&egrave;s pour les tunnels
CONNECT ne peut fonctionner qu'avec l'h&ocirc;te et le port &mdash;&nbsp;le contr&ocirc;le avec
le chemin (par exemple <code>&lt;Proxy
"https://example.com/path/"&gt;</code>) ne fonctionnera pas, car les
requ&ecirc;tes CONNECT ne comportent pas de chemin.</p></div>
<p>Pour plus de d&eacute;tails sur les directives de contr&ocirc;le d'acc&egrave;s,
voir la documentation du module
<code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code>.</p>
<p>Restreindre l'acc&egrave;s de mani&egrave;re stricte est essentiel si vous
mettez en oeuvre un mandataire direct (en d&eacute;finissant la directive
<code class="directive"><a href="#proxyrequests">ProxyRequests</a></code> &agrave; "on").
Dans le cas contraire, votre serveur pourrait &ecirc;tre utilis&eacute; par
n'importe quel client pour acc&eacute;der &agrave; des serveurs quelconques,
tout en masquant sa v&eacute;ritable identit&eacute;. Ceci repr&eacute;sente un danger
non seulement pour votre r&eacute;seau, mais aussi pour l'Internet au
sens large. Dans le cas de la mise en oeuvre d'un mandataire
inverse (en utilisant la directive <code class="directive"><a href="#proxypass">ProxyPass</a></code> avec <code>ProxyRequests Off</code>), le contr&ocirc;le
d'acc&egrave;s est moins critique car les clients ne peuvent contacter
que les serveurs que vous avez sp&eacute;cifi&eacute;s.</p>
<p><strong>Voir aussi</strong> la variable d'environnement <a href="mod_proxy_http.html#env">Proxy-Chain-Auth</a>.</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="startup">Ralentissement au d&eacute;marrage <a title="Lien permanent" href="#startup" class="permalink">&para;</a></h2>
<p>Si vous utilisez la directive <code class="directive"><a href="#proxyblock">ProxyBlock</a></code>, les noms d'h&ocirc;tes sont r&eacute;solus en adresses
IP puis ces derni&egrave;res mises en cache au cours du d&eacute;marrage
&agrave; des fins de tests de comparaisons ult&eacute;rieurs. Ce processus peut
durer plusieurs secondes (ou d'avantage) en fonction de la vitesse
&agrave; laquelle s'effectue la r&eacute;solution des noms d'h&ocirc;tes.</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="intranet">Mandataire en Intranet <a title="Lien permanent" href="#intranet" class="permalink">&para;</a></h2>
<p>Un serveur mandataire Apache httpd situ&eacute; &agrave; l'int&eacute;rieur d'un Intranet
doit faire suivre les requ&ecirc;tes destin&eacute;es &agrave; un serveur externe &agrave;
travers le pare-feu de l'entreprise (pour ce faire, d&eacute;finissez la
directive <code class="directive"><a href="#proxyremote">ProxyRemote</a></code> de
fa&ccedil;on &agrave; ce qu'elle fasse suivre le <var>protocole</var> concern&eacute;
vers le mandataire du pare-feu). Cependant, lorsqu'il doit acc&eacute;der
&agrave; des ressources situ&eacute;es dans l'Intranet, il peut se passer du
pare-feu pour acc&eacute;der aux serveurs. A cet effet, la directive
<code class="directive"><a href="#noproxy">NoProxy</a></code> permet de
sp&eacute;cifier quels h&ocirc;tes appartiennent &agrave; l'Intranet et peuvent donc
&ecirc;tre acc&eacute;d&eacute;s directement.</p>
<p>Les utilisateurs d'un Intranet ont tendance &agrave; oublier le nom du
domaine local dans leurs requ&ecirc;tes WWW, et demandent par exemple
"http://un-serveur/" au lieu de
<code>http://un-serveur.example.com/</code>. Certains serveurs
mandataires commerciaux acceptent ce genre de requ&ecirc;te et les
traitent simplement en utilisant un nom de domaine local
implicite. Lorsque la directive <code class="directive"><a href="#proxydomain">ProxyDomain</a></code> est utilis&eacute;e et si le
serveur est <a href="#proxyrequests">configur&eacute; comme
mandataire</a>, Apache httpd peut renvoyer une r&eacute;ponse de redirection et
ainsi fournir au client l'adresse de serveur correcte,
enti&egrave;rement qualifi&eacute;e. C'est la m&eacute;thode &agrave; privil&eacute;gier car le
fichier des marque-pages de l'utilisateur contiendra alors des
noms de serveurs enti&egrave;rement qualifi&eacute;s.</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="envsettings">Ajustements relatifs au
protocole <a title="Lien permanent" href="#envsettings" class="permalink">&para;</a></h2>
<p>Pour les cas o&ugrave; <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> envoie des requ&ecirc;tes
vers un serveur qui n'impl&eacute;mente pas correctement les connexions
persistantes ou le protocole HTTP/1.1, il existe deux variables
d'environnement qui permettent de forcer les requ&ecirc;tes &agrave; utiliser
le protocole HTTP/1.0 avec connexions non persistantes. Elles
peuvent &ecirc;tre d&eacute;finies via la directive <code class="directive"><a href="../mod/mod_env.html#setenv">SetEnv</a></code>.</p>
<p>Il s'agit des variables <code>force-proxy-request-1.0</code> et
<code>proxy-nokeepalive</code>.</p>
<pre class="prettyprint lang-config">&lt;Location "/buggyappserver/"&gt;
ProxyPass "http://buggyappserver:7001/foo/"
SetEnv force-proxy-request-1.0 1
SetEnv proxy-nokeepalive 1
&lt;/Location&gt;</pre>
<p>Notez que <code>force-proxy-request-1.0</code> implique aussi
<code>proxy-sendcl</code>, car HTTP/1.0 ne prend pas en charge l'encodage
de transfert fractionn&eacute;. La redirection des corps de requ&ecirc;te fractionn&eacute;s
(via <code>proxy-sendchunked</code>) est d&eacute;sactiv&eacute;e si cette option est
d&eacute;finie.</p>
<p>A partir de la version 2.4.26 du serveur HTTP Apache, la d&eacute;finition de
la variable d'environnement "no-proxy" permet de d&eacute;sactiver
<code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> dans le traitement de la requ&ecirc;te courante.
Cette variable doit &ecirc;tre d&eacute;finie via la directive <code class="directive"><a href="../mod/mod_setenvif.html#setenvif">SetEnvIf</a></code> car la directive <code class="directive"><a href="../mod/mod_env.html#setenv">SetEnv</a></code> n'est pas &eacute;valu&eacute;e assez t&ocirc;t.</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="request-bodies">Corps de requ&ecirc;tes <a title="Lien permanent" href="#request-bodies" class="permalink">&para;</a></h2>
<p>Certaines m&eacute;thodes de requ&ecirc;tes comme POST comportent un corps de
requ&ecirc;te. Le protocole HTTP stipule que les requ&ecirc;tes qui comportent
un corps doivent soit utiliser un encodage de transmission
fractionn&eacute;e (chunked transfer encoding), soit envoyer un en-t&ecirc;te de requ&ecirc;te
<code>Content-Length</code>. Lorsqu'il fait suivre ce genre de
requ&ecirc;te vers le serveur demand&eacute;, <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code>
s'efforce toujours d'envoyer l'en-t&ecirc;te <code>Content-Length</code>.
Par contre, si la taille du corps est importante, et si la requ&ecirc;te
originale utilise un codage &agrave; fractionnement, ce dernier peut aussi
&ecirc;tre utilis&eacute; dans la requ&ecirc;te montante. Ce comportement peut &ecirc;tre
contr&ocirc;l&eacute; &agrave; l'aide de <a href="../env.html">variables
d'environnement</a>. Ainsi, si elle est d&eacute;finie, la variable
<code>proxy-sendcl</code> assure une compatibilit&eacute; maximale avec les
serveurs demand&eacute;s en imposant l'envoi de l'en-t&ecirc;te
<code>Content-Length</code>, alors que
<code>proxy-sendchunked</code> diminue la consommation de ressources
en imposant l'utilisation d'un codage &agrave; fractionnement.</p>
<p>Dans certaines circonstances, le serveur doit mettre en file
d'attente sur disque les corps de requ&ecirc;tes afin de satisfaire le
traitement demand&eacute; des corps de requ&ecirc;tes. Par exemple, cette mise en
file d'attente se produira si le corps original a &eacute;t&eacute; envoy&eacute; selon un
codage morcel&eacute; (et poss&egrave;de une taille importante), alors que
l'administrateur a demand&eacute; que les requ&ecirc;tes du serveur
d'arri&egrave;re-plan soient envoy&eacute;es avec l'en-t&ecirc;te Content-Length ou en
HTTP/1.0. Cette mise en file d'attente se produira aussi si le corps
de la requ&ecirc;te contient d&eacute;j&agrave; un en-t&ecirc;te Content-Length, alors que le
serveur est configur&eacute; pour filtrer les corps des requ&ecirc;tes entrantes.</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="x-headers">En-t&ecirc;tes de requ&ecirc;te du mandataire
inverse <a title="Lien permanent" href="#x-headers" class="permalink">&para;</a></h2>
<p>Lorsqu'il est configur&eacute; en mode mandataire inverse (en utilisant
par exemple la directive <code class="directive"><a href="#proxypass">ProxyPass</a></code>),
<code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code> ajoute plusieurs en-t&ecirc;tes de requ&ecirc;te
afin de transmettre des informations au serveur demand&eacute;. Ces
en-t&ecirc;tes sont les suivants :</p>
<dl>
<dt><code>X-Forwarded-For</code></dt>
<dd>L'adresse IP du client.</dd>
<dt><code>X-Forwarded-Host</code></dt>
<dd>L'h&ocirc;te d'origine demand&eacute; par le client dans l'en-t&ecirc;te de
requ&ecirc;te HTTP <code>Host</code>.</dd>
<dt><code>X-Forwarded-Server</code></dt>
<dd>Le nom d'h&ocirc;te du serveur mandataire.</dd>
</dl>
<p>Ces en-t&ecirc;tes doivent &ecirc;tre utilis&eacute;s avec pr&eacute;cautions sur le
serveur demand&eacute;, car ils contiendront plus d'une valeur (s&eacute;par&eacute;es
par des virgules) si la requ&ecirc;te originale contenait d&eacute;j&agrave; un de ces
en-t&ecirc;tes. Par exemple, vous pouvez utiliser
<code>%{X-Forwarded-For}i</code> dans la cha&icirc;ne de format du journal
du serveur demand&eacute; pour enregistrer les adresses IP des clients
originaux, mais il est possible que vous obteniez plusieurs adresses
si la requ&ecirc;te passe &agrave; travers plusieurs mandataires.</p>
<p>Voir aussi les directives <code class="directive"><a href="#proxypreservehost">ProxyPreserveHost</a></code> et <code class="directive"><a href="#proxyvia">ProxyVia</a></code> directives, qui permettent
de contr&ocirc;ler d'autres en-t&ecirc;tes de requ&ecirc;te.</p>
<p>Note : Si vous devez ajouter des en-t&ecirc;tes particuliers &agrave; la
requ&ecirc;te mandat&eacute;e, utilisez la directive <code class="directive"><a href="../mod/mod_headers.html#requestheader">RequestHeader</a></code>.</p>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="directive-section"><h2 id="balancergrowth">Directive <span id="BalancerGrowth">BalancerGrowth</span> <a title="Lien permanent" href="#balancergrowth" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Nombre de membres suppl&eacute;mentaires pouvant &ecirc;tre ajout&eacute;s
apr&egrave;s la configuration initiale</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>BalancerGrowth <var>#</var></code></td></tr>
<tr><th><a href="directive-dict.html#Default">D&eacute;faut:</a></th><td><code>BalancerGrowth 5</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
<tr><th><a href="directive-dict.html#Compatibility">Compatibilit&eacute;:</a></th><td>BalancerGrowth est disponible depuis la version 2.3.13 du
serveur HTTP Apache</td></tr>
</table>
<p>Cette directive permet de d&eacute;finir le nombre de r&eacute;partiteurs de charge
pouvant &ecirc;tre ajout&eacute;s &agrave; ceux d&eacute;j&agrave; configur&eacute;s pour un serveur virtuel. Elle
n'est active que si au minimum un r&eacute;partiteur a &eacute;t&eacute; pr&eacute;configur&eacute;.</p>
<p>La valeur doit &ecirc;tre entre 0 et 1000.</p>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="directive-section"><h2 id="balancerinherit">Directive <span id="BalancerInherit">BalancerInherit</span> <a title="Lien permanent" href="#balancerinherit" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>H&eacute;ritage des membres du groupes de r&eacute;partition de
charge du mandataire d&eacute;finis au niveau du serveur principal</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>BalancerInherit On|Off</code></td></tr>
<tr><th><a href="directive-dict.html#Default">D&eacute;faut:</a></th><td><code>BalancerInherit On</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
<tr><th><a href="directive-dict.html#Compatibility">Compatibilit&eacute;:</a></th><td>Disponible &agrave; partir de la version 2.4.5 du serveur
HTTP Apache.</td></tr>
</table>
<p>Cette directive permet d'attribuer au serveur virtuel courant
l'h&eacute;ritage des membres de groupes de r&eacute;partition de charge
d&eacute;finis au niveau du serveur
principal. Elle ne doit pas &ecirc;tre activ&eacute;e si vous
utilisez la fonctionnalit&eacute; de modifications dynamiques du
gestionnaire de r&eacute;partition de charge (Balancer Manager) pour
&eacute;viter des probl&egrave;mes et des comportements inattendus.</p>
<p>Les d&eacute;finitions au niveau du serveur principal constituent
les d&eacute;finitions par d&eacute;faut au niveau des serveurs virtuels.</p>
<p>La d&eacute;sactivation de ProxyPassInherit d&eacute;sactive aussi la
directive <code class="directive">BalancerInherit</code>.</p>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="directive-section"><h2 id="balancermember">Directive <span id="BalancerMember">BalancerMember</span> <a title="Lien permanent" href="#balancermember" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Ajoute un membre &agrave; un groupe de r&eacute;partition de
charge</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>BalancerMember [<var>balancerurl</var>] <var>url</var> [<var>cl&eacute;=valeur [cl&eacute;=valeur ...]]</var></code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>r&eacute;pertoire</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
</table>
<p>Cette directive permet d'ajouter un membre &agrave; un groupe de
r&eacute;partition de charge. Elle peut se trouver dans un conteneur
<code>&lt;Proxy <var>balancer://</var>...&gt;</code>, et accepte
tous les param&egrave;tres de paires cl&eacute;/valeur que supporte la directive
<code class="directive"><a href="#proxypass">ProxyPass</a></code>.</p>
<p>La directive <code class="directive">BalancerMember</code> accepte un param&egrave;tre
suppl&eacute;mentaire : <var>loadfactor</var>. Il s'agit du facteur de
charge du membre - un nombre entre 1.0 (valeur par d&eacute;faut) et 100.0, qui
d&eacute;finit la charge &agrave; appliquer au membre en question.</p>
<p>L'argument <var>balancerurl</var> n'est requis que s'il ne se trouve pas
d&egrave;j&agrave; dans la directive de conteneur <code>&lt;Proxy
<var>balancer://</var>...&gt;</code>. Il correspond &agrave; l'URL d'un
r&eacute;partiteur de charge d&eacute;fini par une directive <code class="directive"><a href="#proxypass">ProxyPass</a></code>.</p>
<p>La partie chemin de l'URL du membre du groupe de r&eacute;partition de
charge dans toute directive de conteneur <code>&lt;Proxy
<var>balancer://</var>...&gt;</code> est ignor&eacute;e.</p>
<p>Les slashes de fin doivent normalement &ecirc;tre supprim&eacute;s de l'URL
d'un <code class="directive">BalancerMember</code>.</p>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="directive-section"><h2 id="balancerpersist">Directive <span id="BalancerPersist">BalancerPersist</span> <a title="Lien permanent" href="#balancerpersist" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Tente de conserver les changements effectu&eacute;s par le
gestionnaire de r&eacute;partition de charge apr&egrave;s un red&eacute;marrage du
serveur.</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>BalancerPersist On|Off</code></td></tr>
<tr><th><a href="directive-dict.html#Default">D&eacute;faut:</a></th><td><code>BalancerPersist Off</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
<tr><th><a href="directive-dict.html#Compatibility">Compatibilit&eacute;:</a></th><td>BalancerPersist n'est disponible qu'&agrave; partir de la
version 2.4.4 du serveur HTTP Apache.</td></tr>
</table>
<p>Cette directive permet de conserver le contenu de l'espace
m&eacute;moire partag&eacute; associ&eacute; aux r&eacute;partiteurs de charge et &agrave; leurs
membres apr&egrave;s un red&eacute;marrage du serveur. Ces modifications
locales ne sont ainsi pas perdues lors des transitions d'&eacute;tat
dues &agrave; un red&eacute;marrage.</p>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="directive-section"><h2 id="noproxy">Directive <span id="NoProxy">NoProxy</span> <a title="Lien permanent" href="#noproxy" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Serveurs, domaines ou r&eacute;seaux auquels on se connectera
directement</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>NoProxy <var>domaine</var> [<var>domaine</var>] ...</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
</table>
<p>Cette directive n'a d'utilit&eacute; que pour les serveurs mandataires
Apache httpd au sein d'Intranets. La directive
<code class="directive">NoProxy</code> permet de sp&eacute;cifier une liste de
sous-r&eacute;seaux, d'adresses IP, de serveurs et/ou de domaines s&eacute;par&eacute;s
par des espaces. Une requ&ecirc;te pour un serveur qui correspond &agrave; un ou
plusieurs crit&egrave;res sera toujours servie par ce serveur directement,
sans &ecirc;tre redirig&eacute;e vers le(s) serveur(s) mandataire(s) d&eacute;fini(s) par
la directive <code class="directive"><a href="#proxyremote">ProxyRemote</a></code>.</p>
<div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config">ProxyRemote * http://firewall.example.com:81
NoProxy .example.com 192.168.112.0/21</pre>
</div>
<p>Le type des arguments <var>serveur</var> de la directive
<code class="directive">NoProxy</code> appartiennent &agrave; la liste suivante
:</p>
<dl>
<dt><var><a name="domain" id="domain">Domaine</a></var></dt>
<dd>
<p>Un <dfn>domaine</dfn> est ici un nom de domaine DNS partiellement
qualifi&eacute; pr&eacute;c&eacute;d&eacute; d'un point. Il repr&eacute;sente une liste de serveurs qui
appartiennent logiquement au m&ecirc;me domaine ou &agrave; la m&ecirc;me zonz DNS
(en d'autres termes, les nom des serveurs se terminent tous par
<var>domaine</var>).</p>
<div class="example"><h3>Exemple</h3><p><code>
.com .example.org.
</code></p></div>
<p>Pour faire la distinction entre <var>domaine</var>s et <var><a href="#hostname">nom d'h&ocirc;te</a></var>s (des points de vue &agrave; la fois
syntaxique et
s&eacute;mantique, un domaine DNS pouvant aussi avoir un enregistrement DNS
de type A !), les <var>domaine</var>s sont toujours sp&eacute;cifi&eacute;s en les
pr&eacute;fixant par un point.</p>
<div class="note"><h3>Note</h3>
<p>Les comparaisons de noms de domaines s'effectuent sans tenir
compte de la casse, et les parties droites des <var>Domaine</var>s
sont toujours cens&eacute;es correspondre &agrave; la racine de l'arborescence
DNS, si bien que les domaines <code>.ExEmple.com</code> et
<code>.exemple.com.</code> (notez le point &agrave; la fin du nom) sont
consid&eacute;r&eacute;s comme identiques. Comme une comparaison de domaines ne
n&eacute;cessite pas de recherche DNS, elle est beaucoup plus efficace
qu'une comparaison de sous-r&eacute;seaux.</p>
</div></dd>
<dt><var><a name="subnet" id="subnet">Sous-r&eacute;seau</a></var></dt>
<dd>
<p>Un <dfn>Sous-r&eacute;seau</dfn> est une adresse internet partiellement
qualifi&eacute;e sous forme num&eacute;rique (quatre nombres s&eacute;par&eacute;s par des
points), optionnellement suivie d'un slash et du masque de
sous-r&eacute;seau sp&eacute;cifiant le nombre de bits significatifs dans le
<var>Sous-r&eacute;seau</var>. Il repr&eacute;sente un sous-r&eacute;seau de serveurs qui
peuvent &ecirc;tre atteints depuis la m&ecirc;me interface r&eacute;seau. En l'absence
de masque de sous-r&eacute;seau explicite, il est sous-entendu que les
digits manquants (ou caract&egrave;res 0) de fin sp&eacute;cifient le masque de
sous-r&eacute;seau (Dans ce cas, le masque de sous-r&eacute;seau ne peut &ecirc;tre
qu'un multiple de 8). Voici quelques exemples :</p>
<dl>
<dt><code>192.168</code> ou <code>192.168.0.0</code></dt>
<dd>le sous-r&eacute;seau 192.168.0.0 avec un masque de sous-r&eacute;seau
implicite de 16 bits significatifs (parfois exprim&eacute; sous la forme
<code>255.255.0.0</code>)</dd>
<dt><code>192.168.112.0/21</code></dt>
<dd>le sous-r&eacute;seau <code>192.168.112.0/21</code> avec un masque de
sous-r&eacute;seau implicite de 21 bits significatifs (parfois exprim&eacute;
sous la forme<code>255.255.248.0</code>)</dd>
</dl>
<p>Comme cas extr&ecirc;mes, un <em>Sous-r&eacute;seau</em> avec un masque de
sous-r&eacute;seau de 32 bits significatifs est &eacute;quivalent &agrave; une <var><a href="#ipaddr">adresse IP</a></var>, alors qu'un <em>Sous-r&eacute;seau</em> avec un masque de
sous-r&eacute;seau de 0 bit significatif (c'est &agrave; dire 0.0.0.0/0) est
identique &agrave; la constante <var>_Default_</var>, et peut correspondre
&agrave; toute adresse IP.</p></dd>
<dt><var><a name="ipaddr" id="ipaddr">Adresse IP</a></var></dt>
<dd>
<p>Une <dfn>Adresse IP</dfn> est une adresse internet pleinement
qualifi&eacute;e sous forme num&eacute;rique (quatre nombres s&eacute;par&eacute;s par des
points). En g&eacute;n&eacute;ral, cette adresse repr&eacute;sente un serveur, mais elle
ne doit pas n&eacute;cessairement correspondre &agrave; un nom de domaine DNS.</p>
<div class="example"><h3>Exemple</h3><p><code>
192.168.123.7
</code></p></div>
<div class="note"><h3>Note</h3>
<p>Une <dfn>Adresse IP</dfn> ne n&eacute;cessite pas de r&eacute;solution DNS,
et peut ainsi s'av&eacute;rer plus efficace quant aux performances
d'Apache.</p>
</div></dd>
<dt><var><a name="hostname" id="hostname">Nom de serveur</a></var></dt>
<dd>
<p>Un <dfn>Nom de serveur</dfn> est un nom de domaine DNS pleinement
qualifi&eacute; qui peut &ecirc;tre r&eacute;solu en une ou plusieurs adresses IP par le
service de noms de domaines DNS. Il repr&eacute;sente un h&ocirc;te logique (par
opposition aux <var><a href="#domain">Domaine</a></var>s, voir
ci-dessus), et doit pouvoir &ecirc;tre r&eacute;solu en une ou plusieurs <var><a href="#ipaddr">adresses IP</a></var> (ou souvent en une liste
d'h&ocirc;tes avec diff&eacute;rentes <var><a href="#ipaddr">adresses
IP</a></var>).</p>
<div class="example"><h3>Exemples</h3><p><code>
prep.ai.example.edu<br>
www.example.org
</code></p></div>
<div class="note"><h3>Note</h3>
<p>Dans de nombreuses situations, il est plus efficace de
sp&eacute;cifier une <var><a href="#ipaddr">adresse IP</a></var> qu'un
<var>Nom de serveur</var> car cela &eacute;vite d'avoir &agrave; effectuer une
recherche DNS. La r&eacute;solution de nom dans Apache httpd peut prendre un
temps tr&egrave;s long lorsque la connexion avec le serveur de noms
utilise une liaison PPP lente.</p>
<p>Les comparaisons de <var>Nom de serveur</var> s'effectuent sans tenir
compte de la casse, et les parties droites des <var>Noms de serveur</var>
sont toujours cens&eacute;es correspondre &agrave; la racine de l'arborescence
DNS, si bien que les domaines <code>WWW.ExEmple.com</code> et
<code>www.example.com.</code> (notez le point &agrave; la fin du nom) sont
consid&eacute;r&eacute;s comme identiques.</p>
</div></dd>
</dl>
<h3>Voir aussi</h3>
<ul>
<li><a href="../dns-caveats.html">Probl&egrave;mes li&eacute;s au DNS</a></li>
</ul>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="directive-section"><h2 id="proxy">Directive <span id="Proxy">&lt;Proxy&gt;</span> <a title="Lien permanent" href="#proxy" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Conteneur de directives s'appliquant &agrave; des ressources
mandat&eacute;es</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>&lt;Proxy <var>url-avec-jokers</var>&gt; ...&lt;/Proxy&gt;</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
</table>
<p>Les directives situ&eacute;es dans une section <code class="directive">&lt;Proxy&gt;</code> ne s'appliquent qu'au contenu
mandat&eacute; concern&eacute; en utilisant une simple recherche de correspondance entre
une cha&icirc;ne et l&rsquo;URL. Les jokers de style shell sont aussi autoris&eacute;s.</p>
<p>Par exemple, les lignes suivantes n'autoriseront &agrave; acc&eacute;der &agrave; un
contenu via votre serveur mandataire que les h&ocirc;tes appartenant &agrave;
<code>votre-reseau.example.com</code> :</p>
<pre class="prettyprint lang-config">&lt;Proxy *&gt;
Require host votre-reseau.example.com
&lt;/Proxy&gt;</pre>
<p>Dans l'exemple suivant, tous les fichiers du r&eacute;pertoire
<code>foo</code> de <code>example.com</code> seront trait&eacute;s par le
filtre <code>INCLUDES</code> lorsqu'ils seront envoy&eacute;s par
l'interm&eacute;diaire du serveur mandataire :</p>
<pre class="prettyprint lang-config">&lt;Proxy http://example.com/foo/*&gt;
SetOutputFilter INCLUDES
&lt;/Proxy&gt;</pre>
<p>Dans l'exemple suivant, les clients web poss&eacute;dant l'adresse IP
sp&eacute;cifi&eacute;e seront autoris&eacute;s &agrave; effectuer des requ&ecirc;tes
<code>CONNECT</code> pour acc&eacute;der au serveur
<code>https://www.example.com/</code>, sous r&eacute;serve que le module
<code class="module"><a href="../mod/mod_proxy_connect.html">mod_proxy_connect</a></code> soit charg&eacute;.
</p>
<pre class="prettyprint lang-config">&lt;Proxy www.example.com:443&gt;
Require ip 192.168.0.0/16
&lt;/Proxy&gt;</pre>
<div class="warning"><h3>Avertissement</h3>
Cette section de configuration ne rend canonique aucune partie de la cha&icirc;ne
compar&eacute;e, comme les protocoles, les noms d&rsquo;h&ocirc;te, les adresses IP, etc. Il
faut &ecirc;tre tr&egrave;s prudent si on l&rsquo;utilise pour le contr&ocirc;le d&rsquo;acc&egrave;s en ne se
limitant pas &agrave; interdire l&rsquo;acc&egrave;s par d&eacute;faut et en autorisant certains noms
d&rsquo;h&ocirc;te donn&eacute;s plut&ocirc;t que l&rsquo;inverse, o&ugrave; une interdiction pourrait &ecirc;tre
court-circuit&eacute;e en utilisant des formes alternatives.
</div>
<div class="note"><h3>Diff&eacute;rences avec la section de configuration Location</h3>
<p>Une URL d'arri&egrave;re-plan sera concern&eacute;e par le conteneur Proxy si
elle commence par la <var>url-avec-jokers</var>, m&ecirc;me si le
dernier segment de chemin de la directive ne correspond qu'&agrave; un
pr&eacute;fixe de segment dee chemin de l'URL d'arri&egrave;re-plan. Par exemple, &lt;Proxy
http://example.com/foo&gt; correspondra entre autres aux URLs
http://example.com/foo, http://example.com/foo/bar, et
http://example.com/foobar. La correspondance de l'URL finale
diff&egrave;re du comportement de la section <code class="directive"><a href="../mod/core.html#location">&lt;Location&gt;</a></code> qui, pour le cas de cette note,
traitera le segment de chemin final comme s'il se terminait par un
slash.</p>
<p>Pour un contr&ocirc;le plus fin de la correspondance des URL, voir la
directive <code class="directive">&lt;ProxyMatch&gt;</code>.</p>
</div>
<h3>Voir aussi</h3>
<ul>
<li><code class="directive"><a href="#proxymatch">&lt;ProxyMatch&gt;</a></code></li>
</ul>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="directive-section"><h2 id="proxy100continue">Directive <span id="Proxy100Continue">Proxy100Continue</span> <a title="Lien permanent" href="#proxy100continue" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Transmission du message "100-continue" au serveur d'origine</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>Proxy100Continue Off|On</code></td></tr>
<tr><th><a href="directive-dict.html#Default">D&eacute;faut:</a></th><td><code>Proxy100Continue On</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel, r&eacute;pertoire</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
<tr><th><a href="directive-dict.html#Compatibility">Compatibilit&eacute;:</a></th><td>Disponible &agrave; partir de la version 2.4.40 du serveur HTTP Apache</td></tr>
</table>
<p>Cette directive permet de contr&ocirc;ler le transfert par le mandataire du
message "100-continue" (<em>Expect:</em>ation) vers le serveur d'origine. Si
elle est d&eacute;finie &agrave; "On", le serveur d'origine d&eacute;cidera lui-m&ecirc;me si le corps
de la requ&ecirc;te HTTP doit &ecirc;tre lu. Si elle est d&eacute;finie &agrave; "Off", le mandataire
g&eacute;n&eacute;rera lui-m&ecirc;me une r&eacute;ponse interm&eacute;diaire <em>100 Continue</em> avant de
transf&eacute;rer le corps de la requ&ecirc;te.</p>
<div class="note"><h3>Contexte d'utilisation</h3>
<p>Cette option n'est utilisable qu'avec les mandataires HTTP g&eacute;r&eacute;s par
<code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></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 id="proxyaddheaders">Directive <span id="ProxyAddHeaders">ProxyAddHeaders</span> <a title="Lien permanent" href="#proxyaddheaders" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Ajoute des informations &agrave; propos du mandataire aux
en-t&ecirc;tes X-Forwarded-*</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyAddHeaders Off|On</code></td></tr>
<tr><th><a href="directive-dict.html#Default">D&eacute;faut:</a></th><td><code>ProxyAddHeaders On</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel, r&eacute;pertoire</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
<tr><th><a href="directive-dict.html#Compatibility">Compatibilit&eacute;:</a></th><td>Disponible depuis la version 2.3.10</td></tr>
</table>
<p>Cette directive permet de passer au serveur d'arri&egrave;re-plan des
informations &agrave; propos du mandataire via les en-t&ecirc;tes HTTP
X-Forwarded-For, X-Forwarded-Host et X-Forwarded-Server.</p>
<div class="note"><h3>Utilit&eacute;</h3>
<p>Cette option n'est utile que dans le cas du mandat HTTP trait&eacute;
par <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></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 id="proxyasyncdelay">Directive <span id="ProxyAsyncDelay">ProxyAsyncDelay</span> <a title="Lien permanent" href="#proxyasyncdelay" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Dur&eacute;e de sondage synchrone avant de passer le contr&ocirc;le d&rsquo;une
connexion au MPM pour un traitement asynchrone</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyAsyncDelay <var>time</var>[s]</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel, r&eacute;pertoire</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
<tr><th><a href="directive-dict.html#Compatibility">Compatibilit&eacute;:</a></th><td>Disponible &agrave; partir de la version 2.5 du serveur HTTP Apache</td></tr>
</table>
<p>Lorsqu&rsquo;un MPM g&eacute;rant les &eacute;v&egrave;nements est utilis&eacute;, cette directive active
la gestion asynchrone des connexions de mandataire. Apr&egrave;s avoir envoy&eacute; la
requ&ecirc;te au serveur dorsal, le thread de travail du mandataire attend une
r&eacute;ponse pendant la dur&eacute;e sp&eacute;cifi&eacute;e par cette directive. Si le serveur dorsal
r&eacute;pond pendant ce laps de temps, la r&eacute;ponse est trait&eacute;e de mani&egrave;re synchrone
par le m&ecirc;me thread. Dans le cas contraire, le contr&ocirc;le de la connexion est
pass&eacute; &agrave; la boucle d&rsquo;attente d&rsquo;&eacute;v&egrave;nement asynchrone du MPM, lib&eacute;rant de ce
fait le thread de travail qui pourra alors servir d&rsquo;autres requ&ecirc;tes.</p>
<p>Si cette directive est d&eacute;finie &agrave; <code>0</code>, le contr&ocirc;le de la
connexion est imm&eacute;diatement transmis &agrave; la boucle d&rsquo;attente d&rsquo;&eacute;v&egrave;nement. Si
elle est d&eacute;finie &agrave; <code>-1</code>, le traitement asynchrone est totalement
d&eacute;sactiv&eacute; (toutes les connexions de mandataire restent synchrones).</p>
<p>Cette directive n&rsquo;a d&rsquo;effet que si le MPM prend en charge l&rsquo;attente
de r&eacute;ponse (polling) &mdash;&nbsp;par exemple, <code class="module"><a href="../mod/event.html">event</a></code>).</p>
<div class="note"><h3>Quand utiliser cette directive</h3>
<p>La gestion asynchrone des mandataires est particuli&egrave;rement utile pour les
serveurs dorsaux lents ou les r&eacute;ponses en flux continu (streaming) de longue
dur&eacute;e, o&ugrave; le fait de bloquer un thread de travail en attente de donn&eacute;es
limiterait la concurrence. Pour les serveurs dorsaux rapides qui r&eacute;pondent
dans la milliseconde, l&rsquo;approche synchrone est plus efficace.</p>
</div>
<h3>Voir aussi</h3>
<ul>
<li><code class="directive"><a href="#proxyasyncidletimeout">ProxyAsyncIdleTimeout</a></code></li>
<li><code class="directive"><a href="#proxytimeout">ProxyTimeout</a></code></li>
</ul>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="directive-section"><h2 id="proxyasyncidletimeout">Directive <span id="ProxyAsyncIdleTimeout">ProxyAsyncIdleTimeout</span> <a title="Lien permanent" href="#proxyasyncidletimeout" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>D&eacute;lai d&rsquo;inactivit&eacute; pour les connexions asynchrones de mandataire</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyAsyncIdleTimeout <var>time</var>[s]</code></td></tr>
<tr><th><a href="directive-dict.html#Default">D&eacute;faut:</a></th><td><code>La valeur de la directive <code class="directive"><a href="#proxytimeout">ProxyTimeout</a></code></code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel, r&eacute;pertoire</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
<tr><th><a href="directive-dict.html#Compatibility">Compatibilit&eacute;:</a></th><td>Disponible &agrave; partir de la version 2.5 du serveur HTTP Apache</td></tr>
</table>
<p>Une fois le contr&ocirc;le de la connexion de mandataire transmis &agrave; la boucle
d&rsquo;attente d&rsquo;&eacute;v&egrave;nement asynchrone du MPM (voir la directive <code class="directive"><a href="#proxyasyncdelay">ProxyAsyncDelay</a></code>), cette directive d&eacute;finit la
dur&eacute;e maximale pendant laquelle la connexion peut rester inactive (aucune
donn&eacute;e re&ccedil;u du serveur dorsal) avant d&rsquo;&ecirc;tre ferm&eacute;e.</p>
<p>Si elle n&rsquo;est pas explicitement d&eacute;finie, elle prend pour valeur celle du
param&egrave;tre <code>timeout</code> du thread de travail (si d&eacute;fini via
<code class="directive"><a href="#proxypass">ProxyPass</a></code> ou <code class="directive"><a href="#proxyset">ProxySet</a></code>), celle de <code class="directive"><a href="#proxytimeout">ProxyTimeout</a></code> ou en dernier recours celle de
la directive <code class="directive"><a href="../mod/core.html#timeout">Timeout</a></code> du serveur.</p>
<p>Cette directive n&rsquo;a d&rsquo;effet que si la directive <code class="directive"><a href="#proxyasyncdelay">ProxyAsyncDelay</a></code> est aussi d&eacute;finie pour
activer la gestion asynchrone.</p>
<h3>Voir aussi</h3>
<ul>
<li><code class="directive"><a href="#proxyasyncdelay">ProxyAsyncDelay</a></code></li>
<li><code class="directive"><a href="#proxytimeout">ProxyTimeout</a></code></li>
</ul>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="directive-section"><h2 id="proxybadheader">Directive <span id="ProxyBadHeader">ProxyBadHeader</span> <a title="Lien permanent" href="#proxybadheader" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>D&eacute;termine la mani&egrave;re de traiter les lignes d'en-t&ecirc;te
incorrectes d'une r&eacute;ponse</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyBadHeader IsError|Ignore|StartBody</code></td></tr>
<tr><th><a href="directive-dict.html#Default">D&eacute;faut:</a></th><td><code>ProxyBadHeader IsError</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
</table>
<p>La directive <code class="directive">ProxyBadHeader</code> permet de
d&eacute;terminer le comportement de <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> lorsqu'il
re&ccedil;oit des lignes d'en-t&ecirc;te de r&eacute;ponse dont la syntaxe n'est pas valide (c'est
&agrave; dire ne contenant pas de caract&egrave;re ':') en provenance du serveur
original. Les arguments disponibles sont :</p>
<dl>
<dt><code>IsError</code></dt>
<dd>Annule la requ&ecirc;te et renvoie une r&eacute;ponse de code 502 (mauvaise
passerelle). C'est le comportement par d&eacute;faut.</dd>
<dt><code>Ignore</code></dt>
<dd>Traite les lignes d'en-t&ecirc;te incorrectes comme si elles n'avaient
pas &eacute;t&eacute; envoy&eacute;es.</dd>
<dt><code>StartBody</code></dt>
<dd>A la r&eacute;ception de la premi&egrave;re ligne d'en-t&ecirc;te incorrecte, les
autres en-t&ecirc;tes sont lus et ce qui reste est trait&eacute; en tant que
corps. Ceci facilite la prise en compte des serveurs d'arri&egrave;re-plan
bogu&eacute;s qui oublient d'ins&eacute;rer une ligne vide entre les
en-t&ecirc;tes et le corps.</dd>
</dl>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="directive-section"><h2 id="proxyblock">Directive <span id="ProxyBlock">ProxyBlock</span> <a title="Lien permanent" href="#proxyblock" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Interdit les requ&ecirc;tes mandat&eacute;es vers certains h&ocirc;tes</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyBlock *|<var>nom d'h&ocirc;te</var>|<var>nom d'h&ocirc;te partiel</var>
[<var>nom d'h&ocirc;te</var>|<var>nom d'h&ocirc;te partiel</var>]...</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
</table>
<p>La directive <code class="directive">ProxyBlock</code> permet d'interdire
l'acc&egrave;s FTP ou HTTP via le mandataire &agrave; certains h&ocirc;tes en fonction
d'une correspondance exacte ou partielle avec un nom d'h&ocirc;te, ou dans
la mesure du possible en fonction d'une comparaison d'adresses IP.</p>
<p>Chaque param&egrave;tre de la directive
<code class="directive">ProxyBlock</code> accepte comme valeur soit
<code>*</code>, soit une cha&icirc;ne alphanum&eacute;rique. Au d&eacute;marrage, le
module tente de r&eacute;soudre toute cha&icirc;ne alphanum&eacute;rique depuis un nom
DNS vers un jeu d'adresses IP, mais toute erreur de DNS est ignor&eacute;e.</p>
<p>Si un param&egrave;tre a pour valeur "<code>*</code>",
<code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> interdira l'acc&egrave;s &agrave; tout site FTP ou
HTTP.</p>
<p>Dans le cas contraire, pour toute requ&ecirc;te vers une ressource FTP
ou HTTP via le mandataire, <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> va comparer le
nom d'h&ocirc;te de l'URI de la requ&ecirc;te avec chaque cha&icirc;ne alphanum&eacute;rique
sp&eacute;cifi&eacute;e. Si une cha&icirc;ne correspond, m&ecirc;me partiellement, l'acc&egrave;s est
refus&eacute;. Si aucune cha&icirc;ne ne correspond, et si un mandataire distant
(forward) est configur&eacute; via la directive
<code class="directive">ProxyRemote</code> ou
<code class="directive">ProxyRemoteMatch</code>, l'acc&egrave;s est autoris&eacute;. Si
aucun mandataire distant (forward) n'est configur&eacute;, l'adresse IP
correspondant au nom d'h&ocirc;te de l'URI est compar&eacute;e &agrave; toutes les
adresses IP r&eacute;solues au d&eacute;marrage, et l'acc&egrave;s est refus&eacute; si une
correspondance est trouv&eacute;e.</p>
<p>Notez que les recherches DNS peuvent ralentir le processus de
d&eacute;marrage du serveur.</p>
<div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config">ProxyBlock news.example.com auctions.example.com friends.example.com</pre>
</div>
<p>Notez qu'<code>example</code> suffirait aussi pour atteindre
ces sites.</p>
<p>Hosts conviendrait aussi s'il &eacute;tait r&eacute;f&eacute;renc&eacute; par adresse IP.</p>
<p>Notez aussi que</p>
<pre class="prettyprint lang-config">ProxyBlock *</pre>
<p>bloque les connexions vers tous les sites.</p>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="directive-section"><h2 id="proxydomain">Directive <span id="ProxyDomain">ProxyDomain</span> <a title="Lien permanent" href="#proxydomain" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Nom de domaine par d&eacute;faut pour les requ&ecirc;tes
mandat&eacute;es</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyDomain <var>Domaine</var></code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
</table>
<p>Cette directive n'a d'utilit&eacute; que pour les serveurs mandataires
Apache httpd au sein d'un Intranet. La directive
<code class="directive">ProxyDomain</code> permet de sp&eacute;cifier le domaine par d&eacute;faut
auquel le serveur mandataire apache appartient. Si le serveur re&ccedil;oit une
requ&ecirc;te pour un h&ocirc;te sans nom de domaine, il va g&eacute;n&eacute;rer une r&eacute;ponse de
redirection vers le m&ecirc;me h&ocirc;te suffix&eacute; par le <var>Domaine</var> sp&eacute;cifi&eacute;. Le
nom du domaine doit commencer par un point.</p>
<div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config">ProxyRemote "*" "http://firewall.example.com:81"
NoProxy ".example.com" "192.168.112.0/21"
ProxyDomain ".example.com"</pre>
</div>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="directive-section"><h2 id="proxyerroroverride">Directive <span id="ProxyErrorOverride">ProxyErrorOverride</span> <a title="Lien permanent" href="#proxyerroroverride" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Outrepasser les pages d'erreur pour les contenus
mandat&eacute;s</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyErrorOverride Off|On [<var>code</var> ...]</code></td></tr>
<tr><th><a href="directive-dict.html#Default">D&eacute;faut:</a></th><td><code>ProxyErrorOverride Off</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel, r&eacute;pertoire</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
<tr><th><a href="directive-dict.html#Compatibility">Compatibilit&eacute;:</a></th><td>La liste de codes d'&eacute;tat est disponible &agrave; partir de la version
2.5.1 du serveur HTTP Apache.</td></tr>
</table>
<p>Cette directive est utile pour les configurations de mandataires
inverses, lorsque vous souhaitez que les pages d'erreur envoy&eacute;es
aux utilisateurs finaux pr&eacute;sentent un aspect homog&egrave;ne. Elle permet
aussi l'inclusion de fichiers (via les SSI de
<code class="module"><a href="../mod/mod_include.html">mod_include</a></code>) pour obtenir le code d'erreur et agir
en cons&eacute;quence (le comportement par d&eacute;faut afficherait la page
d'erreur du serveur mandat&eacute;, alors que c'est le message d'erreur SSI
qui sera affich&eacute; si cette directive est &agrave; "on").</p>
<p>Cette directive n'affecte pas le traitement des r&eacute;ponses
informatives (1xx), de type succ&egrave;s normal (2xx), ou de redirection
(3xx).</p>
<p>Par d&eacute;faut, <code class="directive">ProxyErrorOverride</code> affecte toutes les
r&eacute;ponses avec un code compris entre 400 inclus et 600 exclus.</p>
<div class="example"><h3>Exemple de configuration par d&eacute;faut</h3><pre class="prettyprint lang-config">ProxyErrorOverride On</pre>
</div>
<p>Pour n'affecter que les r&eacute;ponses poss&egrave;dant certains codes d'&eacute;tat
particuliers, vous pouvez sp&eacute;cifier ces derniers sous la forme d'une liste
en les s&eacute;parant par des espaces. Les r&eacute;ponses dont le code d'&eacute;tat ne fait
pas partie de la liste ne seront pas affect&eacute;es. Vous ne pouvez sp&eacute;cifier que
des codes d'erreurs, donc compris entre 400 inclus et 600 exclus.</p>
<div class="example"><h3>Exemple de configuration personnalis&eacute;e</h3><pre class="prettyprint lang-config">ProxyErrorOverride On 403 405 500 501 502 503 504</pre>
</div>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="directive-section"><h2 id="proxyiobuffersize">Directive <span id="ProxyIOBufferSize">ProxyIOBufferSize</span> <a title="Lien permanent" href="#proxyiobuffersize" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>D&eacute;termine la taille du tampon interne de transfert de
donn&eacute;es</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyIOBufferSize <var>octets</var></code></td></tr>
<tr><th><a href="directive-dict.html#Default">D&eacute;faut:</a></th><td><code>ProxyIOBufferSize 8192</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
</table>
<p>La directive <code class="directive">ProxyIOBufferSize</code> permet
d'ajuster la taille du tampon interne utilis&eacute; comme bloc-note pour
les transferts de donn&eacute;es entre entr&eacute;e et sortie. La taille minimale
est de <code>512</code> octets, ou d&eacute;finie &agrave; <code>0</code> pour indiquer
que la taille de tampon par d&eacute;faut du syst&egrave;me doit &ecirc;tre utilis&eacute;e.</p>
<p>Dans la plupart des cas, il n'y a aucune raison de modifier cette
valeur.</p>
<p>Si elle est utilis&eacute;e avec AJP, cette directive permet de d&eacute;finir
la taille maximale du paquet AJP en octets. Si la valeur sp&eacute;cifi&eacute;e
est sup&eacute;rieure &agrave; 65536, elle est corrig&eacute;e et prend la valeur 65536.
Si vous ne conservez pas
la valeur par d&eacute;faut, vous devez aussi modifier l'attribut
<code>packetSize</code> de votre connecteur AJP du c&ocirc;t&eacute; de Tomcat !
L'attribut <code>packetSize</code> n'est disponible que dans Tomcat
<code>5.5.20+</code> et <code>6.0.2+</code>.</p>
<p>Il n'est normalement pas n&eacute;cessaire de modifier la taille
maximale du paquet. Des probl&egrave;mes ont cependant &eacute;t&eacute; rapport&eacute;s avec
la valeur par d&eacute;faut lors de l'envoi de certificats ou de cha&icirc;nes de
certificats.</p>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="directive-section"><h2 id="proxymatch">Directive <span id="ProxyMatch">&lt;ProxyMatch&gt;</span> <a title="Lien permanent" href="#proxymatch" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Conteneur de directives s'appliquant &agrave; des ressources
mandat&eacute;es correspondant &agrave; une expression rationnelle</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>&lt;ProxyMatch <var>regex</var>&gt; ...&lt;/ProxyMatch&gt;</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
</table>
<p>La directive <code class="directive">&lt;ProxyMatch&gt;</code> est
identique &agrave; la directive <code class="directive"><a href="#proxy">&lt;Proxy&gt;</a></code>, &agrave; l'exception qu'elle d&eacute;finit
les URLs auxquelles elle s'applique en utilisant une <a class="glossarylink" href="../glossary.html#regex" title="voir glossaire">expression rationnelle</a>.</p>
<div class="warning"><h3>Avertissement</h3>
Cette section de configuration ne rend canonique aucune partie de la cha&icirc;ne
compar&eacute;e, comme les protocoles, les noms d&rsquo;h&ocirc;te, les adresses IP, etc. Il
faut &ecirc;tre tr&egrave;s prudent si on l&rsquo;utilise pour le contr&ocirc;le d&rsquo;acc&egrave;s en ne se
limitant pas &agrave; interdire l&rsquo;acc&egrave;s par d&eacute;faut et en autorisant certains noms
d&rsquo;h&ocirc;te donn&eacute;s plut&ocirc;t que l&rsquo;inverse, o&ugrave; une interdiction pourrait &ecirc;tre
court-circuit&eacute;e en utilisant des formes alternatives.
</div>
<p>A partir de la version 2.4.8, les groupes nomm&eacute;s et les
r&eacute;f&eacute;rences arri&egrave;res sont extraits et enregistr&eacute;s dans
l'environnement avec leur nom en majuscules et pr&eacute;fix&eacute; par "MATCH_". Ceci permet
de r&eacute;f&eacute;rencer des URLs dans des <a href="../expr.html">expressions</a>
ou au sein de modules comme <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>. Pour
&eacute;viter toute confusion, les r&eacute;f&eacute;rences arri&egrave;res num&eacute;rot&eacute;es (non
nomm&eacute;es) sont ignor&eacute;es. Vous devez utiliser &agrave; la place des groupes
nomm&eacute;s.</p>
<pre class="prettyprint lang-config">&lt;ProxyMatch "^http://(?&lt;sitename&gt;[^/]+)"&gt;
Require ldap-group cn=%{env:MATCH_SITENAME},ou=combined,o=Example
&lt;/ProxyMatch&gt;</pre>
<h3>Voir aussi</h3>
<ul>
<li><code class="directive"><a href="#proxy">&lt;Proxy&gt;</a></code></li>
</ul>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="directive-section"><h2 id="proxymaxforwards">Directive <span id="ProxyMaxForwards">ProxyMaxForwards</span> <a title="Lien permanent" href="#proxymaxforwards" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Nombre maximum de mandataires &agrave; travers lesquelles une
requ&ecirc;te peut &ecirc;tre redirig&eacute;e</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyMaxForwards <var>nombre</var></code></td></tr>
<tr><th><a href="directive-dict.html#Default">D&eacute;faut:</a></th><td><code>ProxyMaxForwards -1</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
</table>
<p>La directive <code class="directive">ProxyMaxForwards</code> permet de
sp&eacute;cifier le nombre maximum de mandataires &agrave; travers lesquels une
requ&ecirc;te peut passer dans le cas o&ugrave; la la requ&ecirc;te ne contient pas
d'en-t&ecirc;te <code>Max-Forwards</code>. Ceci permet de se pr&eacute;munir
contre les boucles infinies de mandataires ou contre les attaques de
type d&eacute;ni de service.</p>
<div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config">ProxyMaxForwards 15</pre>
</div>
<p>Notez que la d&eacute;finition de la directive
<code class="directive">ProxyMaxForwards</code> constitue une violation du
protocole HTTP/1.1 (RFC2616), qui interdit &agrave; un mandataire de
d&eacute;finir <code>Max-Forwards</code> si le client ne l'a pas fait
lui-m&ecirc;me. Les versions pr&eacute;c&eacute;dentes d'Apache httpd la d&eacute;finissaient
syst&eacute;matiquement. Une valeur n&eacute;gative de
<code class="directive">ProxyMaxForwards</code>, y compris la valeur par
d&eacute;faut -1, implique un comportement compatible avec le protocole,
mais vous expose aux bouclages infinis.</p>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="directive-section"><h2 id="proxypass">Directive <span id="ProxyPass">ProxyPass</span> <a title="Lien permanent" href="#proxypass" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>R&eacute;f&eacute;rencer des serveurs distants depuis
l'espace d'URLs du serveur local</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyPass [<var>chemin</var>] !|<var>url</var> [<var>cl&eacute;=valeur</var>
<var>[cl&eacute;=valeur</var> ...]] [nocanon] [interpolate] [noquery]</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel, r&eacute;pertoire</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
<tr><th><a href="directive-dict.html#Compatibility">Compatibilit&eacute;:</a></th><td>Les Sockets de style Unix (Unix Domain Socket - UDS) sont support&eacute;s &agrave; partir
de la version 2.4.7 du serveur HTTP Apache</td></tr>
</table>
<p>Cette directive permet de r&eacute;f&eacute;rencer des serveurs distants depuis
l'espace d'URLs du serveur local ; le serveur
local n'agit pas en tant que mandataire au sens conventionnel, mais
plut&ocirc;t comme miroir du serveur distant. Le serveur local est
souvent nomm&eacute; <dfn>mandataire inverse</dfn> ou
<dfn>passerelle</dfn>. L'argument <var>chemin</var> est le nom d'un
chemin virtuel local ; <var>url</var> est une URL partielle pour le
serveur distant et ne doit pas contenir de cha&icirc;ne d'arguments.</p>
<div class="note">Il est fortement recommand&eacute; de revoir le concept de <a href="#workers">Worker</a> avant d'aller plus loin.</div>
<div class="note">Cette directive n'est pas support&eacute;e au sein des sections <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code>, <code class="directive"><a href="../mod/core.html#if">&lt;If&gt;</a></code> et <code class="directive"><a href="../mod/core.html#files">&lt;Files&gt;</a></code>.</div>
<div class="warning">En g&eacute;n&eacute;ral, la directive <code class="directive"><a href="#proxyrequests">ProxyRequests</a></code> doit &ecirc;tre d&eacute;finie &agrave;
<strong>off</strong> lorsqu'on utilise la directive
<code class="directive">ProxyPass</code>.</div>
<p>Les sockets de style Unix sont support&eacute;s &agrave; partir de la version
2.4.7 du serveur HTTP Apache ; pour utiliser cette fonctionnalit&eacute;,
il suffit d'utiliser une URL cible pr&eacute;fix&eacute;e par
<code>unix:/path/lis.sock|</code>. Par exemple, pour mandater HTTP
et cibler l'UDS /home/www.socket, vous devez utiliser
<code>unix:/home/www.socket|http://localhost/whatever/</code>. Comme
le socket est local, le nom d'h&ocirc;te utilis&eacute; (ici
<code>localhost</code>) peut &ecirc;tre sujet &agrave; discussion, mais il est
transmis dans l'en-t&ecirc;te Host: de la requ&ecirc;te.</p>
<div class="note">Le chemin associ&eacute; &agrave; l'URL
<code>unix:</code> tient compte de la directive
<code class="directive">DefaultRuntimeDir</code>.</div>
<div class="note">Afin d'&eacute;viter l'&eacute;chappement du
caract&egrave;re <code>'|'</code>, la directive
<code class="directive">RewriteRule</code> doit poss&eacute;der l'option
<code>[P,NE]</code>.</div>
<p>Lorsque la directive ProxyPass est utilis&eacute;e &agrave; l'int&eacute;rieur d'une section
<code class="directive"><a href="../mod/core.html#location">&lt;Location&gt;</a></code>, le premier argument est omis et le r&eacute;pertoire
local est obtenu &agrave; partir de la section <code class="directive"><a href="../mod/core.html#location">&lt;Location&gt;</a></code>. Lorsque cette directive est utilis&eacute;e en
dehors d'une section <code class="directive"><a href="../mod/core.html#location">&lt;Location&gt;</a></code> ou <code class="directive"><a href="../mod/core.html#locationmatch">&lt;LocationMatch&gt;</a></code>, l'argument <var>chemin</var> est
requis. Il en sera de m&ecirc;me dans une section <code class="directive"><a href="../mod/core.html#locationmatch">&lt;LocationMatch&gt;</a></code> ; cependant, ProxyPass n'interpr&egrave;te
pas les expressions rationnelles, et il sera ici n&eacute;cessaire d'utiliser la
directive <code class="directive">ProxyPassMatch</code> &agrave; la place.</p>
<p>Supposons que le serveur local a pour adresse
<code>http://example.com/</code> ; alors la ligne</p>
<pre class="prettyprint lang-config">&lt;Location "/mirror/foo/"&gt;
ProxyPass "http://backend.example.com/"
&lt;/Location&gt;</pre>
<p>va convertir en interne toute requ&ecirc;te pour
<code>http://example.com/mirror/foo/bar</code> en une requ&ecirc;te
mandat&eacute;e pour <code>http://backend.example.com/bar</code>.</p>
<p>Si vous avez besoin d'un configuration de mandataire inverse plus
souple, reportez-vous &agrave; la documentation de la directive <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> et son drapeau
<code>[P]</code>.</p>
<p>La syntaxe alternative suivante est valide, bien qu'elle puisse
induire une d&eacute;gradation des performances lorsqu'elle est
pr&eacute;sente en tr&egrave;s grand nombre. Elle poss&egrave;de l'avantage de
permettre un contr&ocirc;le dynamique via l'interface <a href="mod_proxy_balancer.html#balancer_manager">Balancer Manager</a> :</p>
<pre class="prettyprint lang-config">ProxyPass "/mirror/foo/" "http://backend.example.com/"</pre>
<div class="warning">
<p>Si le premier argument se termine par un slash
<strong>/</strong>, il doit en &ecirc;tre de m&ecirc;me pour le second argument
et vice versa. Dans le cas contraire, il risque de manquer des
slashes n&eacute;cessaires dans la requ&ecirc;te r&eacute;sultante vers le serveur
d'arri&egrave;re-plan et les r&eacute;sulats ne seront pas ceux attendus.
</p>
</div>
<p>Le drapeau <code>!</code> permet de soustraire un sous-r&eacute;pertoire
du mandat inverse, comme dans l'exemple suivant :</p>
<pre class="prettyprint lang-config">&lt;Location "/mirror/foo/"&gt;
ProxyPass "http://backend.example.com/"
&lt;/Location&gt;
&lt;Location "/mirror/foo/i"&gt;
ProxyPass "!"
&lt;/Location&gt;</pre>
<pre class="prettyprint lang-config">ProxyPass "/mirror/foo/i" "!"
ProxyPass "/mirror/foo" "http://backend.example.com"</pre>
<p>va mandater toutes les requ&ecirc;tes pour <code>/mirror/foo</code>
vers <code>backend.example.com</code>, <em>sauf</em> les requ&ecirc;tes
pour <code>/mirror/foo/i</code>.</p>
<p>M&eacute;langer plusieurs configurations ProxyPass dans diff&eacute;rents contextes ne
fonctionne pas :</p>
<pre class="prettyprint lang-config">ProxyPass "/mirror/foo/i" "!"
&lt;Location "/mirror/foo/"&gt;
ProxyPass "http://backend.example.com/"
&lt;/Location&gt;</pre>
<p>Dans ce cas, une requ&ecirc;te pour <code>/mirror/foo/i</code> sera tout de
m&ecirc;me mandat&eacute;e car c'est la directive <code class="directive">ProxyPass</code> de la
section Location qui sera &eacute;valu&eacute;e en premier. Le fait que la directive
<code class="directive">ProxyPass</code> supporte les deux contextes serveur
principal et r&eacute;pertoire ne signifie pas que sa port&eacute;e et sa position dans le
fichier de configuration va garantir une quelconque priorit&eacute; et/ou
chronologie de prise en compte.</p>
<div class="warning"><h3>Ordre de classement des directives ProxyPass</h3>
<p>Les directives <code class="directive">ProxyPass</code> et <code class="directive"><a href="#proxypassmatch">ProxyPassMatch</a></code> sont &eacute;valu&eacute;es dans
l'ordre de leur apparition dans le fichier de configuration. La
premi&egrave;re r&egrave;gle qui correspond s'applique. Vous devez donc en
g&eacute;n&eacute;ral classer les r&egrave;gles <code class="directive">ProxyPass</code> qui entrent en conflit de
l'URL la plus longue &agrave; la plus courte. Dans le cas contraire, les
r&egrave;gles situ&eacute;es apr&egrave;s une r&egrave;gle dont l'URL correspond au d&eacute;but de
leur propre URL seront ignor&eacute;es. Notez que tout ceci est en
relation avec le partage de workers.</p>
</div>
<div class="warning"><h3>Chronologie de prise en compte des directives
ProxyPass au sein des sections Locations</h3>
<p>On ne peut placer qu'une seule directive <code class="directive">ProxyPass</code> dans une section <code class="directive"><a href="../mod/core.html#location">Location</a></code>, et c'est la derni&egrave;re section
<code class="directive"><a href="../mod/core.html#location">Location</a></code> correspondante qui
l'emportera, suivant en cela les r&egrave;gles standards de <a href="../sections.html#merging">fusion des sections</a>. Placez les
sections <code class="directive"><a href="../mod/core.html#location">Location</a></code> les plus
sp&eacute;cifiques <em>apr&egrave;s</em> les moins sp&eacute;cifiques afin de s'assurer que la
directive <code class="directive">ProxyPass</code> attendue
s'applique.</p>
</div>
<div class="warning"><h3>Exclusions et variable d'environnement no-proxy</h3>
<p>Les exclusions doivent se situer <em>avant</em>
les directives <code class="directive">ProxyPass</code> g&eacute;n&eacute;rales. A partir de la
version 2.4.26 du serveur HTTP Apache, la variable
d'environnement "no-proxy" est une alternative aux exclusions et constitue
le seul moyen de configurer une exclusion pour une directive
<code class="directive">ProxyPass</code> dans le contexte d'une section <code class="directive"><a href="../mod/core.html#location">Location</a></code>. Cette variable doit &ecirc;tre d&eacute;finie via
la directive <code class="directive"><a href="../mod/mod_setenvif.html#setenvif">SetEnvIf</a></code> car la
directive <code class="directive"><a href="../mod/mod_env.html#setenv">SetEnv</a></code> n'est pas &eacute;valu&eacute;e
assez t&ocirc;t.</p>
</div>
<p><strong>ProxyPass <code>cl&eacute;=valeur</code> Param&egrave;tres</strong></p>
<p>Depuis la version 2.1 du serveur HTTP Apache, mod_proxy supporte
les groupements de connexions vers un serveur d'arri&egrave;re-plan. Les
connexions cr&eacute;&eacute;es &agrave; la demande peuvent &ecirc;tre enregistr&eacute;es dans un
groupement pour une utilisation ult&eacute;rieure. La taille du groupe
ainsi que d'autres caract&eacute;ristiques peuvent &ecirc;tre d&eacute;finies via la
directive <code class="directive">ProxyPass</code> au moyen de param&egrave;tres
<code>cl&eacute;=valeur</code> dont la description fait l'objet du tableau
ci-dessous.</p>
<div class="warning"><h3>Nombre maximum de connexions vers
l'arri&egrave;re-plan</h3>
<p>Par d&eacute;faut, mod_proxy permet et met en r&eacute;serve le
nombre maximum de connexions pouvant &ecirc;tre utilis&eacute;es simultan&eacute;ment par le
processus enfant concern&eacute; du serveur web. Le param&egrave;tre <code>max</code>
permet de r&eacute;duire cette valeur par d&eacute;faut. Le jeu de connexions est maintenu
au niveau de chaque processus enfant du serveur web, <code>max</code> et les
autres r&eacute;glages n'&eacute;tant pas coordonn&eacute;s entre ces diff&eacute;rents processus, sauf
bien entendu lorsqu'un seul processus enfant n'est autoris&eacute; par la
configuration ou le MPM utilis&eacute;.</p> </div>
<div class="note"><h3>Mise en commun des connexions avec le MPM prefork</h3>
<p>Avec le MPM prefork, les connexions avec les serveurs dorsaux ne sont pas
mises en commun (chaque processus enfant g&egrave;re une connexion &agrave; la fois). Les
param&egrave;tres <code>acquire</code> et <code>ttl</code> qui contr&ocirc;lent le
comportement des pools de connexions n'ont aucun effet si on utilise
prefork. Les param&egrave;tres de dimensionnement <code>min</code>,
<code>smax</code> et <code>hmax</code> sont eux aussi ignor&eacute;s.</p>
</div>
<p>Le param&egrave;tre <code>ttl</code>, quant &agrave; lui, permet de d&eacute;finir une dur&eacute;e
de vie optionnelle ; les connexions qui n'ont pas &eacute;t&eacute; utilis&eacute;es pendant au
moins <code>ttl</code> secondes seront ferm&eacute;es. <code>ttl</code> permet
aussi d'emp&ecirc;cher l'utilisation d'une connexion susceptible d'&ecirc;tre ferm&eacute;e
suite &agrave; une fin de vie de connexion persistante sur le serveur
d'arri&egrave;re-plan.</p>
<div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config">ProxyPass "/example" "http://backend.example.com" max=20 ttl=120 retry=300</pre>
</div>
<table class="bordered"><tr><th>Param&egrave;tres du worker (directive BalancerMember)</th></tr></table>
<table>
<tr><th>Param&egrave;tre</th>
<th>D&eacute;faut</th>
<th>Description</th></tr>
<tr><td>min</td>
<td>0</td>
<td>Nombre minimum d'entr&eacute;es dans le pool de connexions,
distinct du nombre de connexions effectif. La valeur par d&eacute;faut
ne doit &ecirc;tre modifi&eacute;e que dans des circonstances particuli&egrave;res
o&ugrave; la m&eacute;moire associ&eacute;e aux connexions avec le serveur
d'arri&egrave;re-plan doit &ecirc;tre pr&eacute;allou&eacute;e ou r&eacute;serv&eacute;e dans le tas.</td></tr>
<tr><td>max</td>
<td>1...n</td>
<td>Nombre maximum de connexions autoris&eacute;es vers le serveur
d'arri&egrave;re-plan. La valeur par d&eacute;faut correspond au nombre de
threads par processus pour le MPM (Module Multi Processus)
actif. La valeur sera toujours 1 pour le MPM Prefork, alors
qu'elle d&eacute;pendra de la d&eacute;finition de la directive
<code class="directive">ThreadsPerChild</code> pour les autres MPMs.</td></tr>
<tr><td>smax</td>
<td>max</td>
<td>Les entr&eacute;es du pool de connexions conserv&eacute;es au del&agrave; de
cette limite sont lib&eacute;r&eacute;es au cours de certaines op&eacute;rations si
elles n'ont pas &eacute;t&eacute; utilis&eacute;es au cours de leur dur&eacute;e de vie,
d&eacute;finie par le param&egrave;tre <code>ttl</code>. Si l'entr&eacute;e du pool
de connexions est associ&eacute;e &agrave; une connexion, cette derni&egrave;re sera
ferm&eacute;e. La valeur par d&eacute;faut ne doit &ecirc;tre modifi&eacute;e que dans des
circonstances particuli&egrave;res o&ugrave; les entr&eacute;es du pool de connexions
et toutes connexions associ&eacute;es qui ont d&eacute;pass&eacute; leur dur&eacute;e de vie
doivent &ecirc;tre lib&eacute;r&eacute;es ou ferm&eacute;es de mani&egrave;re plus autoritaire.</td></tr>
<tr><td>acquire</td>
<td>-</td>
<td>Cette cl&eacute; permet de d&eacute;finir le d&eacute;lai maximum d'attente pour
une connexion libre dans le jeu de connexions, en millisecondes.
S'il n'y a pas de connexion libre dans le jeu, Apache httpd renverra
l'&eacute;tat <code>SERVER_BUSY</code> au client.
</td></tr>
<tr><td>connectiontimeout</td>
<td>timeout</td>
<td>D&eacute;lai d'attente d'une connexion en secondes.
La dur&eacute;e en secondes pendant laquelle Apache httpd va attendre pour
l'&eacute;tablissement d'une connexion vers le serveur d'arri&egrave;re-plan.
Le d&eacute;lai peut &ecirc;tre sp&eacute;cifi&eacute; en millisecondes en ajoutant le
suffixe ms. Utilise la syntaxe <a href="directive-dict.html#Syntax">time-interval</a>.
</td></tr>
<tr><td>disablereuse</td>
<td>Off</td>
<td>Vous pouvez utiliser cette cl&eacute; pour forcer mod_proxy &agrave;
fermer imm&eacute;diatement une connexion vers le serveur
d'arri&egrave;re-plan apr&egrave;s utilisation, et ainsi d&eacute;sactiver le jeu de
connexions permanentes vers ce serveur. Ceci peut s'av&eacute;rer utile
dans des situations o&ugrave; un pare-feu situ&eacute; entre Apache httpd et le
serveur d'arri&egrave;re-plan (quelque soit le protocole) interrompt
des connexions de mani&egrave;re silencieuse, ou lorsque le serveur
d'arri&egrave;re-plan lui-m&ecirc;me est accessible par rotation de DNS
(round-robin DNS). Lorsque la r&eacute;utilisation des connexions est activ&eacute;e,
chaque domaine d'arri&egrave;re-plan n'est r&eacute;solu (via une requ&ecirc;te DNS) qu'une
seule fois par chaque processus enfant et mis en cache pour toutes les
connexions ult&eacute;rieures jusqu'au recyclage du processus concern&eacute;.
Pour d&eacute;sactiver la r&eacute;utilisation du jeu de
connexions, d&eacute;finissez cette cl&eacute; &agrave; <code>On</code>.
</td></tr>
<tr><td>enablereuse</td>
<td>On</td>
<td>Fournie &agrave; l'intention des gestionnaires de projet
qui n&eacute;cessitent un accord pour la r&eacute;utilisation des connexions
(tels que <code class="module"><a href="../mod/mod_proxy_fcgi.html">mod_proxy_fcgi</a></code>),
cette option est l'inverse de l'option 'disablereuse' ci-dessus.
</td></tr>
<tr><td>flushpackets</td>
<td>off</td>
<td>Permet de d&eacute;finir si le module mandataire doit vider
automatiquement le tampon de sortie apr&egrave;s chaque tron&ccedil;on de
donn&eacute;es. 'off' signifie que le tampon sera vid&eacute; si n&eacute;cessaire,
'on' que le tampon sera vid&eacute; apr&egrave;s chaque envoi d'un
tron&ccedil;on de donn&eacute;es, et 'auto' que le tampon sera vid&eacute; apr&egrave;s un
d&eacute;lai de 'flushwait' millisecondes si aucune entr&eacute;e n'est re&ccedil;ue.
Actuellement, cette cl&eacute; n'est support&eacute;e que par mod_proxy_ajp et
mod_proxy_fcgi.
</td></tr>
<tr><td>flushwait</td>
<td>10</td>
<td>Le d&eacute;lai d'attente pour une entr&eacute;e additionnelle, en
millisecondes, avant le vidage du tampon en sortie dans le cas
o&ugrave; 'flushpackets' est &agrave; 'auto'. Utilise la syntaxe <a href="directive-dict.html#Syntax">time-interval</a>.
</td></tr>
<tr><td>iobuffersize</td>
<td>8192</td>
<td>Permet de d&eacute;finir la taille du tampon d'entr&eacute;es/sorties du
bloc-notes interne. Cette cl&eacute; vous permet d'outrepasser la
directive <code class="directive">ProxyIOBufferSize</code> pour un
serveur cible sp&eacute;cifique. La valeur doit &ecirc;tre au minimum 512 ou d&eacute;finie
&agrave; 0 pour la valeur par d&eacute;faut du syst&egrave;me de 8192.
</td></tr>
<tr><td>responsefieldsize</td>
<td>8192</td>
<td>Contr&ocirc;le la taille du tampon pour le champ de la r&eacute;ponse mandat&eacute;e.
Cette taille doit &ecirc;tre au moins &eacute;gale &agrave; la taille attendue du plus grand
en-t&ecirc;te d'une r&eacute;ponse mandat&eacute;e. Une valeur de 0 implique l'utilisation
de la valeur par d&eacute;faut du syst&egrave;me, &agrave; savoir 8192 octets.<br>
Disponible &agrave; partir de la version 2.4.34 du serveur HTTP Apache.
</td></tr>
<tr><td>keepalive</td>
<td>Off</td>
<td><p>Cette cl&eacute; doit &ecirc;tre utilis&eacute;e lorsque vous avez un pare-feu
entre Apache httpd et le serveur d'arri&egrave;re-plan, et si ce dernier tend
&agrave; interrompre les connexions inactives. Cette cl&eacute; va faire en
sorte que le syst&egrave;me d'exploitation envoie des messages
<code>KEEP_ALIVE</code> sur chacune des connexions inactives et
ainsi &eacute;viter la fermeture de la connexion par le pare-feu.
Pour conserver les connexions persistantes, definissez cette
propri&eacute;t&eacute; &agrave; <code>On</code>.</p>
<p>La fr&eacute;quence de v&eacute;rification des connexions TCP persistantes
initiale et subs&eacute;quentes d&eacute;pend de la configuration globale de l'OS,
et peut atteindre 2 heures. Pour &ecirc;tre utile, la fr&eacute;quence configur&eacute;e
dans l'OS doit &ecirc;tre inf&eacute;rieure au seuil utilis&eacute; par le pare-feu. Utilise la
syntaxe <a href="directive-dict.html#Syntax">time-interval</a>.</p>
</td></tr>
<tr><td>lbset</td>
<td>0</td>
<td>D&eacute;finit le groupe de r&eacute;partition de charge dont le serveur cible
est membre. Le r&eacute;partiteur de charge va essayer tous les membres
d'un groupe de r&eacute;partition de charge de num&eacute;ro inf&eacute;rieur avant
d'essayer ceux dont le groupe poss&egrave;de un num&eacute;ro sup&eacute;rieur.
</td></tr>
<tr><td>ping</td>
<td>0</td>
<td>Avec la cl&eacute; Ping, le serveur web va "tester" la connexion
vers le serveur d'arri&egrave;re-plan avant de transmettre la requ&ecirc;te.
Pour les valeurs n&eacute;gatives, le test est une simple v&eacute;rification
de socket, alors que pour les valeurs positives, il s'agit d'une
v&eacute;rification plus approfondie d&eacute;pendant du protocole.
Avec AJP, <code class="module"><a href="../mod/mod_proxy_ajp.html">mod_proxy_ajp</a></code> envoie une requ&ecirc;te
<code>CPING</code> sur la connexion ajp13 (impl&eacute;ment&eacute; sur Tomcat
3.3.2+, 4.1.28+ et 5.0.13+). Avec HTTP,
<code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code> envoie <code>100-Continue</code>
au serveur d'arri&egrave;re-plan (seulement avecHTTP/1.1 - pour les
serveurs d'arri&egrave;re-plan non HTTP/1.1, cette cl&eacute; ne produit
aucun effet). Dans les deux cas, ce param&egrave;tre correspond au
d&eacute;lai en secondes pour l'attente de la r&eacute;ponse. Cette
fonctionnalit&eacute; a &eacute;t&eacute; ajout&eacute;e pour &eacute;viter les probl&egrave;mes avec les
serveurs d'arri&egrave;re-plan bloqu&eacute;s ou surcharg&eacute;s.
Le trafic
r&eacute;seau peut s'en trouver augment&eacute; en fonctionnement normal, ce
qui peut poser probl&egrave;me, mais peut s'en trouver diminu&eacute; dans les
cas o&ugrave; les noeuds de cluster sont arr&ecirc;t&eacute;s ou
surcharg&eacute;s. Le d&eacute;lai peut
aussi &ecirc;tre d&eacute;fini en millisecondes en ajoutant le suffixe
ms. Utilise la syntaxe <a href="directive-dict.html#Syntax">time-interval</a>.
</td></tr>
<tr><td>receivebuffersize</td>
<td>0</td>
<td>D&eacute;finit la taille du tampon r&eacute;seau explicite (TCP/IP) pour
les connexions mandat&eacute;es. Cette cl&eacute; vous permet d'outrepasser la
directive <code class="directive">ProxyReceiveBufferSize</code> pour un
serveur cible sp&eacute;cifique. Sa valeur doit &ecirc;tre au minimum 512 ou d&eacute;finie
&agrave; 0 pour la valeur par d&eacute;faut du syst&egrave;me.
</td></tr>
<tr><td>redirect</td>
<td>-</td>
<td>Route pour la redirection du serveur cible. Cette valeur est en
g&eacute;n&eacute;ral d&eacute;finie dynamiquement pour permettre une suppression
s&eacute;curis&eacute;e du noeud du cluster. Si cette cl&eacute; est d&eacute;finie, toutes
les requ&ecirc;tes sans identifiant de session seront redirig&eacute;es vers
le membre de groupe de r&eacute;partition de charge dont la route
correspond &agrave; la valeur de la cl&eacute;.
</td></tr>
<tr><td>retry</td>
<td>60</td>
<td>D&eacute;lai entre deux essais du serveur cible du jeu de connexions en
secondes. Si le serveur cible du jeu de connexions vers le serveur
d'arri&egrave;re-plan est dans un &eacute;tat d'erreur, Apache httpd ne redirigera
pas de requ&ecirc;te vers ce serveur avant l'expiration du d&eacute;lai
sp&eacute;cifi&eacute;. Ceci permet d'arr&ecirc;ter le serveur d'arri&egrave;re-plan pour
maintenance, et de le remettre en ligne plus tard. Une valeur de
0 implique de toujours essayer les serveurs cibles dans un &eacute;tat d'erreur
sans d&eacute;lai. Utilise la syntaxe <a href="directive-dict.html#Syntax">time-interval</a>.
</td></tr>
<tr><td>route</td>
<td>-</td>
<td>La route du serveur cible lorsqu'il est utilis&eacute; au sein d'un
r&eacute;partiteur de charge. La route est une valeur ajout&eacute;e &agrave;
l'identifiant de session.
</td></tr>
<tr><td><a name="status_table">status</a></td>
<td>-</td>
<td>Valeur constitu&eacute;e d'une simple lettre et d&eacute;finissant l'&eacute;tat
initial de ce serveur cible.
<table class="bordered">
<tr><td><code>D</code></td><td>le serveur cible est
d&eacute;sactiv&eacute; et n'accepte aucune requ&ecirc;te ; sa
r&eacute;activation sera automatiquement relanc&eacute;e.</td></tr>
<tr><td><code>S</code></td><td>le serveur cible est arr&ecirc;t&eacute;
; il n'accepte plus de requ&ecirc;te et sa r&eacute;activation ne sera pas
automatiquement relanc&eacute;e.</td></tr>
<tr><td><code>I</code></td><td>le serveur cible est en mode "erreurs ignor&eacute;es",
et sera toujours consid&eacute;r&eacute; comme disponible.</td></tr>
<tr><td><code>R</code></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>le serveur cible est en mode d'attente et ne sera
utilis&eacute; que si aucun autre serveur ou rempla&ccedil;ant &agrave; chaud n'est
disponible dans le jeu de serveurs cibles.</td></tr>
<tr><td><code>E</code></td><td>le serveur cible est en erreur.</td></tr>
<tr><td><code>N</code></td><td>le serveur cible est en mode vidage, n'acceptera que
les sessions persistantes qui lui appartiennent, et refusera
toutes les autres requ&ecirc;tes.</td></tr>
</table>
Une valeur d'&eacute;tat peut &ecirc;tre d&eacute;finie (ce qui
correspond au comportement par d&eacute;faut) en pr&eacute;fixant la valeur
par '+', ou annul&eacute;e en pr&eacute;fixant la valeur par '-'. Ainsi, la
valeur 'S-E' d&eacute;finit l'&eacute;tat de ce serveur cible &agrave; "arr&ecirc;t&eacute;" et supprime
le drapeau "en-erreur".
</td></tr>
<tr><td>timeout</td>
<td><code class="directive"><a href="#proxytimeout">ProxyTimeout</a></code></td>
<td>D&eacute;lai d'attente du socket en secondes. Le nombre de
secondes pendant lesquelles Apache httpd attend l'envoi de
donn&eacute;es vers le serveur d'arri&egrave;re-plan. Utilise la syntaxe <a href="directive-dict.html#Syntax">time-interval</a>.
</td></tr>
<tr><td>ttl</td>
<td>-</td>
<td>Dur&eacute;e de vie des connexions inactives et des entr&eacute;es du pool
de connexions associ&eacute;es en secondes. Une fois cette
limite atteinte, une connexion ne sera pas r&eacute;utilis&eacute;e ; elle
sera ferm&eacute;e apr&egrave;s un d&eacute;lai variable. Utilise la syntaxe <a href="directive-dict.html#Syntax">time-interval</a>.
</td></tr>
<tr><td>flusher</td>
<td>flush</td>
<td><p>Le fournisseur utilis&eacute; par <code class="module"><a href="../mod/mod_proxy_fdpass.html">mod_proxy_fdpass</a></code>.
Se r&eacute;f&eacute;rer &agrave; la documentation de ce module pour plus de d&eacute;tails.</p>
</td></tr>
<tr><td>secret</td>
<td>-</td>
<td><p>Le mot de passe utilis&eacute; par <code class="module"><a href="../mod/mod_proxy_ajp.html">mod_proxy_ajp</a></code>. Voir
la documentation de ce module pour plus de d&eacute;tails.</p>
</td></tr>
<tr><td><a id="upgrade" name="upgrade">upgrade</a></td>
<td>-</td>
<td><p>Protocole pris en charge par <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code> ou
<code class="module"><a href="../mod/mod_proxy_wstunnel.html">mod_proxy_wstunnel</a></code> pour le m&eacute;canisme de promotion de
protocole HTTP lors d'une n&eacute;gociation du client/navigateur HTTP (en
accord avec <a href="https://www.rfc-editor.org/rfc/rfc9110#name-upgrade">RFC 9110</a> - Upgrade). Voir la
note <a href="#protoupgrade">Promotion de protocole</a> ci-dessous</p>
</td></tr>
<tr><td>mapping</td>
<td>-</td>
<td><p>Type de mappage entre le <var>chemin</var> et l'<var>url</var>.
D&eacute;termine la normalisation et/ou le (non-)d&eacute;codage que
<code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> appliquera au <var>chemin de l'uri</var>
demand&eacute; avant de rechercher une correspondance avec le <var>chemin</var>.
Si un mappage correspond, il est appliqu&eacute; au <var>chemin de l'uri</var>
de fa&ccedil;on &agrave; ce que tous les contextes de r&eacute;pertoire qui utilisent un
chemin (comme <code>&lt;Location&gt;</code>) fassent l'objet d'une
recherche de correspondance en utilisant le m&ecirc;me mappage.</p>
<p><code>mapping=encoded</code> emp&ecirc;che le d&eacute;codage des caract&egrave;res %
contenus dans le <var>chemin de l'uri</var> de fa&ccedil;on &agrave; ce que l'on
puisse par exemple utiliser des configurations telles que&nbsp;:</p>
<pre class="prettyprint lang-config">ProxyPass "/special%3Fsegment" "https://example.com/special%3Fsegment" mapping=encoded</pre>
<pre class="prettyprint lang-config">&lt;Location "/special%3Fsegment"&gt;
Require ip 172.17.2.0/24
&lt;/Location&gt;</pre>
<p><code>mapping=servlet</code> se r&eacute;f&egrave;re &agrave; la normalisation d&eacute;finie par
la sp&eacute;cification de la Servlet qui sera par exemple appliqu&eacute;e par Apache
Tomcat pour les conteneurs de servlet (en particulier, les param&egrave;tres du
chemin sont ignor&eacute;s pour le mappage). Un <var>chemin d'uri</var> comme
<code>/some;foo/path</code> sera alors mapp&eacute; comme
<code>/some/path</code> et correspondra donc &agrave; tout ce qui suit sans
tenir compte des param&egrave;tres du chemin demand&eacute;&nbsp;:</p>
<pre class="prettyprint lang-config">ProxyPass "/some/path" "https://servlet.example.com/some/path" mapping=servlet</pre>
<pre class="prettyprint lang-config">&lt;Location "/some/path"&gt;
Require valid-user
&lt;/Location&gt;</pre>
<div class="note"><h3>Note</h3>
<p>Il est recommand&eacute; d'utiliser le m&ecirc;me mappage c&ocirc;t&eacute; Apache httpd
que celui utilis&eacute; c&ocirc;t&eacute; arri&egrave;re-plan. Par exemple, lors de la
configuration des autorisations dans les sections
<code>&lt;Location&gt;</code> pour des chemins mapp&eacute;s par
<code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> comme conteneurs de servlet (comme les
applications s'ex&eacute;cutant sous Apache Tomcat), on doit utiliser la
d&eacute;finition <code>mapping=servlet</code> pour &eacute;viter que les
param&egrave;tres du chemin et similaires n'interf&egrave;rent avec les
autorisations qui doivent &ecirc;tre d&eacute;finies par Apache httpd.</p>
</div>
</td></tr>
<tr><td><a id="addressttl" name="addressttl">addressttl</a></td>
<td>-1</td>
<td><p>Dur&eacute;e de vie (TTL) en secondes des r&eacute;solutions DNS de l'adresse
du serveur d'arri&egrave;re-plan dans le cache.
-1 signifie jusqu'au red&eacute;marrage de Apache httpd.</p>
</td></tr>
<tr><td><a id="multipathtcp" name="multipathtcp">multipathtcp</a></td>
<td>Off</td>
<td><p>Active/D&eacute;sactive l'utilisation de <a href="https://mptcp.dev">Multipath TCP (MPTCP)</a></p>
</td></tr>
</table>
<p>Si l'URL de la directive Proxy d&eacute;bute par
<code>balancer://</code> (par exemple:
<code>balancer://cluster</code>, toute information relative au
chemin est ignor&eacute;e), alors un serveur cible virtuel ne communiquant pas
r&eacute;ellement avec le serveur d'arri&egrave;re-plan sera cr&eacute;&eacute;. Celui-ci sera
en fait responsable de la gestion de plusieurs serveurs cibles "r&eacute;els". Dans
ce cas, un jeu de param&egrave;tres particuliers s'applique &agrave; ce serveur cible
virtuel. Voir <code class="module"><a href="../mod/mod_proxy_balancer.html">mod_proxy_balancer</a></code> pour plus
d'informations &agrave; propos du fonctionnement du r&eacute;partiteur de
charge.
</p>
<table class="bordered"><tr><th>Param&egrave;tres du r&eacute;partiteur</th></tr></table>
<table>
<tr><th>Param&egrave;tre</th>
<th>D&eacute;faut</th>
<th>Description</th></tr>
<tr><td>lbmethod</td>
<td>byrequests</td>
<td>M&eacute;thode de r&eacute;partition de charge utilis&eacute;e. Permet de
s&eacute;lectionner la m&eacute;thode de planification de la r&eacute;partition de
charge &agrave; utiliser. La valeur est soit <code>byrequests</code>,
pour effectuer un d&eacute;compte de requ&ecirc;tes pond&eacute;r&eacute;es, soit
<code>bytraffic</code>, pour effectuer une r&eacute;partition en
fonction du d&eacute;compte des octets transmis, soit
<code>bybusyness</code>, pour effectuer une r&eacute;partition en
fonction des requ&ecirc;tes en attente. La valeur par d&eacute;faut est
<code>byrequests</code>.
</td></tr>
<tr><td>maxattempts</td>
<td>1 de moins que le nombre de workers, ou 1 avec un seul
worker</td>
<td>Nombre maximum d'&eacute;checs avant abandon.
</td></tr>
<tr><td>nofailover</td>
<td>Off</td>
<td>Si ce param&egrave;tre est d&eacute;fini &agrave; <code>On</code>, la session va
s'interrompre si le serveur cible est dans un &eacute;tat d'erreur ou
d&eacute;sactiv&eacute;. D&eacute;finissez ce param&egrave;tre &agrave; <code>On</code> si le serveur
d'arri&egrave;re-plan ne supporte pas la r&eacute;plication de session.
</td></tr>
<tr><td>stickysession</td>
<td>-</td>
<td>Nom de session persistant du r&eacute;partiteur. La valeur est
g&eacute;n&eacute;ralement du style <code>JSESSIONID</code> ou
<code>PHPSESSIONID</code>, et d&eacute;pend du serveur d'application
d'arri&egrave;re-plan qui supporte les sessions. Si le serveur
d'application d'arri&egrave;re-plan utilise des noms diff&eacute;rents pour
les cookies et les identifiants cod&eacute;s d'URL (comme les
conteneurs de servlet), s&eacute;parez-les par le caract&egrave;re '|'. La
premi&egrave;re partie contient le cookie et la seconde le chemin.<br>
Disponible depuis la version 2.4.4 du serveur HTTP Apache.
</td></tr>
<tr><td>stickysessionsep</td>
<td>"."</td>
<td>Permet de d&eacute;finir le caract&egrave;re de s&eacute;paration dans le cookie
de session. En effet, certains serveurs d'application d'arri&egrave;re-plan
n'utilisent pas le '.' comme caract&egrave;re de s&eacute;paration. Par
exemple, le serveur Oracle Weblogic utilise le caract&egrave;re '!'.
Cette option permet donc de d&eacute;finir le caract&egrave;re de s&eacute;paration &agrave;
une valeur appropri&eacute;e. Si elle est d&eacute;finie &agrave; 'Off', aucun
caract&egrave;re de s&eacute;paration ne sera utilis&eacute;.
</td></tr>
<tr><td>scolonpathdelim</td>
<td>Off</td>
<td>Si ce param&egrave;tre est d&eacute;fini &agrave; <code>On</code>, le caract&egrave;re
';' sera utilis&eacute; comme s&eacute;parateur de chemin de session
persistante additionnel. Ceci permet principalement de simuler
le comportement de mod_jk lorsqu'on utilise des chemins du style
<code>JSESSIONID=6736bcf34;foo=aabfa</code>.
</td></tr>
<tr><td>timeout</td>
<td>0</td>
<td>D&eacute;lai du r&eacute;partiteur en secondes. Si ce param&egrave;tre est
d&eacute;fini, sa valeur correspond &agrave; la dur&eacute;e maximale d'attente pour
un serveur cible libre. Le comportement par d&eacute;faut est de ne pas
attendre. Utilise la syntaxe <a href="directive-dict.html#Syntax">time-interval</a>.
</td></tr>
<tr><td>failonstatus</td>
<td>-</td>
<td>Une liste de codes d'&eacute;tat HTTP s&eacute;par&eacute;s par des virgules. Si
ce param&egrave;tre est pr&eacute;sent, le worker se mettra en erreur si le
serveur d'arri&egrave;re-plan renvoie un des codes d'&eacute;tat sp&eacute;cifi&eacute;s
dans la liste. La r&eacute;cup&eacute;ration du worker s'effectue comme dans
le cas des autres erreurs de worker.
</td></tr>
<tr><td>failontimeout</td>
<td>Off</td>
<td>Si ce param&egrave;tre est d&eacute;fini &agrave; "On", un d&eacute;lai d'attente
d&eacute;pass&eacute; en entr&eacute;e/sortie apr&egrave;s envoi d'une requ&ecirc;te au serveur
d'arri&egrave;re-plan va mettre le processus en &eacute;tat d'erreur. La
sortie de cet &eacute;tat d'erreur se passe de la m&ecirc;me fa&ccedil;on que pour
les autres erreurs.<br>
Disponible depuis la version 2.4.5 du serveur HTTP Apache.
</td></tr>
<tr><td>nonce</td>
<td>&lt;auto&gt;</td>
<td>Le nombre &agrave; usage unique de protection utilis&eacute; dans la page
de l'application <code>balancer-manager</code>. Par d&eacute;faut, la
protection de la page est assur&eacute;e par un nombre &agrave; usage unique
automatique &agrave; base d'UUID. Si une valeur est pr&eacute;cis&eacute;e, elle sera
utilis&eacute;e comme nombre &agrave; usage unique. La valeur
<code>None</code> d&eacute;sactive la v&eacute;rification du nombre &agrave; usage
unique.
<div class="note"><h3>Note</h3>
<p>En plus du nombre &agrave; usage unique, la page de l'application
<code>balancer-manager</code> peut &ecirc;tre prot&eacute;g&eacute;e par une ACL.</p>
</div>
</td></tr>
<tr><td>growth</td>
<td>0</td>
<td>Nombre de membres suppl&eacute;mentaires que l'on peut ajouter &agrave; ce
r&eacute;partiteur en plus de ceux d&eacute;finis au niveau de la
configuration.
</td></tr>
<tr><td>forcerecovery</td>
<td>On</td>
<td>Force la relance imm&eacute;diate de tous les membres sans tenir
compte de leur param&egrave;tre retry dans le cas o&ugrave; ils sont tous en
&eacute;tat d'erreur. Il peut cependant arriver qu'un membre d&eacute;j&agrave;
surcharg&eacute; entre dans une situation critique si la relance de
tous les membres est forc&eacute;e sans tenir compte du param&egrave;tre retry
de chaque membre. Dans ce cas, d&eacute;finissez ce param&egrave;tre &agrave;
<code>Off</code>.<br>
Disponible depuis la version 2.4.2 du serveur HTTP Apache.
</td></tr>
</table>
<p>Exemple de configuration d'un r&eacute;partiteur de charge</p>
<pre class="prettyprint lang-config">ProxyPass "/special-area" "http://special.example.com" smax=5 max=10
ProxyPass "/" "balancer://mycluster/" stickysession=JSESSIONID|jsessionid nofailover=On
&lt;Proxy balancer://mycluster&gt;
BalancerMember ajp://1.2.3.4:8009
BalancerMember ajp://1.2.3.5:8009 loadfactor=20
# Le serveur suivant est moins puissant ; on lui envoie moins de requ&ecirc;tes,
BalancerMember ajp://1.2.3.6:8009 loadfactor=5
&lt;/Proxy&gt;</pre>
<p>La d&eacute;finition de rempla&ccedil;ants &agrave; chaud permet de s'assurer qu'un nombre
d&eacute;termin&eacute; de serveurs sera toujours disponible dans le jeu de serveurs
cibles :</p>
<pre class="prettyprint lang-config">ProxyPass "/" "balancer://sparecluster/"
&lt;Proxy balancer://sparecluster&gt;
BalancerMember ajp://1.2.3.4:8009
BalancerMember ajp://1.2.3.5:8009
# Les serveurs ci-dessous sont des rempla&ccedil;ants &agrave; chaud. Pour chaque serveur
# ci-dessus qui viendrait &agrave; &ecirc;tre inutilisable (maintenance, arr&ecirc;t, non
# contactable, en erreur, etc...), un de ces rempla&ccedil;ants &agrave; chaud prendra sa
# place. Deux serveurs seront toujours disponibles pour traiter une requ&ecirc;te
# (&agrave; moins qu'un ou plusieurs rempla&ccedil;ant &agrave; chaud soit lui aussi
# indisponible).
BalancerMember ajp://1.2.3.6:8009 status=+R
BalancerMember ajp://1.2.3.7:8009 status=+R
&lt;/Proxy&gt;</pre>
<p>Configuration d'un serveur cible de r&eacute;serve qui ne sera utilis&eacute; que si
aucun autre serveur cible ou rempla&ccedil;ant &agrave; chaud n'est disponible dans le jeu
de serveurs cibles :</p>
<pre class="prettyprint lang-config">ProxyPass "/" "balancer://hotcluster/ "
&lt;Proxy balancer://hotcluster&gt;
BalancerMember ajp://1.2.3.4:8009 loadfactor=1
BalancerMember ajp://1.2.3.5:8009 loadfactor=2.25
# Le serveur suivant est en mode hot standby
BalancerMember ajp://1.2.3.6:8009 status=+H
ProxySet lbmethod=bytraffic
&lt;/Proxy&gt;</pre>
<p><strong>Mot-cl&eacute;s suppl&eacute;mentaires de ProxyPass</strong></p>
<p>Normalement, mod_proxy va mettre sous leur forme canonique les URLs
trait&eacute;es par ProxyPass. Mais ceci peut &ecirc;tre incompatible avec certains
serveurs d'arri&egrave;re-plan, et en particulier avec ceux qui utilisent
<var><a class="glossarylink" href="../glossary.html#pathinfo" title="voir glossaire">PATH_INFO</a></var>. Le mot-cl&eacute;
optionnel <var>nocanon</var> modifie ce comportement et permet de
transmettre le chemin d'URL sous sa forme brute au serveur d'arri&egrave;re-plan.
Notez que ce mot-cl&eacute; peut affecter la s&eacute;curit&eacute; de votre serveur
d'arri&egrave;re-plan, car la protection limit&eacute;e contre les attaques &agrave; base d'URL
que fournit le mandataire est alors supprim&eacute;e.</p>
<p>Par d&eacute;faut, mod_proxy inclut la cha&icirc;ne de param&egrave;tres lors de la
g&eacute;n&eacute;ration de la variable d'environnement
<var>SCRIPT_FILENAME</var>. Le mot-cl&eacute; optionnel <var>noquery</var>
(disponible &agrave; partir de la version 2.4.1) permet d'exclure cette
cha&icirc;ne.</p>
<p>Le mot-cl&eacute; optionnel <code>interpolate</code>, en combinaison avec la
directive <code class="directive"><a href="#proxypassinterpolateenv">ProxyPassInterpolateEnv</a></code>,
permet &agrave; ProxyPass d'interpoler les variables d'environnement &agrave; l'aide de la
syntaxe <var>${VARNAME}</var>. Notez que de nombreuses variables
d'environnement standard d&eacute;riv&eacute;es de CGI n'existeront pas lorsque
l'interpolation se produit ; vous devrez alors encore avoir avoir recours &agrave;
<code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> pour des r&egrave;gles complexes. Notez aussi que
l'interpolation n'est support&eacute;e dans la partie protocole/hostname/port d'une
URL que pour les variables qui sont accessibles au moment o&ugrave; la directive
est interpr&eacute;t&eacute;e (similairement &agrave; la directive <code class="directive"><a href="../mod/core.html#define">Define</a></code>). La d&eacute;termination dynamique de ces champs
peut &ecirc;tre effectu&eacute;e &agrave; l'aide de <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>. L'exemple
suivant d&eacute;crit comment utiliser <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> pour d&eacute;finir
dynamiquement le protocole &agrave; http ou https :</p>
<pre class="prettyprint lang-config">RewriteEngine On
RewriteCond %{HTTPS} =off
RewriteRule . - [E=protocol:http]
RewriteCond %{HTTPS} =on
RewriteRule . - [E=protocol:https]
RewriteRule ^/mirror/foo/(.*) %{ENV:protocol}://backend.example.com/$1 [P]
ProxyPassReverse "/mirror/foo/" "http://backend.example.com/"
ProxyPassReverse "/mirror/foo/" "https://backend.example.com/"</pre>
<div class="note"><h3><a id="protoupgrade" name="protoupgrade">Promotion de
protocole</a></h3>
<p>Depuis la version 2.4.47 du serveur HTTP Apache, la promotion de
protocole (tunneling) peut &ecirc;tre g&eacute;r&eacute; bout &agrave; bout par
<code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code> en utilisant le param&egrave;tre <var><a href="#upgrade">upgrade</a></var>.</p>
<p>Bout &agrave; bout signifie que la requ&ecirc;te de promotion de protocole en
provenance du client/navigateur est tout d'abord transmise par
<code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code> au serveur origine et que le protocole de
la connexion ne sera modifi&eacute; (et &laquo;&nbsp;tunnelis&eacute;&nbsp;&raquo; par
<code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code>) que si le serveur origine accepte/initie
la promotion (r&eacute;ponse HTTP <code>101 Switching Protocols</code>). Si le
serveur origine renvoie une r&eacute;ponse diff&eacute;rente,
<code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code> continuera la transmission en utilisant
(et en for&ccedil;ant) le protocole HTTP habituel pour cette connexion.</p>
<p>Voir <a href="#wsupgrade">Promotion de protocole vers Websocket
(versions 2.4.47 et ult&eacute;rieures)</a> pour un exemple de configuration qui
utilise<code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code>.</p>
<p>Avec les versions 2.4.46 et ant&eacute;rieures du serveur HTTP Apache (ou si
la directive <code class="directive"><a href="../mod/mod_proxy_wstunnel.html#proxywebsocketfallbacktoproxyhttp">ProxyWebsocketFallbackToProxyHttp</a></code>
des versions 2.4.48 et ult&eacute;rieures d&eacute;sactive la prise en charge par
<code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code>), voir la documentation de
<code class="module"><a href="../mod/mod_proxy_wstunnel.html">mod_proxy_wstunnel</a></code> pour la m&eacute;thode permettant de mandater
le protocole WebSocket.</p>
</div>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="directive-section"><h2 id="proxypassinherit">Directive <span id="ProxyPassInherit">ProxyPassInherit</span> <a title="Lien permanent" href="#proxypassinherit" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>H&eacute;ritage des directives ProxyPass d&eacute;finies au niveau du
serveur principal</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyPassInherit On|Off</code></td></tr>
<tr><th><a href="directive-dict.html#Default">D&eacute;faut:</a></th><td><code>ProxyPassInherit On</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
<tr><th><a href="directive-dict.html#Compatibility">Compatibilit&eacute;:</a></th><td>Disponible &agrave; partir de la version 2.4.5 du serveur
HTTP Apache.</td></tr>
</table>
<p>Cette directive permet &agrave; un serveur virtuel d'h&eacute;riter des
directives <code class="directive"><a href="#proxypass">ProxyPass</a></code> d&eacute;finies
au niveau du serveur principal. Si vous utilisez la fonctionnalit&eacute; de
modifications dynamiques du Balancer Manager, cette directive peut
causer des probl&egrave;mes et des comportements inattendus et doit donc
&ecirc;tre d&eacute;sactiv&eacute;e.</p>
<p>Les valeurs d&eacute;finies au niveau du serveur principal
constituent les valeurs par d&eacute;faut pour tous les serveurs virtuels.</p>
<p>La d&eacute;sactivation de ProxyPassInherit d&eacute;sactive aussi la
directive <code class="directive"><a href="#balancerinherit">BalancerInherit</a></code>.</p>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="directive-section"><h2 id="proxypassinterpolateenv">Directive <span id="ProxyPassInterpolateEnv">ProxyPassInterpolateEnv</span> <a title="Lien permanent" href="#proxypassinterpolateenv" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Active l'interpolation des variables d'environnement dans
les configurations de mandataires inverses</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyPassInterpolateEnv On|Off</code></td></tr>
<tr><th><a href="directive-dict.html#Default">D&eacute;faut:</a></th><td><code>ProxyPassInterpolateEnv Off</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel, r&eacute;pertoire</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
</table>
<p>Cette directive, ainsi que l'argument <code>interpolate</code> des
directives <code class="directive">ProxyPass</code>,
<code class="directive">ProxyPassReverse</code>,
<code class="directive">ProxyPassReverseCookieDomain</code> et
<code class="directive">ProxyPassReverseCookiePath</code>, permet de
configurer dynamiquement un mandataire inverse &agrave; l'aide de
variables d'environnement, ces derni&egrave;res pouvant &ecirc;tre d&eacute;finies par un
autre module comme <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>. Elle affecte les
directives <code class="directive">ProxyPass</code>,
<code class="directive">ProxyPassReverse</code>,
<code class="directive">ProxyPassReverseCookieDomain</code>, et
<code class="directive">ProxyPassReverseCookiePath</code>, en leur indiquant
de remplacer la cha&icirc;ne <code>${nom_var}</code> dans les directives
de configuration par la valeur de la variable d'environnement
<code>nom_var</code> si l'option <code>interpolate</code> est
sp&eacute;cifi&eacute;e.</p>
<p>La partie protocole/hostname/port de <code class="directive">ProxyPass</code>
peut contenir des variables, mais seulement celles qui sont accessibles au
moment o&ugrave; la directive est interpr&eacute;t&eacute;e (similairement &agrave; la directive
<code class="directive"><a href="../mod/core.html#define">Define</a></code>). Pour tous les autres cas,
utilisez plut&ocirc;t <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>.</p>
<div class="warning"><h3>Avertissement concernant les performances</h3>
<p>Laissez cette directive &agrave; off, &agrave; moins que vous n'en ayez r&eacute;ellemnt
besoin ! Par exemple, ajouter des variables &agrave;
<code class="directive">ProxyPass</code> peut entra&icirc;ner l'utilisation des serveurs
d'arri&egrave;re-plan de mod_proxy configur&eacute;s par d&eacute;faut, et ceux-ci ne permettent
pas un r&eacute;glage fin comme la r&eacute;utilisation des connexions, entre
autres...).</p> </div>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="directive-section"><h2 id="proxypassmatch">Directive <span id="ProxyPassMatch">ProxyPassMatch</span> <a title="Lien permanent" href="#proxypassmatch" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Fait correspondre des serveurs distants dans l'espace d'URL
du serveur local en utilisant des expressions rationnelles</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyPassMatch [<var>regex</var>] !|<var>url</var>
[<var>key=value</var>
<var>[key=value</var> ...]]</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel, r&eacute;pertoire</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
<tr><th><a href="directive-dict.html#Compatibility">Compatibilit&eacute;:</a></th><td>Depuis la version 2.4.47, les param&egrave;tres <var>key=value</var>
sont pris en compte lorsque le param&egrave;tre <var>url</var> contient des r&eacute;f&eacute;rences
arri&egrave;res (voir note ci-dessous).
</td></tr>
</table>
<p>Cette directive est identique &agrave; la directive <code class="directive"><a href="#proxypass">ProxyPass</a></code>, mais fait usage des
expressions rationnelles, au lieu d'une simple comparaison de
pr&eacute;fixes. L'expression rationnelle sp&eacute;cifi&eacute;e est compar&eacute;e &agrave;
l'<var>url</var>, et si elle correspond, le serveur va substituer
toute correspondance entre parenth&egrave;ses dans la cha&icirc;ne donn&eacute;e et
l'utiliser comme nouvelle <var>url</var>.</p>
<div class="note">Cette directive ne peut pas &ecirc;tre
utilis&eacute;e dans un contexte de niveau r&eacute;pertoire.</div>
<div class="warning"><h3>Correspondance de worker avec les r&eacute;f&eacute;rences
arri&egrave;res</h3>
<p>Quand <code class="directive">ProxyPassMatch</code> contient des r&eacute;f&eacute;rences
arri&egrave;res (par exemple <code>$1</code>) dans l'URL cible, chaque requ&ecirc;te
produit un URL r&eacute;solu diff&eacute;rent. Comme la recherche de correspondance des <a href="#workers">workers</a> s'effectue par URL, ces requ&ecirc;tes ne
correspondront pas au worker cr&eacute;&eacute; par cette directive et utiliseront &agrave; la
place le worker du mandataire inverse par d&eacute;faut, qui ne r&eacute;utilise pas les
connexions, ni ne met en cache les recherches DNS. Pour activer la mise en
commun des connexions, d&eacute;finissez un worker explicite pour le serveur dorsal
s&eacute;par&eacute;ment&nbsp;:</p>
<pre class="prettyprint lang-config">ProxyPass "/notused" "http://backend.example.com/" connectiontimeout=5 timeout=30
ProxyPassMatch "^/(.*\.gif)$" "http://backend.example.com/$1"</pre>
<p>La d&eacute;finition explicite du worker <code class="directive">ProxyPass</code> permet
de s'assurer que le jeu de connexions d'arri&egrave;re-plan est disponible pour les
requ&ecirc;tes <code class="directive">ProxyPassMatch</code>.</p>
</div>
<p>Supposons que le serveur local a pour adresse
<code>http://example.com/</code> ; alors</p>
<pre class="prettyprint lang-config">ProxyPassMatch "^(/.*\.gif)$" "http://backend.example.com/$1"</pre>
<p>va provoquer la conversion interne de la requ&ecirc;te locale
<code>http://example.com/foo/bar.gif</code> en une requ&ecirc;te mandat&eacute;e
pour <code>http://backend.example.com/foo/bar.gif</code>.</p>
<p>Le drapeau <code>!</code> vous permet de ne pas mandater un
sous-r&eacute;pertoire donn&eacute;.</p>
<p>Dans une section <code class="directive"><a href="../mod/core.html#locationmatch">&lt;LocationMatch&gt;</a></code>, le premier argument est omis et
l'expression rationnelle est obtenue &agrave; partir de la directive <code class="directive"><a href="../mod/core.html#locationmatch">&lt;LocationMatch&gt;</a></code>. En dehors d'une
section <code class="directive"><a href="../mod/core.html#location">&lt;Location&gt;</a></code> ou
<code class="directive"><a href="../mod/core.html#locationmatch">&lt;LocationMatch&gt;</a></code>,
l'argument <var>regex</var> est requis.</p>
<p>Si vous avez besoin d'une configuration du mandataire inverse
plus flexible, voyez la directive <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> avec le drapeau
<code>[P]</code>.</p>
<div class="note">
<h3>Substitution par d&eacute;faut</h3>
<p>Lorsque le param&egrave;tre URL n'utilise pas de r&eacute;f&eacute;rences arri&egrave;res
dans l'expression rationnelle, l'URL originale sera ajout&eacute;e au
param&egrave;tre URL.
</p>
</div>
<div class="note">
<h3>Param&egrave;tres <code>key=value</code> et <var>url</var> avec
r&eacute;f&eacute;rences arri&egrave;res</h3>
<p>Depuis la version 2.4.47, les param&egrave;tres <code>key=value</code> ne sont
plus ignor&eacute;s dans une directive <code class="directive">ProxyPassMatch</code>
lorsqu'on utilise une <var>url</var> contenant des r&eacute;f&eacute;rences arri&egrave;res.
Cependant, pour conserver le comportement pr&eacute;c&eacute;dent relatif &agrave; la
r&eacute;utilisation/conservation des connexions d'arri&egrave;re-plan (qui n'avaient
jamais &eacute;t&eacute; r&eacute;utilis&eacute;es auparavant pour ces URLs), les param&egrave;tres
<var>enablereuse</var> et <var>disablereuse</var> prendront dans ce cas
respectivement comme valeurs par d&eacute;faut <code>off</code> et
<code>on</code>. D&eacute;finir explicitement <code>enablereuse=on</code> permet
de r&eacute;utiliser les connexions, <strong>sauf si</strong> des r&eacute;f&eacute;rences
arri&egrave;res se trouvent dans la partie <code>authority</code> (nom d'h&ocirc;te
et/ou port) de l'<var>url</var> (cette condition est impos&eacute;e depuis la
version 2.4.55 du serveur HTTP Apache et provoque un avertissement au
d&eacute;marrage car ces URLs ne sont pas r&eacute;utilisables sous cette forme).</p>
</div>
<div class="warning">
<h3>Avertissement &agrave; propos de la s&eacute;curit&eacute;</h3>
<p>Lors de la construction de l'URL cible de la r&egrave;gle, il convient
de prendre en compte l'impact en mati&egrave;re de s&eacute;curit&eacute; qu'aura le
fait de permettre au client d'influencer le jeu d'URLs pour
lesquelles votre serveur agira en tant que mandataire.
Assurez-vous que la partie protocole://nom-serveur de l'URL soit
fixe, ou ne permette pas au client de l'influencer induement.</p>
</div>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="directive-section"><h2 id="proxypassreverse">Directive <span id="ProxyPassReverse">ProxyPassReverse</span> <a title="Lien permanent" href="#proxypassreverse" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Ajuste l'URL dans les en-t&ecirc;tes de la r&eacute;ponse HTTP envoy&eacute;e
par un serveur mandat&eacute; en inverse</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyPassReverse [<var>chemin</var>] <var>url</var>
[interpolate]</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel, r&eacute;pertoire</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
</table>
<p>Cette directive permet de faire en sorte qu'Apache httpd ajuste l'URL
dans les en-t&ecirc;tes <code>Location</code>,
<code>Content-Location</code> et <code>URI</code> des r&eacute;ponses de
redirection HTTP. Ceci est essentiel lorsqu'Apache httpd est utilis&eacute; en
tant que mandataire inverse (ou passerelle), afin d'&eacute;viter de
court-circuiter le mandataire inverse suite aux redirections HTTP
sur le serveur d'arri&egrave;re-plan qui restent derri&egrave;re le mandataire
inverse.</p>
<p>Seuls les en-t&ecirc;tes de r&eacute;ponse HTTP sp&eacute;cialement mentionn&eacute;s
ci-dessus seront r&eacute;&eacute;crits. Apache httpd ne r&eacute;&eacute;crira ni les autres en-t&ecirc;tes
de r&eacute;ponse, ni par d&eacute;faut les r&eacute;f&eacute;rences d'URLs dans les pages HTML. Cela
signifie que dans le cas o&ugrave; un contenu mandat&eacute; contient des
r&eacute;f&eacute;rences &agrave; des URLs absolues, elles court-circuiteront le
mandataire. Pour r&eacute;&eacute;crire un contenu HTML afin qu'il corresponde au
mandataire, vous devez charger et activer le module
<code class="module"><a href="../mod/mod_proxy_html.html">mod_proxy_html</a></code>.
</p>
<p><var>chemin</var> est le nom d'un chemin virtuel local. Il est combin&eacute;
avec le protocole, le nom d'h&ocirc;te et le port pour former le pr&eacute;fixe de
remplacement de l'en-t&ecirc;te de r&eacute;ponse concern&eacute;. Ce param&egrave;tre est en g&eacute;n&eacute;ral
identique au premier param&egrave;tre de la directive <code class="directive"><a href="#proxypass">ProxyPass</a></code>.
</p>
<p><var>url</var> est une URL partielle pour le serveur distant. Lorsque le
serveur distant envoie les en-t&ecirc;tes explicitement mentionn&eacute;s en commen&ccedil;ant
par cette URL partielle, le pr&eacute;fixe du serveur distant est remplac&eacute; par un
pr&eacute;fixe qui pointe vers le mandataire inverse. Ce param&egrave;tre est en g&eacute;n&eacute;ral
identique au second param&egrave;tre de la directive <code class="directive"><a href="#proxypass">ProxyPass</a></code>, mais il peut &ecirc;tre diff&eacute;rent si le
serveur distant utilise un protocole, nom d'h&ocirc;te, port ou chemin diff&eacute;rent dans les
en-t&ecirc;tes concern&eacute;s. Si la configuration contient une directive <code class="directive"><a href="#proxypreservehost">ProxyPreserveHost</a></code>, le nom d'h&ocirc;te de l'URL
partielle correspondra peut-&ecirc;tre d&eacute;j&agrave; au nom d'h&ocirc;te du mandataire inverse,
ce qui &eacute;vitera la recherche et le remplacament effectu&eacute;s par cette
directive.
</p>
<p>Supposons par exemple que le serveur local a pour adresse
<code>http://example.com/</code> ; alors</p>
<pre class="prettyprint lang-config">ProxyPass "/mirror/foo/" "http://backend.example.com/"
ProxyPassReverse "/mirror/foo/" "http://backend.example.com/"
ProxyPassReverseCookieDomain backend.example.com public.example.com
ProxyPassReverseCookiePath "/" "/mirror/foo/"</pre>
<p>ne va pas seulement provoquer la conversion interne d'une requ&ecirc;te
locale pour <code>http://example.com/mirror/foo/bar</code> en une
requ&ecirc;te mandat&eacute;e pour <code>http://backend.example.com/bar</code>
(la fonctionnalit&eacute; fournie par <code>ProxyPass</code>). Il va
aussi s'occuper des redirections que le serveur
<code>backend.example.com</code> envoie lorsque
<code>http://backend.example.com/bar</code> est redirig&eacute; par
celui-ci vers <code>http://backend.example.com/quux</code>, Apache
httpd corrige ceci en <code>http://example.com/mirror/foo/quux</code>
avant de faire suivre la redirection HTTP au client. Notez que le
nom d'h&ocirc;te utilis&eacute; pour construire l'URL est choisi en respectant la
d&eacute;finition de la directive <code class="directive"><a href="../mod/core.html#usecanonicalname">UseCanonicalName</a></code>.</p>
<p>Notez que la directive <code class="directive">ProxyPassReverse</code>
peut aussi &ecirc;tre utilis&eacute;e en conjonction avec la
fonctionnalit&eacute; de mandataire
(<code>RewriteRule ... [P]</code>) du module
<code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>, car elle ne d&eacute;pend pas d'une directive
<code class="directive"><a href="#proxypass">ProxyPass</a></code>
correspondante.</p>
<p>Le mot-cl&eacute; optionnel <code>interpolate</code>, utilis&eacute; en combinaison
avec la directive <code class="directive"><a href="#proxypassinterpolateenv">ProxyPassInterpolateEnv</a></code>, permet
l'interpolation des variables d'environnement sp&eacute;cifi&eacute;es en utilisant le
format <var>${VARNAME}</var>. Notez que l'interpolation n'est pas support&eacute;e
dans la partie protocole d'une URL. </p>
<p>Lorsque cette directive est utilis&eacute;e dans une section <code class="directive"><a href="../mod/core.html#location">&lt;Location&gt;</a></code>, le premier argument est
omis et le r&eacute;pertoire local est obtenu &agrave; partir de l'argument de la
directive <code class="directive"><a href="../mod/core.html#location">&lt;Location&gt;</a></code>. En
dehors d'une section <code class="directive"><a href="../mod/core.html#location">&lt;Location&gt;</a></code> ou <code class="directive"><a href="../mod/core.html#locationmatch">&lt;LocationMatch&gt;</a></code>, l'argument <var>chemin</var> est
requis. Il en est de m&ecirc;me &agrave; l'int&eacute;rieur d'une section <code class="directive"><a href="../mod/core.html#locationmatch">&lt;LocationMatch&gt;</a></code>, mais le r&eacute;sultat ne
sera probablement pas celui attendu car ProxyPassReverse va interpr&eacute;ter
l'expression rationnelle litt&eacute;ralement comme un chemin ; si besoin est dans
ce cas, d&eacute;finissez la directive ProxyPassReverse en dehors de la section, ou
dans une section <code class="directive"><a href="../mod/core.html#location">&lt;Location&gt;</a></code> s&eacute;par&eacute;e.</p>
<p>Cette directive ne peut pas &ecirc;tre plac&eacute;e dans une section
<code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code> ou
<code class="directive"><a href="../mod/core.html#files">&lt;Files&gt;</a></code>.</p>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="directive-section"><h2 id="proxypassreversecookiedomain">Directive <span id="ProxyPassReverseCookieDomain">ProxyPassReverseCookieDomain</span> <a title="Lien permanent" href="#proxypassreversecookiedomain" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Ajuste la cha&icirc;ne correspondant au domaine dans les en-t&ecirc;tes
Set-Cookie en provenance d'un serveur mandat&eacute;</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyPassReverseCookieDomain <var>domaine-interne</var>
<var>domaine-public</var> [interpolate]</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel, r&eacute;pertoire</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
</table>
<p>L'utilisation de cette directive est similaire &agrave; celle de la
directive <code class="directive"><a href="#proxypassreverse">ProxyPassReverse</a></code>,
mais au lieu de r&eacute;&eacute;crire des en-t&ecirc;tes qui contiennent des URLs, elle
r&eacute;&eacute;crit la cha&icirc;ne correspondant au domaine dans les en-t&ecirc;tes
<code>Set-Cookie</code>.</p>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="directive-section"><h2 id="proxypassreversecookiepath">Directive <span id="ProxyPassReverseCookiePath">ProxyPassReverseCookiePath</span> <a title="Lien permanent" href="#proxypassreversecookiepath" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Ajuste la cha&icirc;ne correspondant au chemin dans les en-t&ecirc;tes
Set-Cookie en provenance d'un serveur mandat&eacute;</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyPassReverseCookiePath <var>chemin-interne</var>
<var>chemin-public</var> [interpolate]</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel, r&eacute;pertoire</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
</table>
<p>
Cette directive s'av&egrave;re utile en conjonction avec la directive
<code class="directive"><a href="#proxypassreverse">ProxyPassReverse</a></code> dans les
situations o&ugrave; les chemins d'URL d'arri&egrave;re-plan correspondent &agrave; des
chemins publics sur le mandataire inverse. Cette directive permet de
r&eacute;&eacute;crire la cha&icirc;ne <code>path</code> dans les en-t&ecirc;tes
<code>Set-Cookie</code>. Si le d&eacute;but du chemin du cookie correspond &agrave;
<var>chemin-interne</var>, le chemin du cookie sera remplac&eacute; par
<var>chemin-public</var>.
</p><p>
Dans l'exemple fourni avec la directive <code class="directive"><a href="#proxypassreverse">ProxyPassReverse</a></code>, la directive :
</p>
<pre class="prettyprint lang-config">ProxyPassReverseCookiePath "/" "/mirror/foo/"</pre>
<p>
va r&eacute;&eacute;crire un cookie poss&eacute;dant un chemin d'arri&egrave;re-plan <code>/</code>
(ou <code>/example</code> ou en fait tout chemin)
en <code>/mirror/foo/</code>..
</p>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="directive-section"><h2 id="proxypreservehost">Directive <span id="ProxyPreserveHost">ProxyPreserveHost</span> <a title="Lien permanent" href="#proxypreservehost" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Utilise l'en-t&ecirc;te de requ&ecirc;te entrante Host pour la requ&ecirc;te
du mandataire</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyPreserveHost On|Off</code></td></tr>
<tr><th><a href="directive-dict.html#Default">D&eacute;faut:</a></th><td><code>ProxyPreserveHost Off</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel, r&eacute;pertoire</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
<tr><th><a href="directive-dict.html#Compatibility">Compatibilit&eacute;:</a></th><td>Utilisable
dans un contexte de r&eacute;pertoire depuis la version 2.3.3.</td></tr>
</table>
<p>Lorsqu'elle est activ&eacute;e, cette directive va transmettre l'en-t&ecirc;te
<code>Host:</code> de la requ&ecirc;te entrante vers le serveur mandat&eacute;, au lieu
du nom d'h&ocirc;te sp&eacute;cifi&eacute; par la directive <code class="directive"><a href="#proxypass">ProxyPass</a></code>.</p>
<p>Cette directive est habituellement d&eacute;finie &agrave; <code>Off</code>.
Elle est principalement utile dans les configurations particuli&egrave;res
comme l'h&eacute;bergement virtuel mandat&eacute; en masse &agrave; base de nom, o&ugrave;
l'en-t&ecirc;te Host d'origine doit &ecirc;tre &eacute;valu&eacute; par le serveur
d'arri&egrave;re-plan.</p>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="directive-section"><h2 id="proxyreceivebuffersize">Directive <span id="ProxyReceiveBufferSize">ProxyReceiveBufferSize</span> <a title="Lien permanent" href="#proxyreceivebuffersize" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Taille du tampon r&eacute;seau pour les connexions mandat&eacute;es HTTP
et FTP</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyReceiveBufferSize <var>octets</var></code></td></tr>
<tr><th><a href="directive-dict.html#Default">D&eacute;faut:</a></th><td><code>ProxyReceiveBufferSize 0</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
</table>
<p>La directive <code class="directive">ProxyReceiveBufferSize</code> permet
de sp&eacute;cifier une taille de tampon r&eacute;seau explicite (TCP/IP) pour les
connexions mandat&eacute;es HTTP et FTP, afin d'am&eacute;liorer le d&eacute;bit de
donn&eacute;es. Elle doit &ecirc;tre sup&eacute;rieure &agrave; <code>512</code> ou d&eacute;finie &agrave;
<code>0</code> pour indiquer que la taille de tampon par d&eacute;faut du
syst&egrave;me doit &ecirc;tre utilis&eacute;e.</p>
<div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config">ProxyReceiveBufferSize 2048</pre>
</div>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="directive-section"><h2 id="proxyremote">Directive <span id="ProxyRemote">ProxyRemote</span> <a title="Lien permanent" href="#proxyremote" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Mandataire distant &agrave; utiliser pour traiter certaines
requ&ecirc;tes</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyRemote <var>match</var> <var>remote-server</var> [<var>username:password</var>]</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
<tr><th><a href="directive-dict.html#Compatibility">Compatibilit&eacute;:</a></th><td>Le troisi&egrave;me argument optionnel est disponible &agrave; partir de la
version 2.5.1 du serveur HTTP Apache.</td></tr>
</table>
<p>Cette directive permet de d&eacute;finir des mandataires distants pour
ce mandataire. <var>match</var> est soit le nom d'un protocole
que supporte le serveur distant, soit une URL partielle pour
laquelle le serveur distant devra &ecirc;tre utilis&eacute;, soit <code>*</code>
pour indiquer que le serveur distant doit &ecirc;tre utilis&eacute; pour toutes
les requ&ecirc;tes. <var>remote-server</var> est une URL partielle
correspondant au serveur distant. Syntaxe : </p>
<div class="example"><p><code>
<dfn>serveur-distant</dfn> =
<var>protocole</var>://<var>nom-serveur</var>[:<var>port</var>]
</code></p></div>
<p><var>protocole</var> est effectivement le protocole &agrave; utiliser
pour communiquer avec le serveur distant ; ce module ne supporte que
<code>http</code> et <code>https</code>. Lorsqu'on utilise
<code>https</code>, les requ&ecirc;tes sont redirig&eacute;es par le mandataire
distant en utilisant la m&eacute;thode HTTP CONNECT.</p>
<div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config">ProxyRemote http://goodguys.example.com/ http://mirrorguys.example.com:8000
ProxyRemote * http://cleverproxy.localdomain
ProxyRemote ftp http://ftpproxy.mydomain:8080</pre>
</div>
<p>Dans la derni&egrave;re ligne de l'exemple, le mandataire va faire
suivre les requ&ecirc;tes FTP, encapsul&eacute;es dans une autre requ&ecirc;te mandat&eacute;e
HTTP, vers un autre mandataire capable de les traiter.</p>
<p>Cette directive supporte aussi les configurations de mandataire
inverse ; un serveur web d'arri&egrave;re-plan peut &ecirc;tre int&eacute;gr&eacute; dans
l'espace d'URL d'un serveur virtuel, m&ecirc;me si ce serveur est cach&eacute;
par un autre mandataire direct.</p>
<p>Le troisi&egrave;me argument optionnel <var>username:password</var> permet de
sp&eacute;cifier des donn&eacute;es d'authentification basiques &agrave; transmettre au mandataire
distant d&eacute;fini. Ces donn&eacute;es d'authentification seront toujoujours envoy&eacute;es
sans attendre que le mandataire distant n'effectue une demande
d'authentification. La variable d'environnement <a href="mod_proxy_http.html#env">Proxy-Chain-Auth</a> n'est plus prise en
compte si cet argument est utilis&eacute;.</p>
<div class="note"><h3>R&eacute;solution DNS et mandataires directs</h3>
<p>Lorsqu&rsquo;un mandataire direct (distant) est configur&eacute;, la r&eacute;solution DNS du
nom d&rsquo;h&ocirc;te originel/dorsal n&rsquo;est effectu&eacute;e que sur le mandataire direct.
Toute r&egrave;gle <code class="directive"><a href="#proxyblock">ProxyBlock</a></code> qui
restreint l&rsquo;acc&egrave;s &agrave; des adresses IP sp&eacute;cifiques doit &ecirc;tre d&eacute;finie sur le
mandataire direct.</p></div>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="directive-section"><h2 id="proxyremotematch">Directive <span id="ProxyRemoteMatch">ProxyRemoteMatch</span> <a title="Lien permanent" href="#proxyremotematch" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Le mandataire distant &agrave; utiliser pour traiter les requ&ecirc;tes
correspondant &agrave; une expression rationnelle</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyRemoteMatch <var>regex</var> <var>remote-server</var> [<var>username:password</var>]</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
<tr><th><a href="directive-dict.html#Compatibility">Compatibilit&eacute;:</a></th><td>Le troisi&egrave;me argument facultatif est disponible &agrave; partir de la
version 2.5.1 du serveur HTTP Apache.</td></tr>
</table>
<p>La directive <code class="directive">ProxyRemoteMatch</code> est
identique &agrave; la directive <code class="directive"><a href="#proxyremote">ProxyRemote</a></code>, &agrave; l'exception du
premier argument qui est une <a class="glossarylink" href="../glossary.html#regex" title="voir glossaire">expression
rationnelle</a> &agrave; mettre en correspondance avec l'URL de la
requ&ecirc;te.</p>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="directive-section"><h2 id="proxyrequests">Directive <span id="ProxyRequests">ProxyRequests</span> <a title="Lien permanent" href="#proxyrequests" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Active la fonctionnalit&eacute; (standard) de mandataire
direct</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyRequests On|Off</code></td></tr>
<tr><th><a href="directive-dict.html#Default">D&eacute;faut:</a></th><td><code>ProxyRequests Off</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
</table>
<p>Cette directive permet d'activer/d&eacute;sactiver la fonctionnalit&eacute; de
serveur mandataire direct d'Apache httpd. D&eacute;finir ProxyRequests &agrave;
<code>Off</code> n'interdit pas l'utilisation de la directive
<code class="directive"><a href="#proxypass">ProxyPass</a></code>.</p>
<p>Pour une configuration typique de mandataire inverse ou
passerelle, cette directive doit &ecirc;tre d&eacute;finie &agrave;
<code>Off</code>.</p>
<p>Afin d'activer la fonctionnalit&eacute; de mandataire pour des sites
HTTP et/ou FTP, les modules <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code> et/ou
<code class="module"><a href="../mod/mod_proxy_ftp.html">mod_proxy_ftp</a></code> doivent &eacute;galement &ecirc;tre charg&eacute;s dans le
serveur.</p>
<p>Pour activer la fonctionnalit&eacute; de mandataire sur les sites chiffr&eacute;s en HTTPS, le module
<code class="module"><a href="../mod/mod_proxy_connect.html">mod_proxy_connect</a></code> doit &eacute;galement &ecirc;tre charg&eacute; dans le serveur.</p>
<div class="warning"><h3>Avertissement</h3>
<p>N'activez pas la fonctionnalit&eacute; de mandataire avec la directive
<code class="directive">ProxyRequests</code> avant
d'avoir <a href="#access">s&eacute;curis&eacute; votre serveur</a>. Les serveurs
mandataires ouverts sont dangereux non seulement pour votre
r&eacute;seau, mais aussi pour l'Internet au sens large.</p>
</div>
<h3>Voir aussi</h3>
<ul>
<li><a href="#forwardreverse">Mandataires/Passerelles directs et
inverses</a></li>
</ul>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="directive-section"><h2 id="proxyset">Directive <span id="ProxySet">ProxySet</span> <a title="Lien permanent" href="#proxyset" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>D&eacute;finit diff&eacute;rents param&egrave;tres relatifs &agrave; la r&eacute;partition de
charge des mandataires et aux membres des groupes de r&eacute;partition de
charge</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxySet <var>url</var> <var>cl&eacute;=valeur [cl&eacute;=valeur ...]</var></code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel, r&eacute;pertoire</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
</table>
<p>Cette directive propose une m&eacute;thode alternative pour d&eacute;finir tout
param&egrave;tre relatif aux r&eacute;partiteurs de charge et serveurs cibles de
mandataires normalement d&eacute;finis via la directive <code class="directive"><a href="#proxypass">ProxyPass</a></code>. Si elle se trouve dans un
conteneur <code>&lt;Proxy <var>url de r&eacute;partiteur|url de
serveur cible</var>&gt;</code>, l'argument <var>url</var> n'est pas
n&eacute;cessaire. Comme effet de bord, le r&eacute;partiteur ou serveur cible respectif
est cr&eacute;&eacute;. Ceci peut s'av&eacute;rer utile pour la mise en oeuvre d'un
mandataire inverse via une directive <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> au lieu de <code class="directive"><a href="#proxypass">ProxyPass</a></code>.</p>
<div class="example"><pre class="prettyprint lang-config">&lt;Proxy balancer://hotcluster&gt;
BalancerMember http://www2.example.com:8080 loadfactor=1
BalancerMember http://www3.example.com:8080 loadfactor=2
ProxySet lbmethod=bytraffic
&lt;/Proxy&gt;</pre>
</div>
<pre class="prettyprint lang-config">&lt;Proxy http://backend&gt;
ProxySet keepalive=On
&lt;/Proxy&gt;</pre>
<pre class="prettyprint lang-config">ProxySet balancer://foo lbmethod=bytraffic timeout=15</pre>
<pre class="prettyprint lang-config">ProxySet ajp://backend:7001 timeout=15</pre>
<div class="warning"><h3>Avertissement</h3>
<p>Gardez &agrave; l'esprit qu'une m&ecirc;me cl&eacute; de param&egrave;tre peut avoir
diff&eacute;rentes significations selon qu'elle s'applique &agrave; un
r&eacute;partiteur ou &agrave; un serveur cible, et ceci est illustr&eacute; par les deux
exemples pr&eacute;c&eacute;dents o&ugrave; il est question d'un timeout.</p>
</div>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="directive-section"><h2 id="proxysourceaddress">Directive <span id="ProxySourceAddress">ProxySourceAddress</span> <a title="Lien permanent" href="#proxysourceaddress" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>D&eacute;finit l'adresse IP locale pour les connexions mandat&eacute;es
sortantes</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxySourceAddress <var>adresse</var></code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
<tr><th><a href="directive-dict.html#Compatibility">Compatibilit&eacute;:</a></th><td>Disponible depuis la version 2.3.9</td></tr>
</table>
<p>Cette directive permet de d&eacute;finir une adresse IP locale
sp&eacute;cifique &agrave; laquelle faire r&eacute;f&eacute;rence lors d'une connexion &agrave; un
serveur d'arri&egrave;re-plan.</p>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="directive-section"><h2 id="proxystatus">Directive <span id="ProxyStatus">ProxyStatus</span> <a title="Lien permanent" href="#proxystatus" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Affiche l'&eacute;tat du r&eacute;partiteur de charge du mandataire dans
mod_status</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyStatus Off|On|Full</code></td></tr>
<tr><th><a href="directive-dict.html#Default">D&eacute;faut:</a></th><td><code>ProxyStatus Off</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
</table>
<p>Cette directive permet de sp&eacute;cifier si les donn&eacute;es d'&eacute;tat du
r&eacute;partiteur de charge du mandataire doivent &ecirc;tre affich&eacute;es via la
page d'&eacute;tat du serveur du module <code class="module"><a href="../mod/mod_status.html">mod_status</a></code>.</p>
<div class="note"><h3>Note</h3>
<p>L'argument <strong>Full</strong> produit le m&ecirc;me effet que
l'argument <strong>On</strong>.</p>
</div>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="directive-section"><h2 id="proxytimeout">Directive <span id="ProxyTimeout">ProxyTimeout</span> <a title="Lien permanent" href="#proxytimeout" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>D&eacute;lai d'attente r&eacute;seau pour les requ&ecirc;tes
mandat&eacute;es</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyTimeout <var>time-interval</var>[s]</code></td></tr>
<tr><th><a href="directive-dict.html#Default">D&eacute;faut:</a></th><td><code>Valeur de la directive <code class="directive"><a href="../mod/core.html#timeout">Timeout</a></code></code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
</table>
<p>Cette directive permet &agrave; l'utilisateur de sp&eacute;cifier un d&eacute;lai pour
les requ&ecirc;tes mandat&eacute;es. Ceci s'av&egrave;re utile dans le cas d'un serveur
d'applications lent et bogu&eacute; qui a tendance &agrave; se bloquer, et si vous
pr&eacute;f&eacute;rez simplement renvoyer une erreur timeout et abandonner la
connexion en douceur plut&ocirc;t que d'attendre jusqu'&agrave; ce que le serveur
veuille bien r&eacute;pondre.</p>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="directive-section"><h2 id="proxyvia">Directive <span id="ProxyVia">ProxyVia</span> <a title="Lien permanent" href="#proxyvia" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Information fournie dans l'en-t&ecirc;te de r&eacute;ponse HTTP
<code>Via</code> pour les requ&ecirc;tes mandat&eacute;es</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyVia On|Off|Full|Block</code></td></tr>
<tr><th><a href="directive-dict.html#Default">D&eacute;faut:</a></th><td><code>ProxyVia Off</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
</table>
<p>Cette directive permet de contr&ocirc;ler l'utilisation de l'en-t&ecirc;te
HTTP <code>Via:</code> par le mandataire. Le but recherch&eacute; est de
contr&ocirc;ler le flux des requ&ecirc;tes mandat&eacute;es tout au long d'une cha&icirc;ne
de serveurs mandataires. Voir la <a href="https://www.rfc-editor.org/rfc/rfc2616">RFC 2616</a> (HTTP/1.1),
section 14.45 pour une description des lignes d'en-t&ecirc;te
<code>Via:</code>.</p>
<ul>
<li>Si elle est d&eacute;finie &agrave; <code>Off</code>, valeur par d&eacute;faut, cette
directive n'effectue aucun traitement particulier. Si une requ&ecirc;te ou
une r&eacute;ponse contient un en-t&ecirc;te <code>Via:</code>, il est transmis
sans modification.</li>
<li>Si elle est d&eacute;finie &agrave; <code>On</code>, chaque requ&ecirc;te ou r&eacute;ponse
se verra ajouter une ligne d'en-t&ecirc;te <code>Via:</code> pour le
serveur courant.</li>
<li>Si elle est d&eacute;finie &agrave; <code>Full</code>, chaque ligne d'en-t&ecirc;te
<code>Via:</code> se verra ajouter la version du serveur Apache
httpd sous la forme d'un champ de commentaire <code>Via:</code>.</li>
<li>Si elle est d&eacute;finie &agrave; <code>Block</code>, chaque requ&ecirc;te
mandat&eacute;e verra ses lignes d'en-t&ecirc;te <code>Via:</code> supprim&eacute;es.
Aucun nouvel en-t&ecirc;te <code>Via:</code> ne sera g&eacute;n&eacute;r&eacute;.</li>
</ul>
</div>
</div>
<div class="bottomlang">
<p><span>Langues Disponibles: </span><a href="../en/mod/mod_proxy.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
<a href="../fr/mod/mod_proxy.html" title="Fran&ccedil;ais">&nbsp;fr&nbsp;</a> |
<a href="../ja/mod/mod_proxy.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&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>