<!DOCTYPE html SYSTEM "about:legacy-compat">
<html lang="fr"><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta content="width=device-width, initial-scale=1" name="viewport">
<!--
        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
              This file is generated from xml source: DO NOT EDIT
        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
      -->
<title>H&eacute;bergement virtuel de masse configur&eacute; dynamiquement - Serveur HTTP Apache Version 2.4</title>
<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet">
<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size">
<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css"><link rel="stylesheet" type="text/css" href="../style/css/prettify.css">
<script src="../style/scripts/prettify.min.js">
</script>

<link href="../images/favicon.png" rel="shortcut icon"></head>
<body id="manual-page"><div id="page-header">
<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/quickreference.html">Directives</a> | <a href="https://cwiki.apache.org/confluence/display/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a> | <a href="https://bz.apache.org/bugzilla/enter_bug.cgi?product=Apache%20httpd-2">Signaler un bug</a></p>
<p class="apache">Serveur HTTP Apache Version 2.4</p>
<img alt="" src="../images/feather.png"></div>
<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif"></a></div>
<div id="path">
<a href="https://www.apache.org/">Apache</a> &gt; <a href="https://httpd.apache.org/">Serveur HTTP</a> &gt; <a href="https://httpd.apache.org/docs/">Documentation</a> &gt; <a href="../">Version 2.4</a> &gt; <a href="./">H&eacute;bergement virtuel</a></div><div id="page-content"><div id="preamble"><h1>H&eacute;bergement virtuel de masse configur&eacute; dynamiquement</h1>
<button aria-label="Toggle language list" class="lang-toggle"><svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" stroke="currentColor" fill="none" viewBox="0 0 24 24" height="16" width="16"><circle r="10" cy="12" cx="12"/><line y2="12" x2="22" y1="12" x1="2"/><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"/></svg></button>
<div class="toplang">
<p><span>Langues Disponibles: </span><a href="../en/vhosts/mass.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
<a href="../fr/vhosts/mass.html" title="Fran&ccedil;ais">&nbsp;fr&nbsp;</a> |
<a href="../ko/vhosts/mass.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
<a href="../tr/vhosts/mass.html" hreflang="tr" rel="alternate" title="T&uuml;rk&ccedil;e">&nbsp;tr&nbsp;</a></p>
</div>


    <p>Ce document propose une m&eacute;thode performante pour servir un nombre
    quelconque d'h&ocirc;tes virtuels avec le serveur HTTP Apache. Un <a href="../rewrite/vhosts.html">document s&eacute;par&eacute;</a> d&eacute;crit comment
    utiliser <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> pour g&eacute;rer l'h&eacute;bergement
    virtuel de masse dynamique.
    </p>

</div>
<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif"> <a href="#motivation">A qui ce document est-il destin&eacute; ?</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#overview">Vue d'ensemble</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#simple">H&eacute;bergement virtuel
dynamique avec mod_vhost_alias</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#homepages">Syst&egrave;me de serveurs virtuels dynamiques
simplifi&eacute;</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#combinations">Utiliser plusieurs syst&egrave;mes
d'h&eacute;bergement virtuel sur le m&ecirc;me serveur</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#ipbased">Pour un h&eacute;bergement virtuel par IP plus
efficace</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#rewrite">H&eacute;bergement virtuel de masse avec
mod_rewrite</a></li>
<li><img alt="" src="../images/down.gif"> <a href="#macro">H&eacute;bergement virtuel en masse avec mod_macro</a></li>
</ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="motivation">A qui ce document est-il destin&eacute; ? <a title="Lien permanent" href="#motivation" class="permalink">&para;</a></h2>

    <p>Les techniques d&eacute;crites ici vous concernent si votre
    <code>httpd.conf</code> contient de nombreuses sections
    <code>&lt;VirtualHost&gt;</code> tr&egrave;s semblables,
    dans le style :</p>

<pre class="prettyprint lang-config">&lt;VirtualHost 111.22.33.44&gt;
    ServerName                 customer-1.example.com
    DocumentRoot        "/www/hosts/customer-1.example.com/docs"
    ScriptAlias  "/cgi-bin/" "/www/hosts/customer-1.example.com/cgi-bin"
&lt;/VirtualHost&gt;

