]> granicus.if.org Git - apache/blob - docs/manual/vhosts/mass.xml.fr
Updated vhost .fr translations, and added the mass missing file.
[apache] / docs / manual / vhosts / mass.xml.fr
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 : 659902 -->
5 <!-- French translation : Lucien GENTIS -->
6
7 <!--
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
14
15      http://www.apache.org/licenses/LICENSE-2.0
16
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.
22 -->
23
24 <manualpage metafile="mass.xml.meta">
25 <parentdocument href="./">H&eacute;bergement virtuel</parentdocument>
26    <title>H&eacute;bergement virtuel de masse configur&eacute; dynamiquement</title>
27
28 <summary>
29
30     <p>Ce document propose une m&eacute;thode performante pour servir un nombre
31     quelconque d'h&ocirc;tes virtuels avec le serveur web httpd Apache.
32     </p>
33
34 </summary>
35
36 <section id="motivation"><title>A qui ce document est-il destin&eacute; ?</title>
37
38     <p>Les techniques d&eacute;crites ici vous concernent si votre
39     <code>httpd.conf</code> contient de nombreuses sections
40     <code>&lt;VirtualHost&gt;</code> tr&egrave;s semblables,
41     dans le style :</p>
42
43 <example>
44 NameVirtualHost 111.22.33.44<br />
45 &lt;VirtualHost 111.22.33.44&gt;<br />
46 <indent>
47     ServerName                 www.customer-1.com<br />
48     DocumentRoot        /www/hosts/www.customer-1.com/docs<br />
49     ScriptAlias  /cgi-bin/  /www/hosts/www.customer-1.com/cgi-bin<br />
50 </indent>
51 &lt;/VirtualHost&gt;<br />
52 &lt;VirtualHost 111.22.33.44&gt;<br />
53 <indent>
54     ServerName                 www.customer-2.com<br />
55     DocumentRoot        /www/hosts/www.customer-2.com/docs<br />
56     ScriptAlias  /cgi-bin/  /www/hosts/www.customer-2.com/cgi-bin<br />
57 </indent>
58 &lt;/VirtualHost&gt;<br />
59 # bla bla bla<br />
60 &lt;VirtualHost 111.22.33.44&gt;<br />
61 <indent>
62     ServerName                 www.customer-N.com<br />
63     DocumentRoot        /www/hosts/www.customer-N.com/docs<br />
64     ScriptAlias  /cgi-bin/  /www/hosts/www.customer-N.com/cgi-bin<br />
65 </indent>
66 &lt;/VirtualHost&gt;
67 </example>
68
69     <p>L'id&eacute;e de base consiste &agrave; remplacer toutes les configurations
70     <code>&lt;VirtualHost&gt;</code> par un m&eacute;canisme qui les g&eacute;n&egrave;re
71     dynamiquement. Ceci pr&eacute;sente certains avantages :</p>
72
73     <ol>
74       <li>Votre fichier de configuration est plus petit, ainsi Apache
75       d&eacute;marre plus rapidement et consomme moins de m&eacute;moire.</li>
76
77       <li>Pour ajouter des serveurs virtuels, il suffit de cr&eacute;er les
78       r&eacute;pertoires appropri&eacute;s dans le syst&egrave;me de fichiers et les entr&eacute;es
79       dans le DNS - il n'est plus n&eacute;cessaire de reconfigurer ou de
80       red&eacute;marrer Apache.</li>
81     </ol>
82
83     <p>Le principal d&eacute;savantage r&eacute;side dans le fait que vous ne pouvez
84     pas d&eacute;finir un fichier journal diff&eacute;rent pour chaque serveur
85     virtuel. De toute fa&ccedil;on, ce serait une mauvaise id&eacute;e si vous avez de
86     nombreux serveurs virtuels, car cela n&eacute;cessiterait un nombre
87     important de descripteurs de fichiers. Il est pr&eacute;f&eacute;rable de
88     rediriger les journaux via un pipe ou une pile fifo vers un
89     programme, et faire en sorte que ce dernier distribue les journaux
90     les concernant aux diff&eacute;rents clients (Ce qui peut aussi servir &agrave;
91     accumuler des donn&eacute;es &agrave; des fins de statistiques, etc...).</p>
92
93 </section>
94
95 <section id="overview"><title>Vue d'ensemble</title>
96
97     <p>Un serveur virtuel peut &ecirc;tre d&eacute;fini par deux informations : son
98     adresse IP, et le contenu de l'en-t&ecirc;te <code>Host:</code> de la
99     requ&ecirc;te HTTP. La technique d'h&eacute;bergement virtuel dynamique de masse
100     utilis&eacute;e ici consiste &agrave; ins&eacute;rer automatiquement ces informations
101     dans le chemin du fichier &agrave; utiliser pour r&eacute;pondre &agrave; la requ&ecirc;te. On
102     peut y parvenir assez facilement en utilisant
103     <module>mod_vhost_alias</module> avec Apache 2.0, mais on peut aussi
104     utiliser <module>mod_rewrite</module>. Par d&eacute;faut, ces deux modules
105     sont d&eacute;sactiv&eacute;s ; vous devez activer l'un d'eux lors de la
106     compilation et de la configuration d'Apache si vous voulez utiliser
107     cette technique.</p>
108
109     <p>Certains param&egrave;tres doivent &ecirc;tre adapt&eacute;s pour que le serveur
110     dynamique se pr&eacute;sente comme un serveur dynamique normal. Le plus
111     important est le nom du serveur, qu'Apache utilise pour g&eacute;n&eacute;rer des
112     URLs d'auto-r&eacute;f&eacute;rencement, etc... Il est d&eacute;fini via la directive
113     <code>ServerName</code>, et les CGIs peuvent s'y r&eacute;f&eacute;rer via la
114     variable d'environnement <code>SERVER_NAME</code>. Sa v&eacute;ritable
115     valeur utilis&eacute;e &agrave; l'ex&eacute;cution est contr&ocirc;l&eacute;e par la d&eacute;finition de la
116     directive
117     <directive module="core">UseCanonicalName</directive>. Avec
118     <code>UseCanonicalName Off</code>, le nom du serveur correspond au
119     contenu de l'en-t&ecirc;te <code>Host:</code> de la requ&ecirc;te. Avec
120     <code>UseCanonicalName DNS</code>, il est extrait d'une recherche
121     DNS inverse sur l'adresse IP du serveur virtuel. La premi&egrave;re
122     configuration est utilis&eacute;e pour l'h&eacute;bergement virtuel dynamique par
123     nom, et la deuxi&egrave;me pour l'h&eacute;bergement virtuel dynamique par IP. Si
124     Apache ne peut pas d&eacute;terminer le nom du serveur, soit parce qu'il
125     n'y a pas d'en-t&ecirc;te <code>Host:</code>, soit parce que la recherche
126     DNS a &eacute;chou&eacute;, il prend en compte la valeur d&eacute;finie par la directive
127     <code>ServerName</code>.</p>
128
129     <p>L'autre param&egrave;tre &agrave; adapter est la racine des documents (d&eacute;finie
130     via la directive <code>DocumentRoot</code> et disponible pour les
131     CGIs via la variable d'environnement <code>DOCUMENT_ROOT</code>).
132     Dans une configuration classique, il est utilis&eacute; par le module core
133     pour faire correspondre les URIs aux noms de fichiers, mais lorsque
134     la configuration du serveur comporte des serveurs virtuels, ce
135     traitement doit &ecirc;tre pris en charge par un autre module (soit
136     <code>mod_vhost_alias</code>, soit <code>mod_rewrite</code>), qui
137     utilise un m&eacute;thode de correspondance diff&eacute;rente. Aucun de ces
138     modules ne se chargeant de d&eacute;finir la variable d'environnement
139     <code>DOCUMENT_ROOT</code>, si des CGIs ou des documents SSI
140     doivent en faire usage, ils obtiendront une valeur erron&eacute;e.</p>
141
142 </section>
143
144 <section id="simple"><title>M&eacute;thode simple d'h&eacute;bergement virtuel
145 dynamique</title>
146
147     <p>Cet extrait de fichier <code>httpd.conf</code> impl&eacute;mente
148     l'h&eacute;bergement virtuel d&eacute;crit dans la section <a
149     href="#motivation">&Agrave; qui ce document est-il destin&eacute; ?</a> ci-dessus,
150     mais selon une m&eacute;thode g&eacute;n&eacute;rique utilisant
151     <code>mod_vhost_alias</code>.</p>
152
153 <example>
154 # extrait le nom du serveur de l'en-t&ecirc;te Host:<br />
155 UseCanonicalName Off<br />
156 <br />
157 # ce format de journal peut &ecirc;tre &eacute;clat&eacute; en journaux par serveur virtuel
158 # &agrave; l'aide du premier champ<br />
159 LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon<br />
160 CustomLog logs/access_log vcommon<br />
161 <br />
162 # inclut le nom du serveur dans les noms de fichiers ressources
163 # n&eacute;cessaires aux traitements des requ&ecirc;tes<br />
164 VirtualDocumentRoot /www/hosts/%0/docs<br />
165 VirtualScriptAlias  /www/hosts/%0/cgi-bin
166 </example>
167
168     <p>Pour changer cette configuration en solution de serveur virtuel
169     par IP, il suffit de remplacer <code>UseCanonicalName
170     Off</code> par <code>UseCanonicalName DNS</code>. Le nom du serveur
171     ins&eacute;r&eacute; dans le nom de fichier sera alors d&eacute;duit de l'adresse IP du
172     serveur virtuel.</p>
173
174 </section>
175
176 <section id="homepages"><title>Un syst&egrave;me de pages d'accueil h&eacute;berg&eacute;es
177 virtuellement</title>
178
179     <p>Il s'agit d'une adaptation du syst&egrave;me ci-dessus, ajust&eacute; pour un
180     serveur de pages d'accueil de FAI. Avec une configuration un peu
181     plus compliqu&eacute;e, on peut extraire des sous-cha&icirc;nes de caract&egrave;res du
182     nom du serveur pour les utiliser dans le nom de fichier afin, par
183     exemple, de d&eacute;finir <code>/home/user/</code> comme emplacement des
184     documents pour <code>www.user.isp.com</code>. Un seul r&eacute;pertoire
185     <code>cgi-bin</code> suffit pour l'ensemble des
186     serveurs virtuels.</p>
187
188 <example>
189 # les directives pr&eacute;liminaires sont identiques &agrave; celles de l'exemple
190 # ci-dessus ; il vient ensuite :<br />
191 <br />
192 # insertion d'une partie du nom du serveur dans les noms de fichiers<br />
193 VirtualDocumentRoot /www/hosts/%2/docs<br />
194 <br />
195 # r&eacute;pertoire cgi-bin unique<br />
196 ScriptAlias  /cgi-bin/  /www/std-cgi/<br />
197 </example>
198
199     <p>Vous trouverez des exemples plus &eacute;labor&eacute;s d'utilisation de la
200     directive <code>VirtualDocumentRoot</code> dans la documentation du
201     module <module>mod_vhost_alias</module>.</p>
202
203 </section>
204
205 <section id="combinations"><title>Utiliser plusieurs syst&egrave;mes
206 d'h&eacute;bergement virtuel sur le m&ecirc;me serveur</title>
207
208     <p>Moyennant une configuration un peu plus compliqu&eacute;e, vous pouvez
209     contr&ocirc;ler la port&eacute;e des diff&eacute;rentes configurations d'h&eacute;bergement
210     virtuel &agrave; l'aide des directives <code>&lt;VirtualHost&gt;</code>
211     normales d'Apache. Par exemple, on peut associer une adresse IP pour
212     les pages d'accueil des clients en g&eacute;n&eacute;ral, et une autre pour les
213     clients commerciaux avec la configuration suivante. Cette
214     configuration peut bien entendu &ecirc;tre combin&eacute;e avec les sections
215     <code>&lt;VirtualHost&gt;</code> conventionnelles.</p>
216
217 <example>
218 UseCanonicalName Off<br />
219 <br />
220 LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon<br />
221 <br />
222 &lt;Directory /www/commercial&gt;<br />
223 <indent>
224     Options FollowSymLinks<br />
225     AllowOverride All<br />
226 </indent>
227 &lt;/Directory&gt;<br />
228 <br />
229 &lt;Directory /www/homepages&gt;<br />
230 <indent>
231     Options FollowSymLinks<br />
232     AllowOverride None<br />
233 </indent>
234 &lt;/Directory&gt;<br />
235 <br />
236 &lt;VirtualHost 111.22.33.44&gt;<br />
237 <indent>
238     ServerName www.commercial.isp.com<br />
239     <br />
240     CustomLog logs/access_log.commercial vcommon<br />
241     <br />
242     VirtualDocumentRoot /www/commercial/%0/docs<br />
243     VirtualScriptAlias  /www/commercial/%0/cgi-bin<br />
244 </indent>
245 &lt;/VirtualHost&gt;<br />
246 <br />
247 &lt;VirtualHost 111.22.33.45&gt;<br />
248 <indent>
249     ServerName www.homepages.isp.com<br />
250     <br />
251     CustomLog logs/access_log.homepages vcommon<br />
252     <br />
253     VirtualDocumentRoot /www/homepages/%0/docs<br />
254     ScriptAlias         /cgi-bin/ /www/std-cgi/<br />
255 </indent>
256 &lt;/VirtualHost&gt;
257 </example>
258
259 <note>
260         <title>Note</title>
261         <p>Si le premier bloc VirtualHost ne comporte <em>pas</em> de
262         directive <directive module="core">ServerName</directive>, c'est
263         le nom issu d'une recherche DNS inverse &agrave; partir de l'adresse IP
264         du serveur virtuel qui sera utilis&eacute;. Si ce nom ne correspond pas
265         &agrave; celui que vous voulez utiliser, vous pouvez ajouter une entr&eacute;e
266         de remplacement (<code>ServerName
267         none.example.com</code>) pour &eacute;viter ce comportement.</p>
268 </note>
269
270 </section>
271
272 <section id="ipbased"><title>Pour un h&eacute;bergement virtuel par IP plus
273 efficace</title>
274
275     <p>Les changements de configuration sugg&eacute;r&eacute;s pour transformer <a
276     href="#simple">le premier exemple</a> en h&eacute;bergement virtuel par IP
277     conduisent &agrave; une configuration peu efficace. Chaque requ&ecirc;te
278     n&eacute;cessite une nouvelle recherche DNS. Pour &eacute;viter cette surcharge de
279     travail, le syst&egrave;me de fichiers peut &ecirc;tre organis&eacute; pour correspondre
280     aux adresses IP, plut&ocirc;t qu'aux noms de serveurs, supprimant par
281     la-m&ecirc;me la n&eacute;cessit&eacute; d'une recherche DNS. La journalisation doit
282     aussi &ecirc;tre adapt&eacute;e pour fonctionner sur un tel syst&egrave;me.</p>
283
284 <example>
285 # obtention du nom du serveur par recherche DNS inverse
286 # sur l'adresse IP<br />
287 UseCanonicalName DNS<br />
288 <br />
289 # insertion de l'adresse IP dans les journaux afin de pouvoir les
290 # &eacute;clater<br />
291 LogFormat "%A %h %l %u %t \"%r\" %s %b" vcommon<br />
292 CustomLog logs/access_log vcommon<br />
293 <br />
294 # insertion de l'adresse IP dans les noms de fichiers<br />
295 VirtualDocumentRootIP /www/hosts/%0/docs<br />
296 VirtualScriptAliasIP  /www/hosts/%0/cgi-bin<br />
297 </example>
298
299 </section>
300
301 <section id="simple.rewrite"><title>Configuration de base pour un
302 h&eacute;bergement virtuel dynamique utilisant
303 <module>mod_rewrite</module></title>
304
305     <p>Cet extrait de <code>httpd.conf</code> fournit le m&ecirc;me service
306     que le <a href="#simple">premier exemple</a>. La premi&egrave;re moiti&eacute; est
307     tr&egrave;s similaire &agrave; sa contre-partie du <a href="#simple">premier
308     exemple</a>, mis &agrave; part quelques changements &agrave; des fins de
309     compatibilit&eacute; ascendante et n&eacute;cessaires au bon fonctionnement de la
310     partie concernant <code>mod_rewrite</code> ; la seconde moiti&eacute;
311     configure <code>mod_rewrite</code> pour l'accomplissement du travail
312     proprement dit.</p>
313
314     <p>Cet exemple comporte quelques astuces assez sp&eacute;ciales : par
315     d&eacute;faut, <code>mod_rewrite</code> effectue son traitement avant les
316     autres modules de transformation d'URI (<code>mod_alias</code>
317     etc...) - ainsi, si vous voulez utiliser ces modules, il faut en
318     tenir compte dans la configuration de <code>mod_rewrite</code>. De
319     m&ecirc;me, l'impl&eacute;mentation d'un serveur virtuel dynamique &eacute;quivalent &agrave;
320     <code>ScriptAlias</code> demande une certaine manipulation.</p>
321
322 <example>
323 # obtention du nom du serveur par la valeur de l'en-t&ecirc;te Host:<br />
324 UseCanonicalName Off<br />
325 <br />
326 # journaux pouvant &ecirc;tre &eacute;clat&eacute;s en journaux par serveurs virtuels<br />
327 LogFormat "%{Host}i %h %l %u %t \"%r\" %s %b" vcommon<br />
328 CustomLog logs/access_log vcommon<br />
329 <br />
330 &lt;Directory /www/hosts&gt;<br />
331 <indent>
332     # ExecCGI est ici n&eacute;cessaire car nous ne pouvons pas forcer
333     # l'ex&eacute;cution des CGI de la mani&egrave;re dont ScriptAlias le fait<br />
334     Options FollowSymLinks ExecCGI<br />
335 </indent>
336 &lt;/Directory&gt;<br />
337 <br />
338 # et maintenant, nous entrons dans le vif du sujet<br />
339 <br />
340 RewriteEngine On<br />
341 <br />
342 # un nom de serveur d&eacute;duit de l'en-t&ecirc;te Host: dans pratiquement tous les
343 # cas<br />
344 RewriteMap  lowercase  int:tolower<br />
345 <br />
346 ## traitement des documents normaux en premier:<br />
347 # permet le fonctionnement de "Alias /icons/" - &agrave; r&eacute;p&eacute;ter pour les
348 # autres aliases<br />
349 RewriteCond  %{REQUEST_URI}  !^/icons/<br />
350 # permet le fonctionnement des CGIs<br />
351 RewriteCond  %{REQUEST_URI}  !^/cgi-bin/<br />
352 # la petite manipulation magique<br />
353 RewriteRule  ^/(.*)$  /www/hosts/${lowercase:%{SERVER_NAME}}/docs/$1<br />
354 <br />
355 ## on s'occupe maintenant des CGIs - on doit imposer l'utilisation d'un
356 # gestionnaire<br />
357 RewriteCond  %{REQUEST_URI}  ^/cgi-bin/<br />
358 RewriteRule  ^/(.*)$  /www/hosts/${lowercase:%{SERVER_NAME}}/cgi-bin/$1  [H=cgi-script]<br />
359 <br />
360 # c'est tout !
361 </example>
362
363 </section>
364
365 <section id="homepages.rewrite"><title>Un syst&egrave;me de pages d'accueil qui
366 utilise<code>mod_rewrite</code></title>
367
368     <p>Il s'agit d'une variante qui permet d'obtenir le m&ecirc;me r&eacute;sultat
369     que le <a href="#homepages">deuxi&egrave;me exemple</a>.</p>
370
371 <example>
372 RewriteEngine on<br />
373 <br />
374 RewriteMap   lowercase  int:tolower<br />
375 <br />
376 # permet l'ex&eacute;cution des CGIs<br />
377 RewriteCond  %{REQUEST_URI}  !^/cgi-bin/<br />
378 <br />
379 # v&eacute;rifie la validit&eacute; du nom du serveur pour le bon fonctionnement de la
380 # r&egrave;gle RewriteRule<br />
381 RewriteCond  ${lowercase:%{SERVER_NAME}}  ^www\.[a-z-]+\.isp\.com$<br />
382 <br />
383 # ajoute le nom du serveur virtuel comme pr&eacute;fixe &agrave; l'URI<br />
384 # le drapeau [C] signifie que la r&eacute;&eacute;criture suivante doit &ecirc;tre effectu&eacute;e
385 # sur le r&eacute;sultat de la r&egrave;gle courante<br />
386 RewriteRule  ^(.+)  ${lowercase:%{SERVER_NAME}}$1  [C]<br />
387 <br />
388 # et maintenant, on cr&eacute;e le v&eacute;ritable nom de fichier<br />
389 RewriteRule  ^www\.([a-z-]+)\.isp\.com/(.*) /home/$1/$2<br />
390 <br />
391 # d&eacute;finition du r&eacute;pertoire des CGIs global<br />
392 ScriptAlias  /cgi-bin/  /www/std-cgi/
393 </example>
394
395 </section>
396
397 <section id="xtra-conf"><title>Utilisation d'un fichier de configuration
398 s&eacute;par&eacute; pour les serveurs virtuels</title>
399
400     <p>Cette m&eacute;thode utilise des fonctionnalit&eacute;s de
401     <module>mod_rewrite</module> plus avanc&eacute;es pour venir &agrave; bout de la
402     traduction d'un serveur virtuel en une racine de documents, &agrave; partir
403     d'un fichier de configuration s&eacute;par&eacute;. Elle procure d'avantage de
404     souplesse, mais n&eacute;cessite une configuration
405     un peu plus compliqu&eacute;e.</p>
406
407     <p>Le fichier <code>vhost.map</code> doit se pr&eacute;senter sous cette
408     forme :</p>
409
410 <example>
411 www.customer-1.com  /www/customers/1<br />
412 www.customer-2.com  /www/customers/2<br />
413 # ...<br />
414 www.customer-N.com  /www/customers/N<br />
415 </example>
416
417     <p>Le fichier <code>httpd.conf</code> doit contenir les lignes
418     suivantes :</p>
419
420 <example>
421 RewriteEngine on<br />
422 <br />
423 RewriteMap   lowercase  int:tolower<br />
424 <br />
425 # d&eacute;finition du fichier de correspondances<br />
426 RewriteMap   vhost      txt:/www/conf/vhost.map<br />
427 <br />
428 # traite les alias comme pr&eacute;c&eacute;demment<br />
429 RewriteCond  %{REQUEST_URI}               !^/icons/<br />
430 RewriteCond  %{REQUEST_URI}               !^/cgi-bin/<br />
431 RewriteCond  ${lowercase:%{SERVER_NAME}}  ^(.+)$<br />
432 # une nouvelle mise en correspondance par fichier<br />
433 RewriteCond  ${vhost:%1}                  ^(/.*)$<br />
434 RewriteRule  ^/(.*)$                      %1/docs/$1<br />
435 <br />
436 RewriteCond  %{REQUEST_URI}               ^/cgi-bin/<br />
437 RewriteCond  ${lowercase:%{SERVER_NAME}}  ^(.+)$<br />
438 RewriteCond  ${vhost:%1}                  ^(/.*)$<br />
439 RewriteRule  ^/(.*)$                      %1/cgi-bin/$1 [H=cgi-script]
440 </example>
441
442 </section>
443 </manualpage>