1 <?xml version="1.0" encoding="ISO-8859-1"?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head><!--
4 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
5 This file is generated from xml source: DO NOT EDIT
6 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
8 <title>Hébergement virtuel de masse configuré dynamiquement - Serveur Apache HTTP</title>
9 <link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
10 <link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
11 <link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" />
12 <script src="../style/scripts/prettify.js" type="text/javascript">
15 <link href="../images/favicon.ico" rel="shortcut icon" /></head>
16 <body id="manual-page"><div id="page-header">
17 <p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p>
18 <p class="apache">Serveur Apache HTTP Version 2.4</p>
19 <img alt="" src="../images/feather.gif" /></div>
20 <div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div>
22 <a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Serveur HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.4</a> > <a href="./">Hébergement virtuel</a></div><div id="page-content"><div id="preamble"><h1>Hébergement virtuel de masse configuré dynamiquement</h1>
24 <p><span>Langues Disponibles: </span><a href="../en/vhosts/mass.html" hreflang="en" rel="alternate" title="English"> en </a> |
25 <a href="../fr/vhosts/mass.html" title="Français"> fr </a> |
26 <a href="../ko/vhosts/mass.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |
27 <a href="../tr/vhosts/mass.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>
31 <p>Ce document propose une méthode performante pour servir un nombre
32 quelconque d'hôtes virtuels avec le serveur HTTP Apache. Un <a href="../rewrite/vhosts.html">document séparé</a> décrit comment
33 utiliser <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> pour gérer l'hébergement
34 virtuel de masse dynamique.
38 <div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#motivation">A qui ce document est-il destiné ?</a></li>
39 <li><img alt="" src="../images/down.gif" /> <a href="#overview">Vue d'ensemble</a></li>
40 <li><img alt="" src="../images/down.gif" /> <a href="#simple">Hébergement virtuel
41 dynamique avec mod_vhost_alias</a></li>
42 <li><img alt="" src="../images/down.gif" /> <a href="#homepages">Système de serveurs virtuels dynamiques
44 <li><img alt="" src="../images/down.gif" /> <a href="#combinations">Utiliser plusieurs systèmes
45 d'hébergement virtuel sur le même serveur</a></li>
46 <li><img alt="" src="../images/down.gif" /> <a href="#ipbased">Pour un hébergement virtuel par IP plus
48 <li><img alt="" src="../images/down.gif" /> <a href="#rewrite">Hébergement virtuel de masse avec
51 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
53 <h2><a name="motivation" id="motivation">A qui ce document est-il destiné ?</a></h2>
55 <p>Les techniques décrites ici vous concernent si votre
56 <code>httpd.conf</code> contient de nombreuses sections
57 <code><VirtualHost></code> très semblables,
60 <pre class="prettyprint lang-config">
61 <VirtualHost 111.22.33.44>
62 ServerName customer-1.example.com
63 DocumentRoot /www/hosts/customer-1.example.com/docs
64 ScriptAlias /cgi-bin/ /www/hosts/customer-1.example.com/cgi-bin
67 <VirtualHost 111.22.33.44>
68 ServerName customer-2.example.com
69 DocumentRoot /www/hosts/customer-2.example.com/docs
70 ScriptAlias /cgi-bin/ /www/hosts/customer-2.example.com/cgi-bin
73 <VirtualHost 111.22.33.44>
74 ServerName customer-N.example.com
75 DocumentRoot /www/hosts/customer-N.example.com/docs
76 ScriptAlias /cgi-bin/ /www/hosts/customer-N.example.com/cgi-bin
81 <p>Nous voulons remplacer toutes les configurations
82 <code><VirtualHost></code> par un mécanisme qui les génère
83 dynamiquement. Ceci présente certains avantages :</p>
86 <li>Votre fichier de configuration est plus petit, ainsi Apache
87 démarre plus rapidement et consomme moins de mémoire. Et ce qui
88 est peut-être le plus important, le fichier de configuration plus
89 petit est plus facile à maintenir, et le risque d'erreurs en est
93 <li>Pour ajouter des serveurs virtuels, il suffit de créer les
94 répertoires appropriés dans le système de fichiers et les entrées
95 dans le DNS - il n'est plus nécessaire de reconfigurer ou de
96 redémarrer Apache.</li>
99 <p>Le principal désavantage réside dans le fait que vous ne pouvez
100 pas définir un fichier journal différent pour chaque serveur
101 virtuel. De toute façon, ce serait une mauvaise idée si vous avez de
102 nombreux serveurs virtuels, car cela nécessiterait un <a href="fd-limits.html">nombre important de descripteurs de
103 fichier</a>. Il est préférable de rediriger <a href="../logs.html#piped">les journaux via un pipe ou
104 une file fifo</a> vers un
105 programme, et faire en sorte que ce dernier éclate les journaux
106 en un journal par serveur virtuel. L'utilitaire <a href="../programs/other.html#split-logfile">split-logfile</a>
107 constitue un exemple de ce traitement.</p>
109 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
110 <div class="section">
111 <h2><a name="overview" id="overview">Vue d'ensemble</a></h2>
113 <p>Un serveur virtuel peut être défini par deux informations : son
114 adresse IP, et le contenu de l'en-tête <code>Host:</code> de la
115 requête HTTP. La technique d'hébergement virtuel dynamique de masse
116 utilisée ici consiste à insérer automatiquement ces informations
117 dans le chemin du fichier à utiliser pour répondre à la requête. On
118 peut y parvenir assez facilement en utilisant
119 <code class="module"><a href="../mod/mod_vhost_alias.html">mod_vhost_alias</a></code> avec Apache httpd, mais on peut aussi
120 <a href="../rewrite/vhosts.html">utiliser mod_rewrite</a>. </p>
121 <p>Par défaut, ces deux modules
122 sont désactivés ; vous devez activer l'un d'eux lors de la
123 compilation et de la configuration d'Apache httpd si vous voulez utiliser
126 <p>Certains paramètres doivent être extraits de la requête pour que le serveur
127 dynamique se présente comme un serveur dynamique normal. Le plus
128 important est le nom du serveur, que le serveur utilise pour générer des
129 URLs d'auto-référencement, etc... Il est défini via la directive
130 <code>ServerName</code>, et les CGIs peuvent s'y référer via la
131 variable d'environnement <code>SERVER_NAME</code>. Sa véritable
132 valeur utilisée à l'exécution est contrôlée par la définition de la
134 <code class="directive"><a href="../mod/core.html#usecanonicalname">UseCanonicalName</a></code>. Avec
135 <code>UseCanonicalName Off</code>, le nom du serveur correspond au
136 contenu de l'en-tête <code>Host:</code> de la requête. Avec
137 <code>UseCanonicalName DNS</code>, il est extrait d'une recherche
138 DNS inverse sur l'adresse IP du serveur virtuel. La première
139 configuration est utilisée pour l'hébergement virtuel dynamique par
140 nom, et la deuxième pour l'hébergement virtuel dynamique par IP. Si
141 httpd ne peut pas déterminer le nom du serveur, soit parce qu'il
142 n'y a pas d'en-tête <code>Host:</code>, soit parce que la recherche
143 DNS a échoué, il prend en compte la valeur définie par la directive
144 <code>ServerName</code>.</p>
146 <p>L'autre paramètre à extraire est la racine des documents (définie
147 via la directive <code>DocumentRoot</code> et disponible pour les
148 scripts CGI via la variable d'environnement <code>DOCUMENT_ROOT</code>).
149 Dans une configuration classique, il est utilisé par le module core
150 pour faire correspondre les URIs aux noms de fichiers, mais lorsque
151 la configuration du serveur comporte des serveurs virtuels, ce
152 traitement doit être pris en charge par un autre module (soit
153 <code class="module"><a href="../mod/mod_vhost_alias.html">mod_vhost_alias</a></code>, soit <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>), qui
154 utilise un méthode de correspondance différente. Aucun de ces
155 modules ne se chargeant de définir la variable d'environnement
156 <code>DOCUMENT_ROOT</code>, si des CGIs ou des documents SSI
157 doivent en faire usage, ils obtiendront une valeur erronée.</p>
159 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
160 <div class="section">
161 <h2><a name="simple" id="simple">Hébergement virtuel
162 dynamique avec mod_vhost_alias</a></h2>
164 <p>Cet extrait de fichier <code>httpd.conf</code> implémente
165 l'hébergement virtuel décrit dans la section <a href="#motivation">À qui ce document est-il destiné ?</a> ci-dessus
166 en utilisant <code class="module"><a href="../mod/mod_vhost_alias.html">mod_vhost_alias</a></code>.</p>
168 <pre class="prettyprint lang-config">
169 # extrait le nom du serveur de l'en-tête Host:
172 # ce format de journal peut être éclaté en journaux par serveur virtuel
173 # à l'aide du premier champ via l'utilitaire split-logfile
174 LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon
175 CustomLog logs/access_log vcommon
177 # inclut le nom du serveur dans les noms de fichiers ressources
178 # nécessaires aux traitements des requêtes
179 VirtualDocumentRoot /www/hosts/%0/docs
180 VirtualScriptAlias /www/hosts/%0/cgi-bin
184 <p>Pour changer cette configuration en solution de serveur virtuel
185 par IP, il suffit de remplacer <code>UseCanonicalName
186 Off</code> par <code>UseCanonicalName DNS</code>. Le nom du serveur
187 inséré dans le nom de fichier sera alors déduit de l'adresse IP du
188 serveur virtuel. La variable <code>%0</code> fait référence au nom
189 de serveur de la requête, tel qu'il est indiqué dans l'en-tête
190 <code>Host:</code>.</p>
192 <p>Voir la documentation du module <code class="module"><a href="../mod/mod_vhost_alias.html">mod_vhost_alias</a></code>
193 pour d'avantages d'exemples d'utilisation.</p>
195 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
196 <div class="section">
197 <h2><a name="homepages" id="homepages">Système de serveurs virtuels dynamiques
200 <p>Il s'agit d'une adaptation du système ci-dessus, ajusté pour un
201 serveur d'hébergement web de FAI. Grâce à la variable
202 <code>%2</code>, on peut extraire des sous-chaînes de caractères du
203 nom du serveur pour les utiliser dans le nom de fichier afin, par
204 exemple, de définir <code>/home/user/www</code> comme emplacement des
205 documents pour <code>www.user.example.com</code>. Un seul répertoire
206 <code>cgi-bin</code> suffit pour l'ensemble des
207 serveurs virtuels.</p>
209 <pre class="prettyprint lang-config">
212 LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon
213 CustomLog logs/access_log vcommon
215 # insertion d'une partie du nom du serveur dans les noms de fichiers
216 VirtualDocumentRoot /home/%2/www
218 # répertoire cgi-bin unique
219 ScriptAlias /cgi-bin/ /www/std-cgi/
223 <p>Vous trouverez des exemples plus élaborés d'utilisation de la
224 directive <code>VirtualDocumentRoot</code> dans la documentation du
225 module <code class="module"><a href="../mod/mod_vhost_alias.html">mod_vhost_alias</a></code>.</p>
227 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
228 <div class="section">
229 <h2><a name="combinations" id="combinations">Utiliser plusieurs systèmes
230 d'hébergement virtuel sur le même serveur</a></h2>
232 <p>Moyennant une configuration un peu plus compliquée, vous pouvez
233 contrôler la portée des différentes configurations d'hébergement
234 virtuel à l'aide des directives <code><VirtualHost></code>
235 normales de httpd. Par exemple, on peut associer une adresse IP pour
236 les pages d'accueil des clients en général, et une autre pour les
237 clients commerciaux avec la configuration suivante. Cette
238 configuration peut être combinée avec les sections
239 <code><VirtualHost></code> conventionnelles, comme indiqué
242 <pre class="prettyprint lang-config">
245 LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon
247 <Directory /www/commercial>
248 Options FollowSymLinks
252 <Directory /www/homepages>
253 Options FollowSymLinks
257 <VirtualHost 111.22.33.44>
258 ServerName www.commercial.example.com
260 CustomLog logs/access_log.commercial vcommon
262 VirtualDocumentRoot /www/commercial/%0/docs
263 VirtualScriptAlias /www/commercial/%0/cgi-bin
266 <VirtualHost 111.22.33.45>
267 ServerName www.homepages.example.com
269 CustomLog logs/access_log.homepages vcommon
271 VirtualDocumentRoot /www/homepages/%0/docs
272 ScriptAlias /cgi-bin/ /www/std-cgi/
279 <p>Si le premier bloc VirtualHost ne comporte <em>pas</em> de
280 directive <code class="directive"><a href="../mod/core.html#servername">ServerName</a></code>, c'est
281 le nom issu d'une recherche DNS inverse à partir de l'adresse IP
282 du serveur virtuel qui sera utilisé. Si ce nom ne correspond pas
283 à celui que vous voulez utiliser, vous pouvez ajouter une entrée
284 de remplacement (par exemple <code>ServerName
285 none.example.com</code>) pour éviter ce comportement.</p>
288 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
289 <div class="section">
290 <h2><a name="ipbased" id="ipbased">Pour un hébergement virtuel par IP plus
293 <p>Les changements de configuration suggérés pour transformer <a href="#simple">le premier exemple</a> en hébergement virtuel par IP
294 conduisent à une configuration peu efficace. Chaque requête
295 nécessite une nouvelle recherche DNS. Pour éviter cette surcharge de
296 travail, le système de fichiers peut être organisé pour correspondre
297 aux adresses IP, plutôt qu'aux noms de serveurs, supprimant par
298 la-même la nécessité d'une recherche DNS. La journalisation doit
299 aussi être adaptée pour fonctionner sur un tel système.</p>
301 <pre class="prettyprint lang-config">
302 # obtention du nom du serveur par recherche DNS inverse
306 # insertion de l'adresse IP dans les journaux afin de pouvoir les
308 LogFormat "%A %h %l %u %t \"%r\" %s %b" vcommon
309 CustomLog logs/access_log vcommon
311 # insertion de l'adresse IP dans les noms de fichiers
312 VirtualDocumentRootIP /www/hosts/%0/docs
313 VirtualScriptAliasIP /www/hosts/%0/cgi-bin
317 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
318 <div class="section">
319 <h2><a name="rewrite" id="rewrite">Hébergement virtuel de masse avec
323 L'hébergement virtuel de masse peut aussi être effectué en utilisant
324 <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>, soit à l'aide de simples directives <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code>, soit en utilisant des
325 techniques plus compliquées comme le stockage externe des définitions
326 des serveurs virtuels, ces dernières étant accessibles via des
327 directives <code class="directive"><a href="../mod/mod_rewrite.html#rewritemap">RewriteMap</a></code>. Ces
328 techniques sont décrites dans la <a href="../rewrite/vhosts.html">documentation sur la réécriture</a>.</p>
331 <div class="bottomlang">
332 <p><span>Langues Disponibles: </span><a href="../en/vhosts/mass.html" hreflang="en" rel="alternate" title="English"> en </a> |
333 <a href="../fr/vhosts/mass.html" title="Français"> fr </a> |
334 <a href="../ko/vhosts/mass.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |
335 <a href="../tr/vhosts/mass.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>
336 </div><div id="footer">
337 <p class="apache">Copyright 2012 The Apache Software Foundation.<br />Autorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
338 <p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!--
339 if (typeof(prettyPrint) !== undefined) {