&lt;VirtualHost 111.22.33.44&gt;
    ServerName                 customer-2.example.com
    DocumentRoot        "/www/hosts/customer-2.example.com/docs"
    ScriptAlias  "/cgi-bin/" "/www/hosts/customer-2.example.com/cgi-bin"
&lt;/VirtualHost&gt;

&lt;VirtualHost 111.22.33.44&gt;
    ServerName                 customer-N.example.com
    DocumentRoot        "/www/hosts/customer-N.example.com/docs"
    ScriptAlias  "/cgi-bin/" "/www/hosts/customer-N.example.com/cgi-bin"
&lt;/VirtualHost&gt;</pre>


    <p>Nous voulons remplacer toutes les configurations
    <code>&lt;VirtualHost&gt;</code> par un m&eacute;canisme qui les g&eacute;n&egrave;re
    dynamiquement. Ceci pr&eacute;sente certains avantages :</p>

    <ol>
      <li>Votre fichier de configuration est plus petit, ainsi Apache
      d&eacute;marre plus rapidement et consomme moins de m&eacute;moire. Et ce qui
      est peut-&ecirc;tre le plus important, le fichier de configuration plus
      petit est plus facile &agrave; maintenir, et le risque d'erreurs en est
      diminu&eacute; d'autant.
      </li>

      <li>Pour ajouter des serveurs virtuels, il suffit de cr&eacute;er les
      r&eacute;pertoires appropri&eacute;s dans le syst&egrave;me de fichiers et les entr&eacute;es
      dans le DNS - il n'est plus n&eacute;cessaire de reconfigurer ou de
      red&eacute;marrer Apache.</li>
    </ol>

    <p>Le principal d&eacute;savantage r&eacute;side dans le fait que vous ne pouvez
    pas d&eacute;finir un fichier journal diff&eacute;rent pour chaque serveur
    virtuel. De toute fa&ccedil;on, ce serait une mauvaise id&eacute;e si vous avez de
    nombreux serveurs virtuels, car cela n&eacute;cessiterait un <a href="fd-limits.html">nombre important de descripteurs de
    fichier</a>. Il est pr&eacute;f&eacute;rable de rediriger <a href="../logs.html#piped">les journaux via un pipe ou
    une file fifo</a> vers un
    programme, et faire en sorte que ce dernier &eacute;clate les journaux
    en un journal par serveur virtuel. L'utilitaire <a href="../programs/split-logfile.html">split-logfile</a>
    constitue un exemple de ce traitement.</p>

