1 <?xml version='1.0' encoding='ISO-8859-1' ?>
2 <!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
3 <?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?>
4 <!-- English Revision: 420990:618551 (outdated) -->
5 <!-- French translation by Vincent Deffontaines, Alain B., review by -->
8 Licensed to the Apache Software Foundation (ASF) under one or more
9 contributor license agreements. See the NOTICE file distributed with
10 this work for additional information regarding copyright ownership.
11 The ASF licenses this file to You under the Apache License, Version 2.0
12 (the "License"); you may not use this file except in compliance with
13 the License. You may obtain a copy of the License at
15 http://www.apache.org/licenses/LICENSE-2.0
17 Unless required by applicable law or agreed to in writing, software
18 distributed under the License is distributed on an "AS IS" BASIS,
19 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
20 See the License for the specific language governing permissions and
21 limitations under the License.
24 <manualpage metafile="examples.xml.meta">
25 <parentdocument href="./">Serveurs virtuels</parentdocument>
26 <title>Exemples d'utilisations de VirtualHost</title>
30 <p>Le but de ce document est d'essayer de répondre aux questions
31 les plus répandues sur la configuration des serveurs virtuels.
32 Les scénarios présentés ici se rencontrent quand plusieurs
33 serveurs Webs doivent tourner sur une seule et même machine au
34 moyen de serveurs virtuels <a href="name-based.html">par nom</a>
35 ou <a href="ip-based.html">par IP</a>.</p>
39 <section id="purename"><title>Fonctionnement de plusieurs serveurs
40 virtuels par nom sur une seule adresse IP.</title>
42 <p>Votre serveur ne dispose que d'une seule adresse IP, et de
43 nombreux alias (CNAMES) pointent vers cette adresse dans le DNS.
44 Pour l'exemple, <code>www.example1.com</code> et
45 <code>www.example2.org</code> doivent tourner sur cette machine.</p>
47 <note><title>Note :</title><p>La configuration de serveurs virtuels
48 sous Apache ne provoque pas leur apparition magique dans la
49 configuration du DNS. Il <em>faut</em> que leurs noms soient
50 définis dans le DNS, et qu'ils y soient résolus sur l'adresse IP
51 du serveur, faute de quoi personne ne pourra visiter votre site Web.
52 Il est possible d'ajouter des entrées dans le fichier
53 <code>hosts</code> pour tests locaux, mais qui ne fonctionneront
54 que sur la machine possédant ces entrées.</p>
58 <title>Configuration du serveur</title>
60 # Apache doit écouter sur le port 80<br />
63 # Toutes les adresses IP doivent répondre aux requêtes sur les
65 NameVirtualHost *:80<br />
67 <VirtualHost *:80><br />
69 DocumentRoot /www/example1<br />
70 ServerName www.example1.com<br />
72 # Autres directives ici<br />
75 </VirtualHost><br />
77 <VirtualHost *:80><br />
79 DocumentRoot /www/example2<br />
80 ServerName www.example2.org<br />
82 # Autres directives ici<br />
88 <p>Les astérisques correspondent à toutes les adresses, si bien que
89 le serveur principal ne répondra jamais à aucune requête. Comme
90 <code>www.example1.com</code> se trouve en premier dans le fichier
91 de configuration, il a la plus grande priorité et peut être vu
92 comme serveur <cite>par défaut</cite> ou <cite>primaire</cite> ;
93 ce qui signifie que toute requête reçue ne correspondant pas à une
94 des directives <code>ServerName</code> sera servie par ce premier
95 <code>VirtualHost</code>.</p>
98 <title>Note :</title>
100 <p>Si vous le souhaitez, vous pouvez remplacer <code>*</code>
101 par l'adresse IP du système. Dans ce cas, l'argument de
102 <code>VirtualHost</code> <em>doit</em> correspondre à
103 l'argument de <code>NameVirtualHost</code> :</p>
106 NameVirtualHost 172.20.30.40<br />
108 <VirtualHost 172.20.30.40><br />
112 <p>En général, il est commode d'utiliser <code>*</code> sur
113 les systèmes dont l'adresse IP n'est pas constante - par
114 exemple, pour des serveurs dont l'adresse IP est attribuée
115 dynamiquement par le FAI, et où le DNS est géré au moyen
116 d'un DNS dynamique quelconque. Comme <code>*</code> signifie
117 <cite>n'importe quelle adresse</cite>, cette configuration
118 fonctionne sans devoir être modifiée quand l'adresse IP du
119 système est modifiée.</p>
122 <p>La configuration ci-dessus est en pratique utilisée dans la
123 plupart des cas pour les serveurs virtuels par nom. En fait, le
124 seul cas où cette configuration ne fonctionne pas est lorsque
125 différents contenus doivent être servis en fonction de l'adresse IP
126 et du port contactés par le client.</p>
130 <section id="twoips"><title>Serveurs virtuels par nom sur plus
131 d'une seule adresse IP.</title>
134 <title>Note :</title><p>Toutes les techniques présentées ici
135 peuvent être étendues à un plus grand nombre d'adresses IP.</p>
138 <p>Le serveur a deux adresses IP. Sur l'une
139 (<code>172.20.30.40</code>), le serveur "principal"
140 <code>server.domain.com</code> doit répondre, et sur l'autre
141 (<code>172.20.30.50</code>), deux serveurs virtuels (ou plus)
145 <title>Configuration du serveur</title>
149 # Serveur "principal" sur 172.20.30.40<br />
150 ServerName server.domain.com<br />
151 DocumentRoot /www/mainserver<br />
153 # l'autre adresse <br />
154 NameVirtualHost 172.20.30.50<br />
156 <VirtualHost 172.20.30.50><br />
158 DocumentRoot /www/example1<br />
159 ServerName www.example1.com<br />
161 # D'autres directives ici ...<br />
164 </VirtualHost><br />
166 <VirtualHost 172.20.30.50><br />
168 DocumentRoot /www/example2<br />
169 ServerName www.example2.org<br />
171 # D'autres directives ici ...<br />
177 <p>Toute requête arrivant sur une autre adresse que
178 <code>172.20.30.50</code> sera servie par le serveur principal.
179 Les requêtes vers <code>172.20.30.50</code> avec un nom de serveur
180 inconnu, ou sans en-tête <code>Host:</code>, seront servies par
181 <code>www.example1.com</code>.</p>
185 <section id="intraextra"><title>Servir le même contenu sur des
186 adresses IP différentes (telle qu'une adresse interne et une
189 <p>La machine serveur dispose de deux adresses IP
190 (<code>192.168.1.1</code> et <code>172.20.30.40</code>). Cette
191 machine est placée à la fois sur le réseau interne (l'Intranet)
192 et le réseau externe (Internet). Sur Internet, le nom
193 <code>server.example.com</code> pointe vers l'adresse externe
194 (<code>172.20.30.40</code>), mais sur le réseau interne, ce même
195 nom pointe vers l'adresse interne (<code>192.168.1.1</code>).</p>
197 <p>Le serveur peut être configuré pour répondre de la même manière
198 aux requêtes internes et externes, au moyen d'une seule section
199 <code>VirtualHost</code>.</p>
202 <title>Configuration du serveur</title>
204 NameVirtualHost 192.168.1.1<br />
205 NameVirtualHost 172.20.30.40<br />
207 <VirtualHost 192.168.1.1 172.20.30.40><br />
209 DocumentRoot /www/server1<br />
210 ServerName server.example.com<br />
211 ServerAlias server<br />
216 <p>Ainsi, les requêtes en provenance de chacun des deux réseaux
217 seront servies par le même <code>VirtualHost</code>.</p>
220 <title>Note :</title><p>Sur le réseau interne, il est possible
221 d'utiliser le nom raccourci <code>server</code> au lieu du nom
222 complet <code>server.example.com</code>.</p>
224 <p>Notez également que dans l'exemple précédent, vous pouvez
225 remplacer la liste des adresses IP par des <code>*</code> afin
226 que le serveur réponde de la même manière sur toutes ses
232 <section id="port"><title>Servir différents sites sur différents
235 <p>Vous disposez de plusieurs domaines pointant sur la même adresse
236 IP et vous voulez également servir de multiples ports. Vous y
237 parviendrez en définissant les ports dans la directive
238 "NameVirtualHost". Si vous tentez d'utiliser <VirtualHost
239 name:port> sans directive NameVirtualHost name:port, ou tentez
240 d'utiliser la directive Listen, votre configuration ne fonctionnera
244 <title>Configuration du serveur</title>
249 NameVirtualHost 172.20.30.40:80<br />
250 NameVirtualHost 172.20.30.40:8080<br />
252 <VirtualHost 172.20.30.40:80><br />
254 ServerName www.example1.com<br />
255 DocumentRoot /www/domain-80<br />
257 </VirtualHost><br />
259 <VirtualHost 172.20.30.40:8080><br />
261 ServerName www.example1.com<br />
262 DocumentRoot /www/domain-8080<br />
264 </VirtualHost><br />
266 <VirtualHost 172.20.30.40:80><br />
268 ServerName www.example2.org<br />
269 DocumentRoot /www/otherdomain-80<br />
271 </VirtualHost><br />
273 <VirtualHost 172.20.30.40:8080><br />
275 ServerName www.example2.org<br />
276 DocumentRoot /www/otherdomain-8080<br />
283 <section id="ip"><title>Hébergement virtuel basé sur IP</title>
285 <p>Le serveur dispose de deux adresses IP (<code>172.20.30.40</code>
286 et <code>172.20.30.50</code>) correspondant respectivement aux noms
287 <code>www.example1.com</code> et <code>www.example2.org</code>.</p>
290 <title>Configuration du serveur</title>
294 <VirtualHost 172.20.30.40><br />
296 DocumentRoot /www/example1<br />
297 ServerName www.example1.com<br />
299 </VirtualHost><br />
301 <VirtualHost 172.20.30.50><br />
303 DocumentRoot /www/example2<br />
304 ServerName www.example2.org<br />
309 <p>Les requêtes provenant d'adresses non spécifiées dans l'une des
310 directives <code><VirtualHost></code> (comme pour
311 <code>localhost</code> par exemple) seront dirigées vers le serveur
312 principal, s'il en existe un.</p>
316 <section id="ipport"><title>Hébergements virtuels mixtes basés sur
317 les ports et sur les IP</title>
319 <p>Le serveur dispose de deux adresses IP (<code>172.20.30.40</code>
320 et <code>172.20.30.50</code>) correspondant respectivement aux noms
321 <code>www.example1.com</code> et <code>www.example2.org</code>.
322 Pour chacun d'eux, nous voulons un hébergement sur les ports 80
326 <title>Configuration du serveur</title>
328 Listen 172.20.30.40:80<br />
329 Listen 172.20.30.40:8080<br />
330 Listen 172.20.30.50:80<br />
331 Listen 172.20.30.50:8080<br />
333 <VirtualHost 172.20.30.40:80><br />
335 DocumentRoot /www/example1-80<br />
336 ServerName www.example1.com<br />
338 </VirtualHost><br />
340 <VirtualHost 172.20.30.40:8080><br />
342 DocumentRoot /www/example1-8080<br />
343 ServerName www.example1.com<br />
345 </VirtualHost><br />
347 <VirtualHost 172.20.30.50:80><br />
349 DocumentRoot /www/example2-80<br />
350 ServerName www.example1.org<br />
352 </VirtualHost><br />
354 <VirtualHost 172.20.30.50:8080><br />
356 DocumentRoot /www/example2-8080<br />
357 ServerName www.example2.org<br />
364 <section id="mixed"><title>Hébergements virtuels mixtes basé sur
365 les noms et sur IP</title>
367 <p>Pour certaines adresses, des serveurs virtuels seront définis
368 par nom, et pour d'autres, ils seront définis par IP.</p>
371 <title>Configuration du serveur</title>
375 NameVirtualHost 172.20.30.40<br />
377 <VirtualHost 172.20.30.40><br />
379 DocumentRoot /www/example1<br />
380 ServerName www.example1.com<br />
382 </VirtualHost><br />
384 <VirtualHost 172.20.30.40><br />
386 DocumentRoot /www/example2<br />
387 ServerName www.example2.org<br />
389 </VirtualHost><br />
391 <VirtualHost 172.20.30.40><br />
393 DocumentRoot /www/example3<br />
394 ServerName www.example3.net<br />
396 </VirtualHost><br />
399 <VirtualHost 172.20.30.50><br />
401 DocumentRoot /www/example4<br />
402 ServerName www.example4.edu<br />
404 </VirtualHost><br />
406 <VirtualHost 172.20.30.60><br />
408 DocumentRoot /www/example5<br />
409 ServerName www.example5.gov<br />
416 <section id="proxy"><title>Utilisation simultanée de
417 <code>Virtual_host</code> et de mod_proxy</title>
419 <p>L'exemple suivant montre comment une machine peut mandater
420 un serveur virtuel fonctionnant sur le serveur d'une autre machine.
421 Dans cet exemple, un serveur virtuel de même nom est configuré sur
422 une machine à l'adresse <code>192.168.111.2</code>. La directive
423 <directive module="mod_proxy">ProxyPreserveHost On</directive> est
424 employée pour permette au nom de domaine d'être préservé lors du
425 transfert, au cas où plusieurs noms de domaines cohabitent sur
426 une même machine.</p>
429 <VirtualHost *:*><br />
430 ProxyPreserveHost On<br />
431 ProxyPass / http://192.168.111.2<br />
432 ProxyPassReverse / http://192.168.111.2/<br />
433 ServerName hostname.example.com<br />
439 <section id="default"><title>Utilisation de serveurs virtuels
440 <code>_default_</code></title>
442 <section id="defaultallports"><title>Serveurs virtuels
443 <code>_default_</code> pour tous les ports</title>
445 <p>Exemple de capture de <em>toutes</em> les requêtes émanant
446 d'adresses IP ou de ports non connus, <em>c'est-à-dire</em>, d'un
447 couple adresse/port non traité par aucun autre serveur virtuel.</p>
450 <title>Configuration du serveur</title>
452 <VirtualHost _default_:*><br />
454 DocumentRoot /www/default<br />
459 <p>L'utilisation d'un tel serveur virtuel avec un joker pour le
460 port empêche de manière efficace qu'une requête n'atteigne le
461 serveur principal.</p>
463 <p>Un serveur virtuel par défaut ne servira jamais une requête
464 qui est envoyée vers un couple adresse/port utilisée par un
465 serveur virtuel par nom. Si la requête contient un en-tête
466 <code>Host:</code> inconnu, ou si celui-ci est absent, elle
467 sera toujours servie par le serveur virtuel primaire par nom
468 (celui correspondant à ce couple adresse/port trouvé en premier
469 dans le fichier de configuration).</p>
471 <p>Vous pouvez utiliser une directive
472 <directive module="mod_alias">AliasMatch</directive> ou
473 <directive module="mod_rewrite">RewriteRule</directive> afin de
474 réécrire une requête pour une unique page d'information (ou pour
478 <section id="defaultdifferentports"><title>Serveurs virtuels
479 <code>_default_</code> pour des ports différents</title>
481 <p>La configuration est similaire à l'exemple précédent, mais
482 le serveur écoute sur plusieurs ports et un second serveur virtuel
483 <code>_default_</code> pour le port 80 est ajouté.</p>
486 <title>Configuration du serveur</title>
488 <VirtualHost _default_:80><br />
490 DocumentRoot /www/default80<br />
493 </VirtualHost><br />
495 <VirtualHost _default_:*><br />
497 DocumentRoot /www/default<br />
503 <p>Le serveur virtuel par défaut défini pour le port 80 (il doit
504 impérativement être placé avant un autre serveur virtuel par
505 défaut traitant tous les ports grâce au joker *) capture toutes
506 les requêtes envoyées sur une adresse IP non spécifiée. Le
507 serveur principal n'est jamais utilisé pour servir une requête.</p>
510 <section id="defaultoneport"><title>Serveurs virtuels
511 <code>_default_</code> pour un seul port</title>
513 <p>Nous voulons créer un serveur virtuel par défaut seulement
517 <title>Configuration du serveur</title>
519 <VirtualHost _default_:80><br />
520 DocumentRoot /www/default<br />
525 <p>Une requête vers une adresse non spécifiée sur le port 80
526 sera servie par le serveur virtuel par défaut, et toute autre
527 requête vers une adresse et un port non spécifiés sera servie
528 par le serveur principal.</p>
533 <section id="migrate"><title>Migration d'un serveur virtuel
534 par nom en un serveur virtuel par IP</title>
536 <p>Le serveur virtuel par nom avec le nom de domaine
537 <code>www.example2.org</code> (de notre <a href="#name">exemple
538 par nom</a>) devrait obtenir sa propre adresse IP. Pendant la
539 phase de migration, il est possible d'éviter les problèmes avec
540 les noms de serveurs et autres serveurs mandataires qui mémorisent
541 les vielles adresses IP pour les serveurs virtuels par nom.<br />
542 La solution est simple, car il suffit d'ajouter la nouvelle
543 adresse IP (<code>172.20.30.50</code>) dans la directive
544 <code>VirtualHost</code>.</p>
547 <title>Configuration du serveur</title>
550 ServerName www.example1.com<br />
551 DocumentRoot /www/example1<br />
553 NameVirtualHost 172.20.30.40<br />
555 <VirtualHost 172.20.30.40 172.20.30.50><br />
557 DocumentRoot /www/example2<br />
558 ServerName www.example2.org<br />
561 </VirtualHost><br />
563 <VirtualHost 172.20.30.40><br />
565 DocumentRoot /www/example3<br />
566 ServerName www.example3.net<br />
567 ServerAlias *.example3.net<br />
573 <p>Le serveur virtuel peut maintenant être joint par la nouvelle
574 adresse (comme un serveur virtuel par IP) et par l'ancienne
575 adresse (comme un serveur virtuel par nom).</p>
579 <section id="serverpath"><title>Utilisation de la directive
580 <code>ServerPath</code></title>
582 <p>Dans le cas où vous disposez de deux serveurs virtuels par nom,
583 le client doit transmettre un en-tête <code>Host:</code> correct
584 pour déterminer le serveur concerné. Les vieux clients HTTP/1.0
585 n'envoient pas un tel en-tête et Apache n'a aucun indice pour
586 connaître le serveur virtuel devant être joint (il sert la
587 requête à partir d'un serveur virtuel primaire). Dans un soucis
588 de préserver la compatibilité descendante, il suffit de créer
589 un serveur virtuel primaire chargé de retourner une page contenant
590 des liens dont les URLs auront un préfixe identifiant les serveurs
591 virtuels par nom.</p>
594 <title>Configuration du serveur</title>
596 NameVirtualHost 172.20.30.40<br />
598 <VirtualHost 172.20.30.40><br />
600 # Serveur virtuel primaire<br />
601 DocumentRoot /www/subdomain<br />
602 RewriteEngine On<br />
603 RewriteRule ^/.* /www/subdomain/index.html<br />
606 </VirtualHost><br />
608 <VirtualHost 172.20.30.40><br />
609 DocumentRoot /www/subdomain/sub1<br />
611 ServerName www.sub1.domain.tld<br />
612 ServerPath /sub1/<br />
613 RewriteEngine On<br />
614 RewriteRule ^(/sub1/.*) /www/subdomain$1<br />
617 </VirtualHost><br />
619 <VirtualHost 172.20.30.40><br />
621 DocumentRoot /www/subdomain/sub2<br />
622 ServerName www.sub2.domain.tld<br />
623 ServerPath /sub2/<br />
624 RewriteEngine On<br />
625 RewriteRule ^(/sub2/.*) /www/subdomain$1<br />
631 <p>À cause de la directive
632 <directive module="core">ServerPath</directive>, une requête sur
633 une URL <code>http://www.sub1.domain.tld/sub1/</code> est
634 <em>toujours</em> servie par le serveur sub1-vhost.<br />
635 Une requête sur une URL <code>http://www.sub1.domain.tld/</code> n'est
636 servie par le serveur sub1-vhost que si le client envoie un en-tête
637 <code>Host:</code> correct. Si aucun en-tête <code>Host:</code>
638 n'est transmis, le serveur primaire sera utilisé.<br />
639 Notez qu'il y a une singularité : une requête sur
640 <code>http://www.sub2.domain.tld/sub1/</code> est également servie
641 par le serveur sub1-vhost si le client n'envoie pas d'en-tête
642 <code>Host:</code>.<br />
643 Les directives <directive module="mod_rewrite">RewriteRule</directive>
644 sont employées pour s'assurer que le client qui envoie un en-tête
645 <code>Host:</code> correct puisse utiliser d'autres variantes d'URLs,
646 <em>c'est-à-dire</em> avec ou sans préfixe d'URL.</p>