2 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
3 <?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?>
4 <!-- English Revision : 931689 -->
5 <!-- French translation : Lucien GENTIS -->
6 <!-- Reviewed by : Vincent Deffontaines -->
9 Licensed to the Apache Software Foundation (ASF) under one or more
10 contributor license agreements. See the NOTICE file distributed with
11 this work for additional information regarding copyright ownership.
12 The ASF licenses this file to You under the Apache License, Version 2.0
13 (the "License"); you may not use this file except in compliance with
14 the License. You may obtain a copy of the License at
16 http://www.apache.org/licenses/LICENSE-2.0
18 Unless required by applicable law or agreed to in writing, software
19 distributed under the License is distributed on an "AS IS" BASIS,
20 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21 See the License for the specific language governing permissions and
22 limitations under the License.
25 <modulesynopsis metafile="mod_proxy.xml.meta">
27 <name>mod_proxy</name>
28 <description>Serveur mandataire/passerelle HTTP/1.1</description>
29 <status>Extension</status>
30 <sourcefile>mod_proxy.c</sourcefile>
31 <identifier>proxy_module</identifier>
34 <note type="warning"><title>Avertissement</title>
35 <p>N'activez pas la fonctionnalité de mandataire avec la directive
36 <directive module="mod_proxy">ProxyRequests</directive> avant
37 d'avoir <a href="#access">sécurisé votre serveur</a>. Les serveurs
38 mandataires ouverts sont dangereux pour votre réseau,
39 mais aussi pour l'Internet au sens large.</p>
42 <p>Ce module implémente un mandataire/passerelle pour le serveur
44 implémente la fonctionnalité de mandataire pour <code>AJP13</code>
45 (Apache JServe Protocol version 1.3), <code>FTP</code>,
46 <code>CONNECT</code> (pour SSL), <code>HTTP/0.9</code>,
47 <code>HTTP/1.0</code>, et <code>HTTP/1.1</code>. Le module peut être
48 configuré pour se connecter aux autres modules mandataires qui
49 gèrent ces protocoles ou d'autres.</p>
51 <p>Les diverses fonctionnalités de
52 mandataire d'Apache httpd sont réparties entre plusieurs modules
53 complémentaires de <module>mod_proxy</module> :
54 <module>mod_proxy_http</module>, <module>mod_proxy_ftp</module>,
55 <module>mod_proxy_ajp</module>, <module>mod_proxy_balancer</module>,
56 et <module>mod_proxy_connect</module>. Ainsi, si vous voulez
57 utiliser une ou plusieurs fonctionnalités de mandataire
58 particulières, chargez <module>mod_proxy</module> <em>et</em> le(s)
59 module(s) approprié(s) dans le serveur (soit statiquement à la
60 compilation, soit dynamiquement via la directive <directive
61 module="mod_so">LoadModule</directive>).</p>
63 <p>En outre, d'autres modules fournissent des fonctionnalités
64 étendues. <module>mod_cache</module> et ses modules associés
65 fournissent la mise en cache. Les directives <code>SSLProxy*</code>
66 du module <module>mod_ssl</module> permettent de contacter des
67 serveurs distants en utilisant le protocole SSL/TLS. Ces modules
68 additionnels devront être chargés et configurés pour pouvoir
69 disposer de ces fonctionnalités.</p>
71 <seealso><module>mod_cache</module></seealso>
72 <seealso><module>mod_proxy_http</module></seealso>
73 <seealso><module>mod_proxy_ftp</module></seealso>
74 <seealso><module>mod_proxy_connect</module></seealso>
75 <seealso><module>mod_proxy_balancer</module></seealso>
76 <seealso><module>mod_ssl</module></seealso>
78 <section id="forwardreverse"><title>Mandataires directs et
79 mandataires/passerelles inverses</title>
80 <p>Le serveur HTTP Apache peut être configuré dans les deux modes mandataire
81 <dfn>direct</dfn> et mandataire <dfn>inverse</dfn> (aussi nommé
82 mode <dfn>passerelle</dfn>).</p>
84 <p>Un <dfn>mandataire direct</dfn> standard est un serveur
85 intermédiaire qui s'intercale entre le client et le <em>serveur
86 demandé</em>. Pour obtenir un contenu hébergé par
87 le serveur demandé, le client envoie une requête au
88 mandataire en nommant le serveur demandé comme
89 cible, puis le mandataire extrait le contenu depuis le
90 serveur demandé et le renvoie enfin au client. Le client doit être
91 configuré de manière appropriée pour pouvoir utiliser le mandataire
92 direct afin d'accéder à d'autres sites.</p>
94 <p>L'accès à Internet depuis des clients situés derrière un
95 pare-feu est une utilisation typique du mandataire direct. Le
96 mandataire direct peut aussi utiliser la mise en cache (fournie
97 par <module>mod_cache</module>) pour réduire la charge du
100 <p>La fonctionnalité de mandataire direct est activée via la
101 directive <directive module="mod_proxy">ProxyRequests</directive>.
102 Comme les mandataires directs permettent aux clients d'accéder à
103 des sites quelconques via votre serveur et de dissimuler leur
104 véritable origine, il est indispensable de <a
105 href="#access">sécuriser votre serveur</a> de façon à ce que seuls
106 les clients autorisés puissent accéder à votre serveur avant
107 d'activer la fonctionnalité de mandataire direct.</p>
109 <p>Un <dfn>mandataire inverse</dfn> (ou <dfn>passerelle</dfn>),
110 quant à lui, apparaît au client comme un serveur web standard.
111 Aucune configuration particulière du client n'est nécessaire. Le
112 client adresse ses demandes de contenus ordinaires dans l'espace
113 de nommage du mandataire inverse. Ce dernier décide alors où
114 envoyer ces requêtes, et renvoie le contenu au client comme s'il
115 l'hébergeait lui-même.</p>
117 <p>L'accès d'utilisateurs depuis Internet vers un serveur situé
118 derrière un pare-feu est une utilisation typique du mandataire
119 inverse. On peut aussi utiliser les mandataires inverses pour
120 mettre en oeuvre une répartition de charge entre plusieurs
121 serveurs en arrière-plan, ou fournir un cache pour un serveur
122 d'arrière-plan plus lent. Les mandataires inverses peuvent aussi
123 tout simplement servir à rassembler plusieurs serveurs dans le
124 même espace de nommage d'URLs.</p>
126 <p>La fonctionnalité de mandataire inverse est activée via la
127 directive <directive module="mod_proxy">ProxyPass</directive> ou
128 le drapeau <code>[P]</code> de la directive <directive
129 module="mod_rewrite">RewriteRule</directive>. Il n'est
130 <strong>pas</strong> nécessaire de définir <directive
131 module="mod_proxy">ProxyRequests</directive> pour configurer
132 un mandataire inverse.</p>
133 </section> <!-- /forwardreverse -->
135 <section id="examples"><title>Exemples simples</title>
137 <p>Les exemples ci-dessous illustrent de manière très basique la
138 mise en oeuvre de la fonctionnalité de mandataire et ne sont là que
139 pour vous aider à démarrer. Reportez-vous à la documentation de
140 chaque directive.</p>
142 <p>Si en outre, vous désirez activer la mise en cache, consultez la
143 documentation de <module>mod_cache</module>.</p>
145 <example><title>Mandataire inverse</title>
146 ProxyPass /foo http://foo.example.com/bar<br />
147 ProxyPassReverse /foo http://foo.example.com/bar
150 <example><title>Mandataire direct</title>
151 ProxyRequests On<br />
154 <Proxy *><br />
156 Order deny,allow<br />
158 Allow from interne.example.com<br />
162 </section> <!-- /examples -->
165 <section id="access"><title>Contrôler l'accès à votre
167 <p>Vous pouvez restreindre l'accès à votre mandataire via le bloc
168 de contrôle <directive
169 module="mod_proxy" type="section">Proxy</directive> comme dans
170 l'exemple suivant :</p>
173 <Proxy *><br />
175 Order Deny,Allow<br />
177 Allow from 192.168.0<br />
182 <p>Pour plus de détails sur les directives de contrôle d'accès,
183 voir la documentation du module
184 <module>mod_authz_host</module>.</p>
186 <p>Restreindre l'accès de manière stricte est essentiel si vous
187 mettez en oeuvre un mandataire direct (en définissant la directive
188 <directive module="mod_proxy">ProxyRequests</directive> à "on").
189 Dans le cas contraire, votre serveur pourrait être utilisé par
190 n'importe quel client pour accéder à des serveurs quelconques,
191 tout en masquant sa véritable identité. Ceci représente un danger
192 non seulement pour votre réseau, mais aussi pour l'Internet au
193 sens large. Dans le cas de la mise en oeuvre d'un mandataire
194 inverse (en définissant la directive <directive
195 module="mod_proxy">ProxyPass</directive> à "off"), le contrôle
196 d'accès est moins critique car les clients ne peuvent contacter
197 que les serveurs que vous avez spécifiés.</p>
199 <p><strong>Voir aussi</strong> la variable d'environnement <a
200 href="mod_proxy_http.html#env">Proxy-Chain-Auth</a>.</p>
202 </section> <!-- /access -->
204 <section id="startup"><title>Ralentissement au démarrage</title>
205 <p>Si vous utilisez la directive <directive module="mod_proxy"
206 >ProxyBlock</directive>, les noms d'hôtes sont résolus en adresses
207 IP puis ces dernières mises en cache au cours du démarrage
208 à des fins de tests de comparaisons ultérieurs. Ce processus peut
209 durer plusieurs secondes (ou d'avantage) en fonction de la vitesse
210 à laquelle s'effectue la résolution des noms d'hôtes.</p>
211 </section> <!-- /startup -->
213 <section id="intranet"><title>Mandataire en Intranet</title>
214 <p>Un serveur mandataire Apache httpd situé à l'intérieur d'un Intranet
215 doit faire suivre les requêtes destinées à un serveur externe à
216 travers le pare-feu de l'entreprise (pour ce faire, définissez la
217 directive <directive module="mod_proxy">ProxyRemote</directive> de
218 façon à ce qu'elle fasse suivre le <var>protocole</var> concerné
219 vers le mandataire du pare-feu). Cependant, lorsqu'il doit accéder
220 à des ressources situées dans l'Intranet, il peut se passer du
221 pare-feu pour accéder aux serveurs. A cet effet, la directive
222 <directive module="mod_proxy">NoProxy</directive> permet de
223 spécifier quels hôtes appartiennent à l'Intranet et peuvent donc
224 être accédés directement.</p>
226 <p>Les utilisateurs d'un Intranet ont tendance à oublier le nom du
227 domaine local dans leurs requêtes WWW, et demandent par exemple
228 "http://un-serveur/" au lieu de
229 <code>http://un-serveur.example.com/</code>. Certains serveurs
230 mandataires commerciaux acceptent ce genre de requête et les
231 traitent simplement en utilisant un nom de domaine local
232 implicite. Lorsque la directive <directive
233 module="mod_proxy">ProxyDomain</directive> est utilisée et si le
234 serveur est <a href="#proxyrequests">configuré comme
235 mandataire</a>, Apache httpd peut renvoyer une réponse de redirection et
236 ainsi fournir au client l'adresse de serveur correcte,
237 entièrement qualifiée. C'est la méthode à privilégier car le
238 fichier des marque-pages de l'utilisateur contiendra alors des
239 noms de serveurs entièrement qualifiés.</p>
240 </section> <!-- /intranet -->
242 <section id="envsettings"><title>Ajustements relatifs au
244 <p>Pour les cas où <module>mod_proxy</module> envoie des requêtes
245 vers un serveur qui n'implémente pas correctement les connexions
246 persistantes ou le protocole HTTP/1.1, il existe deux variables
247 d'environnement qui permettent de forcer les requêtes à utiliser
248 le protocole HTTP/1.0 avec connexions non persistantes. Elles
249 peuvent être définies via la directive <directive
250 module="mod_env">SetEnv</directive>.</p>
252 <p>Il s'agit des variables <code>force-proxy-request-1.0</code> et
253 <code>proxy-nokeepalive</code>.</p>
256 <Location /serveur-non-conforme/><br />
258 ProxyPass http://serveur-non-conforme:7001/foo/<br />
259 SetEnv force-proxy-request-1.0 1<br />
260 SetEnv proxy-nokeepalive 1<br />
265 </section> <!-- /envsettings -->
267 <section id="request-bodies"><title>Corps de requêtes</title>
269 <p>Certaines méthodes de requêtes comme POST comportent un corps de
270 requête. Le protocole HTTP stipule que les requêtes qui comportent
271 un corps doivent soit utiliser un codage de transmission
272 fractionnée (chunked transfer encoding), soit envoyer un en-tête de requête
273 <code>Content-Length</code>. Lorsqu'il fait suivre ce genre de
274 requête vers le serveur demandé, <module>mod_proxy_http</module>
275 s'efforce toujours d'envoyer l'en-tête <code>Content-Length</code>.
276 Par contre, si la taille du corps est importante, et si la requête
277 originale utilise un codage à fractionnement, ce dernier peut aussi
278 être utilisé dans la requête montante. Ce comportement peut être
279 contrôlé à l'aide de <a href="../env.html">variables
280 d'environnement</a>. Ainsi, si elle est définie, la variable
281 <code>proxy-sendcl</code> assure une compatibilité maximale avec les
282 serveurs demandés en imposant l'envoi de l'en-tête
283 <code>Content-Length</code>, alors que
284 <code>proxy-sendchunked</code> diminue la consommation de ressources
285 en imposant l'utilisation d'un codage à fractionnement.</p>
287 </section> <!-- /request-bodies -->
289 <section id="x-headers"><title>En-têtes de requête du mandataire
292 <p>Lorsqu'il est configuré en mode mandataire inverse (en utilisant
293 par exemple la directive <directive
294 module="mod_proxy">ProxyPass</directive>),
295 <module>mod_proxy_http</module> ajoute plusieurs en-têtes de requête
296 afin de transmettre des informations au serveur demandé. Ces
297 en-têtes sont les suivants :</p>
300 <dt><code>X-Forwarded-For</code></dt>
301 <dd>L'adresse IP du client.</dd>
302 <dt><code>X-Forwarded-Host</code></dt>
303 <dd>L'hôte d'origine demandé par le client dans l'en-tête de
304 requête HTTP <code>Host</code>.</dd>
305 <dt><code>X-Forwarded-Server</code></dt>
306 <dd>Le nom d'hôte du serveur mandataire.</dd>
309 <p>Ces en-têtes doivent être utilisés avec précautions sur le
310 serveur demandé, car ils contiendront plus d'une valeur (séparées
311 par des virgules) si la requête originale contenait déjà un de ces
312 en-têtes. Par exemple, vous pouvez utiliser
313 <code>%{X-Forwarded-For}i</code> dans la chaîne de format du journal
314 du serveur demandé pour enregistrer les adresses IP des clients
315 originaux, mais il est possible que vous obteniez plusieurs adresses
316 si la requête passe à travers plusieurs mandataires.</p>
318 <p>Voir aussi les directives <directive
319 module="mod_proxy">ProxyPreserveHost</directive> et <directive
320 module="mod_proxy">ProxyVia</directive> directives, qui permettent
321 de contrôler d'autres en-têtes de requête.</p>
323 </section> <!--/x-headers -->
326 <directivesynopsis type="section">
328 <description>Conteneur de directives s'appliquant à des ressources
329 mandatées</description>
330 <syntax><Proxy <var>url-avec-jokers</var>> ...</Proxy></syntax>
331 <contextlist><context>server config</context><context>virtual host</context>
335 <p>Les directives situées dans une section <directive
336 type="section">Proxy</directive> ne s'appliquent qu'au contenu
337 mandaté concerné. Les jokers de style shell sont autorisés.</p>
339 <p>Par exemple, les lignes suivantes n'autoriseront à accéder à un
340 contenu via votre serveur mandataire que les hôtes appartenant à
341 <code>votre-reseau.example.com</code> :</p>
344 <Proxy *><br />
346 Order Deny,Allow<br />
348 Allow from votre-reseau.example.com<br />
353 <p>Dans l'exemple suivant, tous les fichiers du répertoire
354 <code>foo</code> de <code>example.com</code> seront traités par le
355 filtre <code>INCLUDES</code> lorsqu'ils seront envoyés par
356 l'intermédiaire du serveur mandataire :</p>
359 <Proxy http://example.com/foo/*><br />
361 SetOutputFilter INCLUDES<br />
367 <seealso><directive type="section" module="mod_proxy">ProxyMatch</directive></seealso>
371 <name>ProxyBadHeader</name>
372 <description>Détermine la manière de traiter les lignes d'en-tête
373 incorrectes d'une réponse</description>
374 <syntax>ProxyBadHeader IsError|Ignore|StartBody</syntax>
375 <default>ProxyBadHeader IsError</default>
376 <contextlist><context>server config</context><context>virtual host</context>
378 <compatibility>Disponible depuis la version 2.0.44 du serveur HTTP Apache</compatibility>
381 <p>La directive <directive>ProxyBadHeader</directive> permet de
382 déterminer le comportement de <module>mod_proxy</module> lorsqu'il
383 reçoit des lignes d'en-tête dont la syntaxe n'est pas valide (c'est
384 à dire ne contenant pas de caractère ':'). Les arguments disponibles
388 <dt><code>IsError</code></dt>
389 <dd>Annule la requête et renvoie une réponse de code 502 (mauvaise
390 passerelle). C'est le comportement par défaut.</dd>
392 <dt><code>Ignore</code></dt>
393 <dd>Traite les lignes d'en-tête incorrectes comme si elles n'avaient
394 pas été envoyées.</dd>
396 <dt><code>StartBody</code></dt>
397 <dd>A la réception de la première ligne d'en-tête incorrecte, les
398 autres en-têtes sont lus et ce qui reste est traité en tant que
399 corps. Ceci facilite la prise en compte des serveurs d'arrière-plan
400 bogués qui oublient d'insérer une ligne vide entre les
401 en-têtes et le corps.</dd>
406 <directivesynopsis type="section">
407 <name>ProxyMatch</name>
408 <description>Conteneur de directives s'appliquant à des ressources
409 mandatées correspondant à une expression rationnelle</description>
410 <syntax><ProxyMatch <var>regex</var>> ...</ProxyMatch></syntax>
411 <contextlist><context>server config</context><context>virtual host</context>
415 <p>La directive <directive type="section">ProxyMatch</directive> est
416 identique à la directive <directive module="mod_proxy"
417 type="section">Proxy</directive>, à l'exception qu'elle définit
418 les URLs auxquelles elle s'applique en utilisant une <glossary
419 ref="regex">expression rationnelle</glossary>.</p>
421 <seealso><directive type="section" module="mod_proxy">Proxy</directive></seealso>
425 <name>ProxyPreserveHost</name>
426 <description>Utilise l'en-tête de requête entrante Host pour la requête
427 du mandataire</description>
428 <syntax>ProxyPreserveHost On|Off</syntax>
429 <default>ProxyPreserveHost Off</default>
430 <contextlist><context>server config</context><context>virtual host</context>
431 <context>directory</context>
433 <compatibility>Disponible depuis la version 2.0.31 du serveur HTTP Apache. Utilisable
434 dans un contexte de répertoire depuis la version 2.3.3.</compatibility>
437 <p>Lorsqu'elle est activée, cette directive va transmettre l'en-tête
438 Host: de la requête entrante vers le serveur mandaté, au lieu du nom
439 d'hôte spécifié par la directive <directive>ProxyPass</directive>.</p>
441 <p>Cette directive est habituellement définie à <code>Off</code>.
442 Elle est principalement utile dans les configurations particulières
443 comme l'hébergement virtuel mandaté en masse à base de nom, où
444 l'en-tête Host d'origine doit être évalué par le serveur
445 d'arrière-plan.</p>
450 <name>ProxyRequests</name>
451 <description>Active la fonctionnalité (standard) de mandataire
453 <syntax>ProxyRequests On|Off</syntax>
454 <default>ProxyRequests Off</default>
455 <contextlist><context>server config</context><context>virtual host</context>
459 <p>Cette directive permet d'activer/désactiver la fonctionnalité de
460 serveur mandataire direct d'Apache httpd. Définir ProxyRequests à
461 <code>Off</code> n'interdit pas l'utilisation de la directive
462 <directive module="mod_proxy">ProxyPass</directive>.</p>
464 <p>Pour une configuration typique de mandataire inverse ou
465 passerelle, cette directive doit être définie à
466 <code>Off</code>.</p>
468 <p>Afin d'activer la fonctionnalité de mandataire pour des sites
469 HTTP et/ou FTP, les modules <module>mod_proxy_http</module> et/ou
470 <module>mod_proxy_ftp</module> doivent également être chargés dans le
473 <note type="warning"><title>Avertissement</title>
474 <p>N'activez pas la fonctionnalité de mandataire avec la directive
475 <directive module="mod_proxy">ProxyRequests</directive> avant
476 d'avoir <a href="#access">sécurisé votre serveur</a>. Les serveurs
477 mandataires ouverts sont dangereux non seulement pour votre
478 réseau, mais aussi pour l'Internet au sens large.</p>
481 <seealso><a href="#forwardreverse">Mandataires/Passerelles directs et
482 inverses</a></seealso>
486 <name>ProxyRemote</name>
487 <description>Mandataire distant à utiliser pour traiter certaines
488 requêtes</description>
489 <syntax>ProxyRemote <var>comparaison</var> <var>serveur-distant</var></syntax>
490 <contextlist><context>server config</context><context>virtual host</context>
494 <p>Cette directive permet de définir des mandataires distants pour
495 ce mandataire. <var>comparaison</var> est soit le nom d'un protocole
496 que supporte le serveur distant, soit une URL partielle pour
497 laquelle le serveur distant devra être utilisé, soit <code>*</code>
498 pour indiquer que le serveur distant doit être utilisé pour toutes
499 les requêtes. <var>serveur-distant</var> est une URL partielle
500 correspondant au serveur distant. Syntaxe : </p>
503 <dfn>serveur-distant</dfn> =
504 <var>protocole</var>://<var>nom-serveur</var>[:<var>port</var>]
507 <p><var>protocole</var> est effectivement le protocole à utiliser
508 pour communiquer avec le serveur distant ; ce module ne supporte que
509 <code>http</code> et <code>https</code>. Lorsqu'on utilise
510 <code>https</code>, les requêtes sont redirigées par le mandataire
511 distant en utilisant la méthode HTTP CONNECT.</p>
513 <example><title>Exemple</title>
514 ProxyRemote http://bons-gars.example.com/ http://gars-mirroirs.example.com:8000<br />
515 ProxyRemote * http://mandataire-intelligent.localdomain<br />
516 ProxyRemote ftp http://mandataire-ftp.mon-domaine:8080
519 <p>Dans la dernière ligne de l'exemple, le mandataire va faire
520 suivre les requêtes FTP, encapsulées dans une autre requête mandatée
521 HTTP, vers un autre mandataire capable de les traiter.</p>
523 <p>Cette directive supporte aussi les configurations de mandataire
524 inverse - un serveur web d'arrière-plan peut être intégré dans
525 l'espace d'URL d'un serveur virtuel, même si ce serveur est caché
526 par un autre mandataire direct.</p>
531 <name>ProxyRemoteMatch</name>
532 <description>Le mandataire distant à utiliser pour traiter les requêtes
533 correspondant à une expression rationnelle</description>
534 <syntax>ProxyRemoteMatch <var>regex</var> <var>serveur-distant</var></syntax>
535 <contextlist><context>server config</context><context>virtual host</context>
539 <p>La directive <directive>ProxyRemoteMatch</directive> est
540 identique à la directive <directive
541 module="mod_proxy">ProxyRemote</directive>, à l'exception du
542 premier argument qui est une <glossary ref="regex">expression
543 rationnelle</glossary> à mettre en correspondance avec l'URL de la
549 <name>BalancerMember</name>
550 <description>Ajoute un membre à un groupe de répartition de
552 <syntax>BalancerMember [<var>balancerurl</var>] <var>url</var> [<var
553 >clé=valeur [clé=valeur ...]]</var></syntax>
554 <contextlist><context>directory</context>
556 <compatibility>Disponible depuis la version 2.2 du serveur HTTP Apache.</compatibility>
558 <p>Cette directive parmet d'ajouter un membre à un groupe de
559 répartition de charge. Elle peut se trouver dans un conteneur
560 <code><Proxy <var>balancer://</var>...></code>, et accepte
561 tous les paramètres de paires clé/valeur que supporte la directive
562 <directive module="mod_proxy">ProxyPass</directive>.</p>
563 <p>La directive <directive
564 module="mod_proxy">BalancerMember</directive> accepte un paramètre
565 supplémentaire : <var>loadfactor</var>. Il s'agit du facteur de
566 charge du membre - un nombre entre 1 (valeur par défaut) et 100, qui
567 définit la charge à appliquer au membre en question.</p>
568 <p>L'argument balancerurl n'est requis que s'il ne se trouve pas
569 dèjà dans la directive de conteneur <code><Proxy
570 <var>balancer://</var>...></code>. Il correspond à l'URL d'un
571 répartiteur de charge défini par une directive <directive
572 module="mod_proxy">ProxyPass</directive>.</p>
577 <name>ProxySet</name>
578 <description>Définit différents paramètres relatifs à la répartition de
579 charge des mandataires et aux membres des groupes de répartition de
581 <syntax>ProxySet <var>url</var> <var>clé=valeur [clé=valeur ...]</var></syntax>
582 <contextlist><context>directory</context>
584 <compatibility>ProxySet n'est disponible que depuis la version 2.2
585 du serveur HTTP Apache.</compatibility>
587 <p>Cette directive propose une méthode alternative pour définir tout
588 paramètre relatif aux répartiteurs de charge et serveurs cibles de
589 mandataires normalement définis via la directive <directive
590 module="mod_proxy">ProxyPass</directive>. Si elle se trouve dans un
591 conteneur <code><Proxy <var>url de répartiteur|url de
592 serveur cible</var>></code>, l'argument <var>url</var> n'est pas
593 nécessaire. Comme effet de bord, le répartiteur ou serveur cible respectif
594 est créé. Ceci peut s'avérer utile pour la mise en oeuvre d'un
595 mandataire inverse via une directive <directive
596 module="mod_rewrite">RewriteRule</directive> au lieu de <directive
597 module="mod_proxy">ProxyPass</directive>.</p>
600 <Proxy balancer://hotcluster><br />
602 BalancerMember http://www2.example.com:8009 loadfactor=1<br />
603 BalancerMember http://www3.example.com:8009 loadfactor=2<br />
604 ProxySet lbmethod=bytraffic<br />
610 <Proxy http://backend><br />
612 ProxySet keepalive=On<br />
618 ProxySet balancer://foo lbmethod=bytraffic timeout=15
622 ProxySet ajp://backend:7001 timeout=15
625 <note type="warning"><title>Avertissement</title>
626 <p>Gardez à l'esprit qu'une même clé de paramètre peut avoir
627 différentes significations selon qu'elle s'applique à un
628 répartiteur ou à un serveur cible, et ceci est illustré par les deux
629 exemples précédents où il est question d'un timeout.</p>
636 <name>ProxyPass</name>
637 <description>Référencer des serveurs distants depuis
638 l'espace d'URLs du serveur local</description>
639 <syntax>ProxyPass [<var>chemin</var>] !|<var>url</var> [<var>clé=valeur</var>
640 <var>[clé=valeur</var> ...]] [nocanon] [interpolate]</syntax>
641 <contextlist><context>server config</context><context>virtual host</context>
642 <context>directory</context>
646 <p>Cette directive permet de référencer des serveurs distants depuis
647 l'espace d'URLs du serveur local ; le serveur
648 local n'agit pas en tant que mandataire au sens conventionnel, mais
649 plutôt comme miroir du serveur distant. Le serveur local est
650 souvent nommé <dfn>mandataire inverse</dfn> ou
651 <dfn>passerelle</dfn>. L'argument <var>chemin</var> est le nom d'un
652 chemin virtuel local ; <var>url</var> est une URL partielle pour le
653 serveur distant et ne doit pas contenir de chaîne d'arguments.</p>
655 <note type="warning">En général, la directive <directive
656 module="mod_proxy">ProxyRequests</directive> doit être définie à
657 <strong>off</strong> lorsqu'on utilise la directive
658 <directive>ProxyPass</directive>.</note>
660 <p>Supposons que le serveur local a pour adresse
661 <code>http://example.com/</code> ; alors la ligne</p>
664 ProxyPass /miroir/foo/ http://backend.example.com/
667 <p>va convertir en interne toute requête pour
668 <code>http://example.com/miroir/foo/bar</code> en une requête
669 mandatée pour <code>http://backend.example.com/bar</code>.</p>
671 <note type="warning">
672 <p>Si le premier argument se termine par un slash
673 <strong>/</strong>, il doit en être de même pour le second argument
674 et vice versa. Dans le cas contraire, il risque de manquer des
675 slashes nécessaires dans la requête résultante vers le serveur
676 d'arrière-plan et les résulats ne seront pas ceux attendus.
680 <p>Le drapeau <code>!</code> permet de soustraire un sous-répertoire
681 du mandat inverse, comme dans l'exemple suivant :</p>
684 ProxyPass /miroir/foo/i !<br />
685 ProxyPass /miroir/foo http://backend.example.com
688 <p>va mandater toutes les requêtes pour <code>/miroir/foo</code>
689 vers <code>backend.example.com</code>, <em>sauf</em> les requêtes
690 pour <code>/miroir/foo/i</code>.</p>
692 <note><title>Note</title>
693 <p>L'ordre est important : les exclusions doivent apparaître
694 <em>avant</em> la directive <directive>ProxyPass</directive> plus
695 générale.</p>
698 <p>Depuis la version 2.1 du serveur HTTP Apache, il est possible d'utiliser un jeu de
699 connexions vers un serveur d'arrière-plan. Il est possible de
700 personnaliser ce jeu de connexions à l'aide des paramètres
701 <code>clé=valeur</code>. La valeur par défaut du nombre maximum de
702 connexions correspond au nombre de threads par processus pour le MPM
703 utilisé. Pour le MPM Prefork, cette valeur est toujours 1, alors que
704 pour le MPM Worker, elle est contrôlée par la directive
705 <directive>ThreadsPerChild</directive>.</p>
707 <p>La définition de <code>min</code> va déterminer le nombre minimum
708 de connexions ouvertes vers le serveur d'arrière-plan. Des
709 connexions pourront être créées à la demande à concurrence du
710 maximum relatif, soit <code>smax</code>. Toute
711 connexion au dessus de <code>smax</code> se verra attribuer une
712 durée de vie <code>ttl</code>. Apache httpd ne créera jamais plus de
713 connexions vers le serveur d'arrière-plan que le maximum absolu,
714 soit <code>max</code>.</p>
717 ProxyPass /exemple http://backend.example.com smax=5 max=20 ttl=120 retry=300
721 <tr><th>Paramètre</th>
722 <th>Défaut</th>
723 <th>Description</th></tr>
726 <td>Nombre minimum de connexions ouvertes vers le serveur
727 d'arrière-plan.</td></tr>
730 <td>Nombre maximum absolu de connexions autorisées vers le
731 serveur d'arrière-plan. La valeur par défaut du nombre maximum
732 absolu de connexions correspond au nombre de threads par
733 processus pour le MPM utilisé. Pour le MPM Prefork, la valeur
734 est toujours 1, alors que pour le MPM Worker, elle est contrôlée
735 par la directive <directive>ThreadsPerChild</directive>. Apache
736 httpd ne créera jamais plus de connexions vers le serveur
737 d'arrière-plan que le maximum absolu.</td></tr>
740 <td>Des connexions pourront être créées à la demande jusqu'au
741 maximum relatif. Toute connexion en surnombre par rapport au
742 maximum relatif se verra attribuer une durée de vie
747 <td>Cette clé permet de définir le délai maximum d'attente pour
748 une connexion libre dans le jeu de connexions, en millisecondes.
749 S'il n'y a pas de connexion libre dans le jeu, Apache httpd renverra
750 l'état <code>SERVER_BUSY</code> au client.
752 <tr><td>connectiontimeout</td>
754 <td>Délai d'attente d'une connexion en secondes.
755 La durée en secondes pendant laquelle Apache httpd va attendre pour
756 l'établissement d'une connexion vers le serveur d'arrière-plan.
757 Le délai peut être spécifié en millisecondes en ajoutant le
760 <tr><td>disablereuse</td>
762 <td>Vous pouvez utiliser cette clé pour forcer mod_proxy à
763 fermer immédiatement une connexion vers le serveur
764 d'arrière-plan après utilisation, et ainsi désactiver le jeu de
765 connexions permanentes vers ce serveur. Ceci peut s'avérer utile
766 dans des situations où un pare-feu situé entre Apache httpd et le
767 serveur d'arrière-plan (quelque soit le protocole) interrompt
768 des connexions de manière silencieuse, ou lorsque le serveur
769 d'arrière-plan lui-même est accessible par rotation de DNS
770 (round-robin DNS). Pour désactiver la réutilisation du jeu de
771 connexions, définissez cette clé à <code>On</code>.
773 <tr><td>flushpackets</td>
775 <td>Permet de définir si le module mandataire doit vider
776 automatiquement le tampon de sortie après chaque tronçon de
777 données. 'off' signifie que le tampon sera vidé si nécessaire,
778 'on' que le tampon sera vidé après chaque envoi d'un
779 tronçon de données, et 'auto' que le tampon sera vidé après un
780 délai de 'flushwait' millisecondes si aucune entrée n'est reçue.
781 Actuellement, cette clé n'est supportée que par AJP.
783 <tr><td>flushwait</td>
785 <td>Le délai d'attente pour une entrée additionnelle, en
786 millisecondes, avant le vidage du tampon en sortie dans le cas
787 où 'flushpackets' est à 'auto'.
789 <tr><td>iobuffersize</td>
791 <td>Permet de définir la taille du tampon d'entrées/sorties du
792 bloc-notes interne. Cette clé vous permet d'outrepasser la
793 directive <directive>ProxyIOBufferSize</directive> pour un
794 serveur cible spécifique. La valeur doit être au minimum 512 ou définie
795 à 0 pour la valeur par défaut du système de 8192.
797 <tr><td>keepalive</td>
799 <td>Cette clé doit être utilisée lorsque vous avez un pare-feu
800 entre Apache httpd et le serveur d'arrière-plan, et si ce dernier tend
801 à interrompre les connexions inactives. Cette clé va faire en
802 sorte que le système d'exploitation envoie des messages
803 <code>KEEP_ALIVE</code> sur chacune des connexions inactives
804 (selon des intervalles de temps dépendant de la configuration
805 générale de l'OS, en général 120ms), et ainsi éviter la
806 fermeture de la connexion par le pare-feu. Pour activer
807 keepalive, définissez cette clé à <code>On</code>.
811 <td>Définit le groupe de répartition de charge dont le serveur cible
812 est membre. Le répartiteur de charge va essayer tous les membres
813 d'un groupe de répartition de charge de numéro inférieur avant
814 d'essayer ceux dont le groupe possède un numéro supérieur.
818 <td>Avec la clé ping, le serveur web envoie une requête
819 <code>CPING</code> sur la connexion ajp13 avant de rediriger une
820 requête. La valeur correspond au délai d'attente de la réponse
821 <code>CPONG</code>. Cette fonctionnalité a été ajoutée afin de
822 pallier aux problèmes de blocage et de surcharge des serveurs
823 Tomcat, et nécessite le support de ping/pong ajp13 qui a été
824 implémenté dans Tomcat 3.3.2+, 4.1.28+ et 5.0.13+. Le trafic
825 réseau peut s'en trouver augmenté en fonctionnement normal, ce
826 qui peut poser problème, mais peut s'en trouver diminué dans les
827 cas où les noeuds de cluster sont arrêtés ou surchargés. Cette
828 clé n'est actuellement utilisable qu'avec AJP. Le délai peut
829 aussi être défini en millisecondes en ajoutant le suffixe
832 <tr><td>receivebuffersize</td>
834 <td>Définit la taille du tampon réseau explicite (TCP/IP) pour
835 les connexions mandatées. Cette clé vous permet d'outrepasser la
836 directive <directive>ProxyReceiveBufferSize</directive> pour un
837 serveur cible spécifique. Sa valeur doit être au minimum 512 ou définie
838 à 0 pour la valeur par défaut du système.
840 <tr><td>redirect</td>
842 <td>Route pour la redirection du serveur cible. Cette valeur est en
843 général définie dynamiquement pour permettre une suppression
844 sécurisée du noeud du cluster. Si cette clé est définie, toutes
845 les requêtes sans identifiant de session seront redirigées vers
846 le membre de groupe de répartition de charge dont la route
847 correspond à la valeur de la clé.
851 <td>Délai entre deux essais du serveur cible du jeu de connexions en
852 secondes. Si le serveur cible du jeu de connexions vers le serveur
853 d'arrière-plan est dans un état d'erreur, Apache httpd ne redirigera
854 pas de requête vers ce serveur avant l'expiration du délai
855 spécifié. Ceci permet d'arrêter le serveur d'arrière-plan pour
856 maintenance, et de le remettre en ligne plus tard. Une valeur de
857 0 implique de toujours essayer les serveurs cibles dans un état d'erreur
862 <td>La route du serveur cible lorsqu'il est utilisé au sein d'un
863 répartiteur de charge. La route est une valeur ajoutée à
864 l'identifiant de session.
868 <td>Valeur constituée d'une simple lettre et définissant l'état
869 initial de ce serveur cible : 'D' correspond à "désactivé", 'S' à
870 "arrêté", 'I' à "erreurs ignorées", 'H' à "interruption à chaud"
871 et 'E' à "erreur". Une valeur d'état peut être définie (ce qui
872 correspond au comportement par défaut) en préfixant la valeur
873 par '+', ou annulée en préfixant la valeur par '-'. Ainsi, la
874 valeur 'S-E' définit l'état de ce serveur cible à "arrêté" et supprime
875 le drapeau "en-erreur".
878 <td><directive module="mod_proxy">ProxyTimeout</directive></td>
879 <td>Délai d'attente de la connexion en secondes. Le nombre de
880 secondes pendant lesquelles Apache httpd attend l'envoi de
881 données vers le serveur d'arrière-plan.
885 <td>Durée de vie des connexions inactives en surnombre par
886 rapport aux <code>smax</code> premières connexions en secondes.
887 Apache httpd fermera toutes les connexions qui n'ont pas été utilisées
888 pendant ce laps de temps.
893 <p>Si l'URL de la directive Proxy débute par
894 <code>balancer://</code> (par exemple:
895 <code>balancer://cluster/</code>, toute information relative au
896 chemin est ignorée), alors un serveur cible virtuel ne communiquant pas
897 réellement avec le serveur d'arrière-plan sera créé. Celui-ci sera
898 en fait responsable de la gestion de plusieurs serveurs cibles "réels". Dans
899 ce cas, un jeu de paramètres particuliers s'applique à ce serveur cible
900 virtuel. Voir <module>mod_proxy_balancer</module> pour plus
901 d'informations à propos du fonctionnement du répartiteur de
905 <tr><th>Paramètre</th>
906 <th>Défaut</th>
907 <th>Description</th></tr>
908 <tr><td>lbmethod</td>
910 <td>Méthode de répartition de charge utilisée. Permet de
911 sélectionner la méthode de planification de la répartition de
912 charge à utiliser. La valeur est soit <code>byrequests</code>,
913 pour effectuer un décompte de requêtes pondérées, soit
914 <code>bytraffic</code>, pour effectuer une répartition en
915 fonction du décompte des octets transmis, soit
916 <code>bybusyness</code>, pour effectuer une répartition en
917 fonction des requêtes en attente. La valeur par défaut est
918 <code>byrequests</code>.
920 <tr><td>maxattempts</td>
922 <td>Nombre maximum d'échecs avant abandon.
924 <tr><td>nofailover</td>
926 <td>Si ce paramètre est défini à <code>On</code>, la session va
927 s'interrompre si le serveur cible est dans un état d'erreur ou
928 désactivé. Définissez ce paramètre à On si le serveur
929 d'arrière-plan ne supporte pas la réplication de session.
931 <tr><td>stickysession</td>
933 <td>Nom de session persistant du répartiteur. La valeur est
934 généralement du style <code>JSESSIONID</code> ou
935 <code>PHPSESSIONID</code>, et dépend du serveur d'application
936 d'arrière-plan qui supporte les sessions. Si le serveur
937 d'application d'arrière-plan utilise des noms différents pour
938 les cookies et les identifiants codés d'URL (comme les
939 conteneurs de servlet), séparez-les par le caractère '|'. La
940 première partie contient le cookie et la seconde le chemin.
942 <tr><td>scolonpathdelim</td>
944 <td>Si ce paramètre est défini à <code>On</code>, le caractère
945 ';' sera utilisé comme séparateur de chemin de session
946 persistante additionnel. Ceci permet principalement de simuler
947 le comportement de mod_jk lorsqu'on utilise des chemins du style
948 <code>JSESSIONID=6736bcf34;foo=aabfa</code>.
952 <td>Délai du répartiteur en secondes. Si ce paramètre est
953 défini, sa valeur correspond à la durée maximale d'attente pour
954 un serveur cible libre. Le comportement par défaut est de ne pas
959 <p>Exemple de configuration d'un répartiteur de charge</p>
961 ProxyPass /zone-speciale http://special.example.com smax=5 max=10<br />
962 ProxyPass / balancer://mon-cluster/ stickysession=JSESSIONID|jsessionid nofailover=On<br />
963 <Proxy balancer://mon-cluster><br />
965 BalancerMember http://1.2.3.4:8009<br />
966 BalancerMember http://1.2.3.5:8009 smax=10<br />
967 # Serveur moins puissant ; faites-lui traiter moins de requêtes<br />
968 BalancerMember http://1.2.3.6:8009 smax=1 loadfactor=20<br />
973 <p>Configuration d'un serveur cible de réserve qui ne sera utilisé que si
974 aucun autre serveur cible n'est disponible</p>
976 ProxyPass / balancer://hotcluster/ <br />
977 <Proxy balancer://hotcluster><br />
979 BalancerMember http://1.2.3.4:8009 loadfactor=1<br />
980 BalancerMember http://1.2.3.5:8009 loadfactor=2<br />
981 # La ligne suivante configure le serveur cible de réserve<br />
982 BalancerMember http://1.2.3.6:8009 status=+H<br />
983 ProxySet lbmethod=bytraffic
988 <p>Normalement, mod_proxy va mettre sous leur forme canonique les
989 URLs traitées par ProxyPass. Mais ceci peut être incompatible avec
990 certains serveurs d'arrière-plan, et en particulier avec ceux qui
991 utilisent <var>PATH_INFO</var>. Le mot-clé optionnel
992 <var>nocanon</var> modifie ce comportement et permet de transmettre
993 le chemin d'URL sous sa forme brute au serveur d'arrière-plan. Notez
994 que ceci peut affecter la sécurité de votre serveur d'arrière-plan,
995 car la protection limitée contre les attaques à base d'URL que
996 fournit le mandataire est alors supprimée.</p>
998 <p>Le mot-clé optionnel <var>interpolate</var> (disponible depuis
999 httpd 2.2.9), en combinaison avec la directive
1000 <directive>ProxyPassInterpolateEnv</directive>, permet à ProxyPass
1001 d'interpoler les variables d'environnement à l'aide de la syntaxe
1002 <var>${VARNAME}</var>. Notez que de nombreuses variables
1003 d'environnement standard dérivées de CGI n'existeront pas lorsque
1004 l'interpolation se produit ; vous devrez alors encore avoir avoir
1005 recours à <module>mod_rewrite</module> pour des règles
1008 <p>Lorsque la directive ProxyPass est utilisée à l'intérieur d'une
1009 section <directive type="section" module="core"
1010 >Location</directive>, le premier argument est omis et le répertoire
1011 local est obtenu à partir de la section <directive type="section"
1012 module="core">Location</directive>.</p>
1014 <p>Si vous avez besoin d'un configuration de mandataire inverse plus
1015 souple, reportez-vous à la documentaion de la directive <directive
1016 module="mod_rewrite">RewriteRule</directive> et son drapeau
1017 <code>[P]</code>.</p>
1019 </directivesynopsis>
1022 <name>ProxyPassMatch</name>
1023 <description>Fait correspondre des serveurs distants dans l'espace d'URL
1024 du serveur local en utilisant des expressions rationnelles</description>
1025 <syntax>ProxyPassMatch [<var>regex</var>] !|<var>url</var>
1026 [<var>clé=valeur</var>
1027 <var>[clé=valeur</var> ...]]</syntax>
1028 <contextlist><context>server config</context><context>virtual host</context>
1029 <context>directory</context>
1033 <p>Cette directive est identique à la directive <directive
1034 module="mod_proxy">ProxyPass</directive>, mais fait usage des
1035 expressions rationnelles, au lieu d'une simple comparaison de
1036 préfixes. L'expression rationnelle spécifiée est comparée à
1037 l'<var>url</var>, et si elle correspond, le serveur va substituer
1038 toute correspondance entre parenthèses dans la chaîne donnée et
1039 l'utiliser comme nouvelle <var>url</var>.</p>
1041 <p>Supposons que le serveur local a pour adresse
1042 <code>http://example.com/</code> ; alors</p>
1045 ProxyPassMatch ^(/.*\.gif)$ http://backend.example.com$1
1048 <p>va provoquer la conversion interne de la requête locale
1049 <code>http://example.com/foo/bar.gif</code> en une requête mandatée
1050 pour <code>http://backend.example.com/foo/bar.gif</code>.</p>
1052 <note><title>Note</title>
1053 <p>L'argument URL doit pouvoir être interprété en tant qu'URL
1054 <em>avant</em> les substitutions d'expressions rationnelles (et
1055 doit aussi l'être après). Ceci limite les correspondances que vous
1056 pouvez utiliser. Par exemple, si l'on avait utilisé</p>
1058 ProxyPassMatch ^(/.*\.gif)$ http://backend.example.com:8000$1
1060 <p>dans l'exemple précédent, nous aurions provoqué une erreur de
1061 syntaxe au démarrage du serveur. C'est une bogue (PR 46665 dans
1062 ASF bugzilla), et il est possible de la contourner en reformulant
1063 la correspondance :</p>
1065 ProxyPassMatch ^/(.*\.gif)$ http://backend.example.com:8000/$1
1069 <p>Le drapeau <code>!</code> vous permet de ne pas mandater un
1070 sous-répertoire donné.</p>
1072 </directivesynopsis>
1075 <name>ProxyPassReverse</name>
1076 <description>Ajuste l'URL dans les en-têtes de la réponse HTTP envoyée
1077 par un serveur mandaté en inverse</description>
1078 <syntax>ProxyPassReverse [<var>chemin</var>] <var>url</var>
1079 [<var>interpolate</var>]</syntax>
1080 <contextlist><context>server config</context><context>virtual host</context>
1081 <context>directory</context>
1085 <p>Cette directive permet de faire en sorte qu'Apache httpd ajuste l'URL
1086 dans les en-têtes <code>Location</code>,
1087 <code>Content-Location</code> et <code>URI</code> des réponses de
1088 redirection HTTP. Ceci est essentiel lorsqu'Apache httpd est utilisé en
1089 tant que mandataire inverse (ou passerelle), afin d'éviter de
1090 court-circuiter le mandataire inverse suite aux redirections HTTP
1091 sur le serveur d'arrière-plan qui restent derrière le mandataire
1094 <p>Seuls les en-têtes de réponse HTTP spécialement mentionnés
1095 ci-dessus seront réécrits. Apache httpd ne réécrira ni les autres en-têtes
1096 de réponse, ni les références d'URLs dans les pages HTML. Cela
1097 signifie que dans le cas où un contenu mandaté contient des
1098 références à des URLs absolues, elles court-circuiteront le
1099 mandataire. Le module <a
1100 href="http://apache.webthing.com/mod_proxy_html/">mod_proxy_html</a>
1101 de Nick Kew est un module tiers qui parcourt le code HTML et réécrit
1102 les références d'URL.</p>
1104 <p><var>chemin</var> est le nom d'un chemin virtuel local.
1105 <var>url</var> est une URL partielle pour le serveur distant - ils
1106 sont utilisés de la même façon qu'avec la directive <directive
1107 module="mod_proxy">ProxyPass</directive>.</p>
1109 <p>Supposons par exemple que le serveur local a pour adresse
1110 <code>http://example.com/</code> ; alors</p>
1113 ProxyPass /miroir/foo/ http://backend.example.com/<br />
1114 ProxyPassReverse /miroir/foo/ http://backend.example.com/<br />
1115 ProxyPassReverseCookieDomain backend.example.com public.example.com<br />
1116 ProxyPassReverseCookiePath / /miroir/foo/
1119 <p>ne va pas seulement provoquer la conversion interne d'une requête
1120 locale pour <code>http://example.com/miroir/foo/bar</code> en une
1121 requête mandatée pour <code>http://backend.example.com/bar</code>
1122 (la fonctionnalité fournie par <code>ProxyPass</code>). Il va
1123 aussi s'occuper des redirections que le serveur
1124 <code>backend.example.com</code> envoie : lorsque
1125 <code>http://backend.example.com/bar</code> est redirigé par
1126 celui-ci vers <code>http://backend.example.com/quux</code>, Apache
1127 httpd corrige ceci en <code>http://example.com/miroir/foo/quux</code>
1128 avant de faire suivre la redirection HTTP au client. Notez que le
1129 nom d'hôte utilisé pour construire l'URL est choisi en respectant la
1130 définition de la directive <directive
1131 module="core">UseCanonicalName</directive>.</p>
1133 <p>Notez que la directive <directive>ProxyPassReverse</directive>
1134 peut aussi être utilisée en conjonction avec la fonctionnalité
1135 pass-through (<code>RewriteRule ... [P]</code>) du module
1136 <module>mod_rewrite</module>, car elle ne dépend pas d'une directive
1137 <directive module="mod_proxy">ProxyPass</directive>
1140 <p>Le mot-clé optionnel <var>interpolate</var> (disponible depuis
1141 httpd 2.2.9), utilisé en combinaison avec la directive
1142 <directive>ProxyPassInterpolateEnv</directive>, permet
1143 l'interpolation des variables d'environnement spécifiées en
1144 utilisant le format <var>${VARNAME}</var>.
1147 <p>Lorsque cette directive est utilisée dans une section <directive
1148 type="section" module="core">Location</directive>, le premier
1149 argument est omis et le répertoire local est obtenu à partir de
1150 l'argument de la directive <directive type="section"
1151 module="core">Location</directive>.</p>
1153 </directivesynopsis>
1156 <name>ProxyPassReverseCookieDomain</name>
1157 <description>Ajuste la chaîne correspondant au domaine dans les en-têtes
1158 Set-Cookie en provenance d'un serveur mandaté</description>
1159 <syntax>ProxyPassReverseCookieDomain <var>domaine-interne</var>
1160 <var>domaine-public</var> [<var>interpolate</var>]</syntax>
1161 <contextlist><context>server config</context><context>virtual host</context>
1162 <context>directory</context>
1165 <p>L'utilisation de cette directive est similaire à celle de la
1166 directive <directive module="mod_proxy">ProxyPassReverse</directive>,
1167 mais au lieu de réécrire des en-têtes qui contiennent des URLs, elle
1168 réécrit la chaîne correspondant au domaine dans les en-têtes
1169 <code>Set-Cookie</code>.</p>
1171 </directivesynopsis>
1173 <name>ProxyPassReverseCookiePath</name>
1174 <description>Ajuste la chaîne correspondant au chemin dans les en-têtes
1175 Set-Cookie en provenance d'un serveur mandaté</description>
1176 <syntax>ProxyPassReverseCookiePath <var>chemin-interne</var>
1177 <var>chemin-public</var> [<var>interpolate</var>]</syntax>
1178 <contextlist><context>server config</context><context>virtual host</context>
1179 <context>directory</context>
1182 <p>L'utilisation de cette directive est similaire à celle de la
1183 directive <directive module="mod_proxy">ProxyPassReverse</directive>,
1184 mais au lieu de réécrire des en-têtes qui contiennent des URLs, elle
1185 réécrit la chaîne correspondant au <code>chemin</code> dans les en-têtes
1186 <code>Set-Cookie</code>.</p>
1188 </directivesynopsis>
1191 <name>ProxyBlock</name>
1192 <description>Termes, serveurs ou domaines bloqués par le
1193 mandataire</description>
1194 <syntax>ProxyBlock *|<var>terme</var>|<var>serveur</var>|<var>domaine</var>
1195 [<var>terme</var>|<var>serveur</var>|<var>domaine</var>] ...</syntax>
1196 <contextlist><context>server config</context><context>virtual host</context>
1200 <p>La directive <directive>ProxyBlock</directive> permet de
1201 spécifier une liste de termes, serveurs et/ou domaines, séparés par
1202 des espaces. Les requêtes de documents HTTP, HTTPS, FTP vers des
1203 sites dont les noms contiennent des termes, noms de serveur ou
1204 domaine correspondants seront <em>bloqués</em> par le serveur
1205 mandataire. La module proxy va aussi tenter de déterminer les
1206 adresses IP des éléments de la liste qui peuvent correspondre à des
1207 noms d'hôtes au cours du démarrage, et les mettra en cache à des
1208 fins de comparaisons ultérieures. Ceci peut ralentir le démarrage du
1211 <example><title>Exemple</title>
1212 ProxyBlock joes-garage.com some-host.co.uk rocky.wotsamattau.edu
1215 <p><code>rocky.wotsamattau.edu</code> aurait également correspondu s'il
1216 avait été spécifié par son adresse IP.</p>
1218 <p>Notez que <code>wotsamattau</code> aurait suffi pour correspondre
1219 à <code>wotsamattau.edu</code>.</p>
1221 <p>Notez aussi que</p>
1227 <p>bloque les connexions vers tous les sites.</p>
1229 </directivesynopsis>
1232 <name>ProxyReceiveBufferSize</name>
1233 <description>Taille du tampon réseau pour les connexions mandatées HTTP
1234 et FTP</description>
1235 <syntax>ProxyReceiveBufferSize <var>octets</var></syntax>
1236 <default>ProxyReceiveBufferSize 0</default>
1237 <contextlist><context>server config</context><context>virtual host</context>
1241 <p>La directive <directive>ProxyReceiveBufferSize</directive> permet
1242 de spécifier une taille de tampon réseau explicite (TCP/IP) pour les
1243 connexions mandatées HTTP et FTP, afin d'améliorer le débit de
1244 données. Elle doit être supérieure à <code>512</code> ou définie à
1245 <code>0</code> pour indiquer que la taille de tampon par défaut du
1246 système doit être utilisée.</p>
1248 <example><title>Exemple</title>
1249 ProxyReceiveBufferSize 2048
1252 </directivesynopsis>
1255 <name>ProxyIOBufferSize</name>
1256 <description>Détermine la taille du tampon interne de transfert de
1257 données</description>
1258 <syntax>ProxyIOBufferSize <var>octets</var></syntax>
1259 <default>ProxyIOBufferSize 8192</default>
1260 <contextlist><context>server config</context><context>virtual host</context>
1264 <p>La directive <directive>ProxyIOBufferSize</directive> permet
1265 d'ajuster la taille du tampon interne utilisé comme bloc-note pour
1266 les transferts de données entre entrée et sortie. La taille minimale
1267 est de <code>512</code> octets.</p>
1269 <p>Dans la plupart des cas, il n'y a aucune raison de modifier cette
1271 <p>Si elle est utilisée avec AJP, cette directive permet de définir
1272 la taille maximale du paquet AJP en octets. Si vous ne conservez pas
1273 la valeur par défaut, vous devez aussi modifier l'attribut
1274 <code>packetSize</code> de votre connecteur AJP du côté de Tomcat !
1275 L'attribut <code>packetSize</code> n'est disponible que dans Tomcat
1276 <code>5.5.20+</code> et <code>6.0.2+</code>.</p>
1277 <p>Il n'est normalement pas nécessaire de modifier la taille
1278 maximale du paquet. Des problèmes ont cependant été rapportés avec
1279 la valeur par défaut lors de l'envoi de certificats ou de chaînes de
1283 </directivesynopsis>
1286 <name>ProxyMaxForwards</name>
1287 <description>Nombre maximum de mandataires à travers lesquelles une
1288 requête peut être redirigée</description>
1289 <syntax>ProxyMaxForwards <var>nombre</var></syntax>
1290 <default>ProxyMaxForwards -1</default>
1291 <contextlist><context>server config</context><context>virtual host</context>
1293 <compatibility>Disponible depuis la version 2.0 du serveur HTTP Apache ; comportement par défaut
1294 modifié dans 2.2.7/2.3</compatibility>
1297 <p>La directive <directive>ProxyMaxForwards</directive> permet de
1298 spécifier le nombre maximum de mandataires à travers lesquels une
1299 requête peut passer dans le cas où la la requête ne contient pas
1300 d'en-tête <code>Max-Forwards</code>. Ceci permet de se prémunir
1301 contre les boucles infinies de mandataires ou contre les attaques de
1302 type déni de service.</p>
1304 <example><title>Exemple</title>
1308 <p>Notez que la définition de la directive
1309 <directive>ProxyMaxForwards</directive> constitue une violation du
1310 protocole HTTP/1.1 (RFC2616), qui interdit à un mandataire de
1311 définir <code>Max-Forwards</code> si le client ne l'a pas fait
1312 lui-même. Les versions précédentes d'Apache httpd la définissaient
1313 systématiquement. Une valeur négative de
1314 <directive>ProxyMaxForwards</directive>, y compris la valeur par
1315 défaut -1, implique un comportement compatible avec le protocole,
1316 mais vous expose aux bouclages infinis.</p>
1318 </directivesynopsis>
1321 <name>NoProxy</name>
1322 <description>Serveurs, domaines ou réseaux auquels on se connectera
1323 directement</description>
1324 <syntax>NoProxy <var>domaine</var> [<var>domaine</var>] ...</syntax>
1325 <contextlist><context>server config</context><context>virtual host</context>
1329 <p>Cette directive n'a d'utilité que pour les serveurs mandataires
1330 Apache httpd au sein d'Intranets. La directive
1331 <directive>NoProxy</directive> permet de spécifier une liste de
1332 sous-réseaux, d'adresses IP, de serveurs et/ou de domaines séparés
1333 par des espaces. Une requête pour un serveur qui correspond à un ou
1334 plusieurs critères sera toujours servie par ce serveur directement,
1335 sans être redirigée vers le(s) serveur(s) mandataire(s) défini(s) par
1336 la directive <directive
1337 module="mod_proxy">ProxyRemote</directive>.</p>
1339 <example><title>Exemple</title>
1340 ProxyRemote * http://pare-feu.example.com:81<br />
1341 NoProxy .example.com 192.168.112.0/21
1344 <p>Le type des arguments <var>serveur</var> de la directive
1345 <directive>NoProxy</directive> appartiennent à la liste suivante
1349 <!-- ===================== Domain ======================= -->
1350 <dt><var><a name="domain" id="domain">Domaine</a></var></dt>
1352 <p>Un <dfn>domaine</dfn> est ici un nom de domaine DNS partiellement
1353 qualifié précédé d'un point. Il représente une liste de serveurs qui
1354 appartiennent logiquement au même domaine ou à la même zonz DNS
1355 (en d'autres termes, les nom des serveurs se terminent tous par
1356 <var>domaine</var>).</p>
1358 <example><title>Exemple</title>
1362 <p>Pour faire la distinction entre <var>domaine</var>s et <var><a
1363 href="#hostname">nom d'hôte</a></var>s (des points de vue à la fois
1365 sémantique, un domaine DNS pouvant aussi avoir un enregistrement DNS
1366 de type A !), les <var>domaine</var>s sont toujours spécifiés en les
1367 préfixant par un point.</p>
1369 <note><title>Note</title>
1370 <p>Les comparaisons de noms de domaines s'effectuent sans tenir
1371 compte de la casse, et les parties droites des <var>Domaine</var>s
1372 sont toujours censées correspondre à la racine de l'arborescence
1373 DNS, si bien que les domaines <code>.ExEmple.com</code> et
1374 <code>.example.com.</code> (notez le point à la fin du nom) sont
1375 considérés comme identiques. Comme une comparaison de domaines ne
1376 nécessite pas de recherche DNS, elle est beaucoup plus efficace
1377 qu'une comparaison de sous-réseaux.</p>
1380 <!-- ===================== SubNet ======================= -->
1381 <dt><var><a name="subnet" id="subnet">Sous-réseau</a></var></dt>
1383 <p>Un <dfn>Sous-réseau</dfn> est une adresse internet partiellement
1384 qualifiée sous forme numérique (quatre nombres séparés par des
1385 points), optionnellement suivie d'un slash et du masque de
1386 sous-réseau spécifiant le nombre de bits significatifs dans le
1387 <var>Sous-réseau</var>. Il représente un sous-réseau de serveurs qui
1388 peuvent être atteints depuis la même interface réseau. En l'absence
1389 de masque de sous-réseau explicite, il est sous-entendu que les
1390 digits manquants (ou caractères 0) de fin spécifient le masque de
1391 sous-réseau (Dans ce cas, le masque de sous-réseau ne peut être
1392 qu'un multiple de 8). Voici quelques exemples :</p>
1395 <dt><code>192.168</code> ou <code>192.168.0.0</code></dt>
1396 <dd>le sous-réseau 192.168.0.0 avec un masque de sous-réseau
1397 implicite de 16 bits significatifs (parfois exprimé sous la forme
1398 <code>255.255.0.0</code>)</dd>
1399 <dt><code>192.168.112.0/21</code></dt>
1400 <dd>le sous-réseau <code>192.168.112.0/21</code> avec un masque de
1401 sous-réseau implicite de 21 bits significatifs (parfois exprimé
1402 sous la forme<code>255.255.248.0</code>)</dd>
1405 <p>Comme cas extrêmes, un <em>Sous-réseau</em> avec un masque de
1406 sous-réseau de 32 bits significatifs est équivalent à une <var><a
1407 href="#ipadr">adresse IP</a></var>, alors qu'un <em>Sous-réseau</em> avec un masque de
1408 sous-réseau de 0 bit significatif (c'est à dire 0.0.0.0/0) est
1409 identique à la constante <var>_Default_</var>, et peut correspondre
1410 à toute adresse IP.</p></dd>
1412 <!-- ===================== IPAddr ======================= -->
1413 <dt><var><a name="ipaddr" id="ipaddr">Adresse IP</a></var></dt>
1415 <p>Une <dfn>Adresse IP</dfn> est une adresse internet pleinement
1416 qualifiée sous forme numérique (quatre nombres séparés par des
1417 points). En général, cette adresse représente un serveur, mais elle
1418 ne doit pas nécessairement correspondre à un nom de domaine DNS.</p>
1419 <example><title>Exemple</title>
1423 <note><title>Note</title>
1424 <p>Une <dfn>Adresse IP</dfn> ne nécessite pas de résolution DNS,
1425 et peut ainsi s'avérer plus efficace quant aux performances
1429 <!-- ===================== Hostname ======================= -->
1430 <dt><var><a name="hostname" id="hostname">Nom de serveur</a></var></dt>
1432 <p>Un <dfn>Nom de serveur</dfn> est un nom de domaine DNS pleinement
1433 qualifié qui peut être résolu en une ou plusieurs adresses IP par le
1434 service de noms de domaines DNS. Il représente un hôte logique (par
1435 opposition aux <var><a href="#domain">Domaine</a></var>s, voir
1436 ci-dessus), et doit pouvoir être résolu en une ou plusieurs <var><a
1437 href="#ipaddr">adresses IP</a></var> (ou souvent en une liste
1438 d'hôtes avec différentes <var><a href="#ipaddr">adresses
1441 <example><title>Exemples</title>
1442 prep.ai.example.com<br />
1446 <note><title>Note</title>
1447 <p>Dans de nombreuses situations, il est plus efficace de
1448 spécifier une <var><a href="#ipaddr">adresse IP</a></var> qu'un
1449 <var>Nom de serveur</var> car cela évite d'avoir à effectuer une
1450 recherche DNS. La résolution de nom dans Apache httpd peut prendre un
1451 temps très long lorsque la connexion avec le serveur de noms
1452 utilise une liaison PPP lente.</p>
1453 <p>Les comparaisons de <var>Nom de serveur</var> s'effectuent sans tenir
1454 compte de la casse, et les parties droites des <var>Noms de serveur</var>
1455 sont toujours censées correspondre à la racine de l'arborescence
1456 DNS, si bien que les domaines <code>WWW.ExEmple.com</code> et
1457 <code>www.example.com.</code> (notez le point à la fin du nom) sont
1458 considérés comme identiques.</p>
1462 <seealso><a href="../dns-caveats.html">Problèmes liés au DNS</a></seealso>
1463 </directivesynopsis>
1466 <name>ProxyTimeout</name>
1467 <description>Délai d'attente réseau pour les requêtes
1468 mandatées</description>
1469 <syntax>ProxyTimeout <var>secondes</var></syntax>
1470 <default>Valeur de la directive <directive
1471 module="core">Timeout</directive></default>
1472 <contextlist><context>server config</context><context>virtual host</context>
1474 <compatibility>Disponible depuis la version 2.0.31 du serveur HTTP Apache</compatibility>
1477 <p>Cette directive permet à l'utilisateur de spécifier un délai pour
1478 les requêtes mandatées. Ceci s'avère utile dans le cas d'un serveur
1479 d'applications lent et bogué qui a tendance à se bloquer, et si vous
1480 préférez simplement renvoyer une erreur timeout et abandonner la
1481 connexion en douceur plutôt que d'attendre jusqu'à ce que le serveur
1482 veuille bien répondre.</p>
1484 </directivesynopsis>
1487 <name>ProxyDomain</name>
1488 <description>Nom de domaine par défaut pour les requêtes
1489 mandatées</description>
1490 <syntax>ProxyDomain <var>Domaine</var></syntax>
1491 <contextlist><context>server config</context><context>virtual host</context>
1495 <p>Cette directive n'a d'utilité que pour les serveurs mandataires
1496 Apache httpd au sein d'un Intranet. La directive
1497 <directive>ProxyDomain</directive> permet de spécifier le domaine
1498 par défaut auquel le serveur mandataire apache appartient. Si le
1499 serveur reçoit une requête pour un hôte sans nom de domaine, il va
1500 générer une réponse de redirection vers le même hôte suffixé par le
1501 <var>Domaine</var> spécifié.</p>
1503 <example><title>Exemple</title>
1504 ProxyRemote * http://firewall.example.com:81<br />
1505 NoProxy .example.com 192.168.112.0/21<br />
1506 ProxyDomain .example.com
1509 </directivesynopsis>
1512 <name>ProxyVia</name>
1513 <description>Information fournie dans l'en-tête de réponse HTTP
1514 <code>Via</code> pour les requêtes mandatées</description>
1515 <syntax>ProxyVia On|Off|Full|Block</syntax>
1516 <default>ProxyVia Off</default>
1517 <contextlist><context>server config</context><context>virtual host</context>
1521 <p>Cette directive permet de contrôler l'utilisation de l'en-tête
1522 HTTP <code>Via:</code> par le mandataire. Le but recherché est de
1523 contrôler le flux des requêtes mandatées tout au long d'une chaîne
1524 de serveurs mandataires. Voir <a
1525 href="http://www.ietf.org/rfc/rfc2616.txt">RFC 2616</a> (HTTP/1.1),
1526 section 14.45 pour une description des lignes d'en-tête
1527 <code>Via:</code>.</p>
1530 <li>Si elle est définie à <code>Off</code>, valeur par défaut, cette
1531 directive n'effectue aucun traitement particulier. Si une requête ou
1532 une réponse contient un en-tête <code>Via:</code>, il est transmis
1533 sans modification.</li>
1535 <li>Si elle est définie à <code>On</code>, chaque requête ou réponse
1536 se verra ajouter une ligne d'en-tête <code>Via:</code> pour le
1537 serveur courant.</li>
1539 <li>Si elle est définie à <code>Full</code>, chaque ligne d'en-tête
1540 <code>Via:</code> se verra ajouter la version du serveur Apache
1541 httpd sous la forme d'un champ de commentaire <code>Via:</code>.</li>
1543 <li>Si elle est définie à <code>Block</code>, chaque requête
1544 mandatée verra ses lignes d'en-tête <code>Via:</code> supprimées.
1545 Aucun nouvel en-tête <code>Via:</code> ne sera généré.</li>
1548 </directivesynopsis>
1551 <name>ProxyErrorOverride</name>
1552 <description>Outrepasser les pages d'erreur pour les contenus
1553 mandatés</description>
1554 <syntax>ProxyErrorOverride On|Off</syntax>
1555 <default>ProxyErrorOverride Off</default>
1556 <contextlist><context>server config</context><context>virtual host</context>
1558 <compatibility>Disponible depuis la version 2.0 d'Apache</compatibility>
1561 <p>Cette directive est utile pour les configurations de mandataires
1562 inverses, lorsque vous souhaitez que les pages d'erreur envoyées
1563 aux utilisateurs finaux présentent un aspect homogène. Elle permet
1564 aussi l'inclusion de fichiers (via les SSI de
1565 <module>mod_include</module>) pour obtenir le code d'erreur et agir
1566 en conséquence (le comportement par défaut afficherait la page
1567 d'erreur du serveur mandaté, alors que c'est le message d'erreur SSI
1568 qui sera affiché si cette directive est à "on").</p>
1570 <p>Cette directive n'affecte pas le traitement des réponses
1571 informatives (1xx), de type succès normal (2xx), ou de redirection
1574 </directivesynopsis>
1577 <name>ProxyPassInterpolateEnv</name>
1578 <description>Active l'interpolation des variables d'environnement dans
1579 les configurations de mandataires inverses</description>
1580 <syntax>ProxyPassInterpolateEnv On|Off</syntax>
1581 <default>ProxyPassInterpolateEnv Off</default>
1582 <contextlist><context>server config</context> <context>virtual host</context>
1583 <context>directory</context>
1585 <compatibility>Disponible depuis la version 2.2.9 d'Apache</compatibility>
1588 <p>Cette directive, ainsi que l'argument <var>interpolate</var> des
1589 directives <directive>ProxyPass</directive>,
1590 <directive>ProxyPassReverse</directive>,
1591 <directive>ProxyPassReverseCookieDomain</directive> et
1592 <directive>ProxyPassReverseCookiePath</directive>, permet de
1593 configurer dynamiquement un mandataire inverse à l'aide de
1594 variables d'environnement, ces dernières pouvant être définies par un
1595 autre module comme <module>mod_rewrite</module>. Elle affecte les
1596 directives <directive>ProxyPass</directive>,
1597 <directive>ProxyPassReverse</directive>,
1598 <directive>ProxyPassReverseCookieDomain</directive>, et
1599 <directive>ProxyPassReverseCookiePath</directive>, en leur indiquant
1600 de remplacer la chaîne <code>${nom_var}</code> dans les directives
1601 de configuration par la valeur de la variable d'environnement
1602 <code>nom_var</code>.</p>
1603 <p>Conservez cette directive à off (pour les performances du
1604 serveur), sauf si vous en avez réellement besoin.</p>
1606 </directivesynopsis>
1609 <name>ProxyStatus</name>
1610 <description>Affiche l'état du répartiteur de charge du mandataire dans
1611 mod_status</description>
1612 <syntax>ProxyStatus Off|On|Full</syntax>
1613 <default>ProxyStatus Off</default>
1614 <contextlist><context>server config</context>
1615 <context>virtual host</context>
1617 <compatibility>Disponible depuis la version 2.2 d'Apache</compatibility>
1620 <p>Cette directive permet de spécifier si les données d'état du
1621 répartiteur de charge du mandataire doivent être affichées via la
1622 page d'état du serveur du module <module>mod_status</module>.</p>
1623 <note><title>Note</title>
1624 <p>L'argument <strong>Full</strong> produit le même effet que
1625 l'argument <strong>On</strong>.</p>
1629 </directivesynopsis>