</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="overview">Vue d'ensemble <a title="Lien permanent" href="#overview" class="permalink">&para;</a></h2>

    <p>Un serveur virtuel peut &ecirc;tre d&eacute;fini par deux informations : son
    adresse IP, et le contenu de l'en-t&ecirc;te <code>Host:</code> de la
    requ&ecirc;te HTTP. La technique d'h&eacute;bergement virtuel dynamique de masse
    utilis&eacute;e ici consiste &agrave; ins&eacute;rer automatiquement ces informations
    dans le chemin du fichier &agrave; utiliser pour r&eacute;pondre &agrave; la requ&ecirc;te. On
    peut y parvenir assez facilement en utilisant
    <code class="module"><a href="../mod/mod_vhost_alias.html">mod_vhost_alias</a></code> avec Apache httpd, mais on peut aussi
    <a href="../rewrite/vhosts.html">utiliser mod_rewrite</a>. </p>
    <p>Par d&eacute;faut, ces deux modules
    sont d&eacute;sactiv&eacute;s ; vous devez activer l'un d'eux lors de la
    compilation et de la configuration d'Apache httpd si vous voulez utiliser
    cette technique.</p>

    <p>Certains param&egrave;tres doivent &ecirc;tre extraits de la requ&ecirc;te pour que le serveur
    dynamique se pr&eacute;sente comme un serveur dynamique normal. Le plus
    important est le nom du serveur, que le serveur utilise pour g&eacute;n&eacute;rer des
    URLs d'auto-r&eacute;f&eacute;rencement, etc... Il est d&eacute;fini via la directive
    <code>ServerName</code>, et les CGIs peuvent s'y r&eacute;f&eacute;rer via la
    variable d'environnement <code>SERVER_NAME</code>. Sa v&eacute;ritable
    valeur utilis&eacute;e &agrave; l'ex&eacute;cution est contr&ocirc;l&eacute;e par la d&eacute;finition de la
    directive
    <code class="directive"><a href="../mod/core.html#usecanonicalname">UseCanonicalName</a></code>. Avec
    <code>UseCanonicalName Off</code>, le nom du serveur correspond au
    contenu de l'en-t&ecirc;te <code>Host:</code> de la requ&ecirc;te. Avec
    <code>UseCanonicalName DNS</code>, il est extrait d'une recherche
    DNS inverse sur l'adresse IP du serveur virtuel. La premi&egrave;re
    configuration est utilis&eacute;e pour l'h&eacute;bergement virtuel dynamique par
    nom, et la deuxi&egrave;me pour l'h&eacute;bergement virtuel dynamique par IP. Si
    httpd ne peut pas d&eacute;terminer le nom du serveur, soit parce qu'il
    n'y a pas d'en-t&ecirc;te <code>Host:</code>, soit parce que la recherche
    DNS a &eacute;chou&eacute;, il prend en compte la valeur d&eacute;finie par la directive
    <code>ServerName</code>.</p>

    <p>L'autre param&egrave;tre &agrave; extraire est la racine des documents (d&eacute;finie
    via la directive <code>DocumentRoot</code> et disponible pour les
    scripts CGI via la variable d'environnement <code>DOCUMENT_ROOT</code>).
    Dans une configuration classique, il est utilis&eacute; par le module core
    pour faire correspondre les URIs aux noms de fichiers, mais lorsque
    la configuration du serveur comporte des serveurs virtuels, ce
    traitement doit &ecirc;tre pris en charge par un autre module (soit
    <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
    utilise un m&eacute;thode de correspondance diff&eacute;rente. Aucun de ces
    modules ne se chargeant de d&eacute;finir la variable d'environnement
    <code>DOCUMENT_ROOT</code>, si des CGIs ou des documents SSI
    doivent en faire usage, ils obtiendront une valeur erron&eacute;e.</p>

</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="simple">H&eacute;bergement virtuel
dynamique avec mod_vhost_alias <a title="Lien permanent" href="#simple" class="permalink">&para;</a></h2>

    <p>Cet extrait de fichier <code>httpd.conf</code> impl&eacute;mente
    l'h&eacute;bergement virtuel d&eacute;crit dans la section <a href="#motivation">&Agrave; qui ce document est-il destin&eacute; ?</a> ci-dessus
    en utilisant <code class="module"><a href="../mod/mod_vhost_alias.html">mod_vhost_alias</a></code>.</p>

<pre class="prettyprint lang-config"># extrait le nom du serveur de l'en-t&ecirc;te Host:
UseCanonicalName Off

# ce format de journal peut &ecirc;tre &eacute;clat&eacute; en journaux par serveur virtuel
# &agrave; l'aide du premier champ via l'utilitaire split-logfile
LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon
CustomLog "logs/access_log" vcommon

# inclut le nom du serveur dans les noms de fichiers ressources
# n&eacute;cessaires aux traitements des requ&ecirc;tes
VirtualDocumentRoot "/www/hosts/%0/docs"
VirtualScriptAlias  "/www/hosts/%0/cgi-bin"</pre>


    <p>Pour changer cette configuration en solution de serveur virtuel
    par IP, il suffit de remplacer <code>UseCanonicalName
    Off</code> par <code>UseCanonicalName DNS</code>. Le nom du serveur
    ins&eacute;r&eacute; dans le nom de fichier sera alors d&eacute;duit de l'adresse IP du
    serveur virtuel. La variable <code>%0</code> fait r&eacute;f&eacute;rence au nom
    de serveur de la requ&ecirc;te, tel qu'il est indiqu&eacute; dans l'en-t&ecirc;te
    <code>Host:</code>.</p>

    <p>Voir la documentation du module <code class="module"><a href="../mod/mod_vhost_alias.html">mod_vhost_alias</a></code>
    pour d'avantages d'exemples d'utilisation.</p>

</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="homepages">Syst&egrave;me de serveurs virtuels dynamiques
simplifi&eacute; <a title="Lien permanent" href="#homepages" class="permalink">&para;</a></h2>

    <p>Il s'agit d'une adaptation du syst&egrave;me ci-dessus, ajust&eacute; pour un
    serveur d'h&eacute;bergement web de FAI. Gr&acirc;ce &agrave; la variable
    <code>%2</code>, on peut extraire des sous-cha&icirc;nes de caract&egrave;res du
    nom du serveur pour les utiliser dans le nom de fichier afin, par
    exemple, de d&eacute;finir <code>/home/user/www</code> comme emplacement des
    documents pour <code>www.user.example.com</code>. Un seul r&eacute;pertoire
    <code>cgi-bin</code> suffit pour l'ensemble des
    serveurs virtuels.</p>

<pre class="prettyprint lang-config">UseCanonicalName Off

LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon
CustomLog "logs/access_log" vcommon

# insertion d'une partie du nom du serveur dans les noms de fichiers
VirtualDocumentRoot "/home/%2/www"

# r&eacute;pertoire cgi-bin unique
ScriptAlias  "/cgi-bin/"  "/www/std-cgi/"</pre>


    <p>Vous trouverez des exemples plus &eacute;labor&eacute;s d'utilisation de la
    directive <code>VirtualDocumentRoot</code> dans la documentation du
    module <code class="module"><a href="../mod/mod_vhost_alias.html">mod_vhost_alias</a></code>.</p>

</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="combinations">Utiliser plusieurs syst&egrave;mes
d'h&eacute;bergement virtuel sur le m&ecirc;me serveur <a title="Lien permanent" href="#combinations" class="permalink">&para;</a></h2>

    <p>Moyennant une configuration un peu plus compliqu&eacute;e, vous pouvez
    contr&ocirc;ler la port&eacute;e des diff&eacute;rentes configurations d'h&eacute;bergement
    virtuel &agrave; l'aide des directives <code>&lt;VirtualHost&gt;</code>
    normales de httpd. Par exemple, on peut associer une adresse IP pour
    les pages d'accueil des clients en g&eacute;n&eacute;ral, et une autre pour les
    clients commerciaux avec la configuration suivante. Cette
    configuration peut &ecirc;tre combin&eacute;e avec les sections
    <code>&lt;VirtualHost&gt;</code> conventionnelles, comme indiqu&eacute;
    plus loin.</p>

<pre class="prettyprint lang-config">UseCanonicalName Off

LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon

&lt;Directory "/www/commercial"&gt;
    Options FollowSymLinks
    AllowOverride All
&lt;/Directory&gt;

&lt;Directory "/www/homepages"&gt;
    Options FollowSymLinks
    AllowOverride None
&lt;/Directory&gt;

&lt;VirtualHost 111.22.33.44&gt;
    ServerName www.commercial.example.com
    
    CustomLog "logs/access_log.commercial" vcommon
    
    VirtualDocumentRoot "/www/commercial/%0/docs"
    VirtualScriptAlias  "/www/commercial/%0/cgi-bin"
&lt;/VirtualHost&gt;

&lt;VirtualHost 111.22.33.45&gt;
    ServerName www.homepages.example.com
    
    CustomLog "logs/access_log.homepages" vcommon
    
    VirtualDocumentRoot "/www/homepages/%0/docs"
    ScriptAlias         "/cgi-bin/" "/www/std-cgi/"
&lt;/VirtualHost&gt;</pre>


<div class="note">
	<h3>Note</h3>
	<p>Si le premier bloc VirtualHost ne comporte <em>pas</em> de
	directive <code class="directive"><a href="../mod/core.html#servername">ServerName</a></code>, c'est
	le nom issu d'une recherche DNS inverse &agrave; partir de l'adresse IP
	du serveur virtuel qui sera utilis&eacute;. Si ce nom ne correspond pas
	&agrave; celui que vous voulez utiliser, vous pouvez ajouter une entr&eacute;e
	de remplacement (par exemple <code>ServerName
	none.example.com</code>) pour &eacute;viter ce comportement.</p>
</div>

</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="ipbased">Pour un h&eacute;bergement virtuel par IP plus
efficace <a title="Lien permanent" href="#ipbased" class="permalink">&para;</a></h2>

    <p>Les changements de configuration sugg&eacute;r&eacute;s pour transformer <a href="#simple">le premier exemple</a> en h&eacute;bergement virtuel par IP
    conduisent &agrave; une configuration peu efficace. Chaque requ&ecirc;te
    n&eacute;cessite une nouvelle recherche DNS. Pour &eacute;viter cette surcharge de
    travail, le syst&egrave;me de fichiers peut &ecirc;tre organis&eacute; pour correspondre
    aux adresses IP, plut&ocirc;t qu'aux noms de serveurs, supprimant par
    la-m&ecirc;me la n&eacute;cessit&eacute; d'une recherche DNS. La journalisation doit
    aussi &ecirc;tre adapt&eacute;e pour fonctionner sur un tel syst&egrave;me.</p>

<pre class="prettyprint lang-config"># obtention du nom du serveur par recherche DNS inverse
# sur l'adresse IP
UseCanonicalName DNS

# insertion de l'adresse IP dans les journaux afin de pouvoir les
# &eacute;clater
LogFormat "%A %h %l %u %t \"%r\" %s %b" vcommon
CustomLog "logs/access_log" vcommon

# insertion de l'adresse IP dans les noms de fichiers
VirtualDocumentRootIP "/www/hosts/%0/docs"
VirtualScriptAliasIP  "/www/hosts/%0/cgi-bin"</pre>


</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="rewrite">H&eacute;bergement virtuel de masse avec
mod_rewrite <a title="Lien permanent" href="#rewrite" class="permalink">&para;</a></h2>

<p>
L'h&eacute;bergement virtuel de masse peut aussi &ecirc;tre effectu&eacute; en utilisant
<code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>, soit &agrave; l'aide de simples directives <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code>, soit en utilisant des
techniques plus compliqu&eacute;es comme le stockage externe des d&eacute;finitions
des serveurs virtuels, ces derni&egrave;res &eacute;tant accessibles via des
directives <code class="directive"><a href="../mod/mod_rewrite.html#rewritemap">RewriteMap</a></code>. Ces
techniques sont d&eacute;crites dans la <a href="../rewrite/vhosts.html">documentation sur la r&eacute;&eacute;criture</a>.</p>

</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif"></a></div>
<div class="section">
<h2 id="macro">H&eacute;bergement virtuel en masse avec mod_macro <a title="Lien permanent" href="#macro" class="permalink">&para;</a></h2>

<p>Une autre option pour g&eacute;n&eacute;rer dynamiquement des serveurs virtuels :
mod_macro ; ce module permet de cr&eacute;er un mod&egrave;le de serveur virtuel que
vous pourrez invoquer pour des noms d'h&ocirc;tes multiples. La section
<strong>Usage</strong> de la documentation du module pr&eacute;sente un exemple qui
illustre cette m&eacute;thode.
</p>
</div></div>
<div class="bottomlang">
<p><span>Langues Disponibles: </span><a href="../en/vhosts/mass.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
<a href="../fr/vhosts/mass.html" title="Fran&ccedil;ais">&nbsp;fr&nbsp;</a> |
<a href="../ko/vhosts/mass.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
<a href="../tr/vhosts/mass.html" hreflang="tr" rel="alternate" title="T&uuml;rk&ccedil;e">&nbsp;tr&nbsp;</a></p>
</div><div id="footer">
<p class="apache">Copyright 2026 The Apache Software Foundation.<br>Autoris&eacute; sous <a href="https://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/quickreference.html">Directives</a> | <a href="https://cwiki.apache.org/confluence/display/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a> | <a href="https://bz.apache.org/bugzilla/enter_bug.cgi?product=Apache%20httpd-2">Signaler un bug</a></p></div><script><!--//--><![CDATA[//><!--
if (typeof(prettyPrint) !== 'undefined') {
    prettyPrint();
}
var langToggle = document.querySelector('.lang-toggle');
var topLang = document.querySelector('.toplang');
if (langToggle && topLang) {
    langToggle.addEventListener('click', function() { topLang.classList.toggle('open'); });
}
var qv = document.getElementById('quickview');
if (qv) {
    document.body.appendChild(qv);
    var qvBtn = document.createElement('button');
    qvBtn.className = 'qv-toggle';
    qvBtn.setAttribute('aria-label', 'Toggle page navigation');
    qvBtn.innerHTML = '&#9776;';
    document.body.appendChild(qvBtn);
    qvBtn.addEventListener('click', function() {
        var isOpen = qv.classList.toggle('open');
        if (isOpen) {
            qv.style.top = window.scrollY + 10 + 'px';
        }
    });
    window.addEventListener('scroll', function() { qv.classList.remove('open'); });
}
//--><!]]></script>
</body></html>