<-
Apache > Serveur HTTP > Documentation > Version 2.4 > H�bergement virtuel

H�bergement virtuel de masse configur� dynamiquement

Langues Disponibles:  en  |  fr  |  ko  |  tr 

Ce document propose une m�thode performante pour servir un nombre quelconque d'h�tes virtuels avec le serveur HTTP Apache. Un document s�par� d�crit comment utiliser mod_rewrite pour g�rer l'h�bergement virtuel de masse dynamique.

top

A qui ce document est-il destin� ?

Les techniques d�crites ici vous concernent si votre apache2.conf contient de nombreuses sections <VirtualHost> tr�s semblables, dans le style :

<VirtualHost 111.22.33.44>
    ServerName                 customer-1.example.com
    DocumentRoot        /www/hosts/customer-1.example.com/docs
    ScriptAlias  /cgi-bin/  /www/hosts/customer-1.example.com/cgi-bin
</VirtualHost>

<VirtualHost 111.22.33.44>
    ServerName                 customer-2.example.com
    DocumentRoot        /www/hosts/customer-2.example.com/docs
    ScriptAlias  /cgi-bin/  /www/hosts/customer-2.example.com/cgi-bin
</VirtualHost>

<VirtualHost 111.22.33.44>
    ServerName                 customer-N.example.com
    DocumentRoot        /www/hosts/customer-N.example.com/docs
    ScriptAlias  /cgi-bin/  /www/hosts/customer-N.example.com/cgi-bin
</VirtualHost>

Nous voulons remplacer toutes les configurations <VirtualHost> par un m�canisme qui les g�n�re dynamiquement. Ceci pr�sente certains avantages :

  1. Votre fichier de configuration est plus petit, ainsi Apache d�marre plus rapidement et consomme moins de m�moire. Et ce qui est peut-�tre le plus important, le fichier de configuration plus petit est plus facile � maintenir, et le risque d'erreurs en est diminu� d'autant.
  2. Pour ajouter des serveurs virtuels, il suffit de cr�er les r�pertoires appropri�s dans le syst�me de fichiers et les entr�es dans le DNS - il n'est plus n�cessaire de reconfigurer ou de red�marrer Apache.

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

top

Vue d'ensemble

Un serveur virtuel peut �tre d�fini par deux informations : son adresse IP, et le contenu de l'en-t�te Host: de la requ�te HTTP. La technique d'h�bergement virtuel dynamique de masse utilis�e ici consiste � ins�rer automatiquement ces informations dans le chemin du fichier � utiliser pour r�pondre � la requ�te. On peut y parvenir assez facilement en utilisant mod_vhost_alias avec Apache httpd, mais on peut aussi utiliser mod_rewrite.

Par d�faut, ces deux modules sont d�sactiv�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.

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

L'autre param�tre � extraire est la racine des documents (d�finie via la directive DocumentRoot et disponible pour les scripts CGI via la variable d'environnement DOCUMENT_ROOT). Dans une configuration classique, il est utilis� 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 �tre pris en charge par un autre module (soit mod_vhost_alias, soit mod_rewrite), qui utilise un m�thode de correspondance diff�rente. Aucun de ces modules ne se chargeant de d�finir la variable d'environnement DOCUMENT_ROOT, si des CGIs ou des documents SSI doivent en faire usage, ils obtiendront une valeur erron�e.

top

H�bergement virtuel dynamique avec mod_vhost_alias

Cet extrait de fichier apache2.conf impl�mente l'h�bergement virtuel d�crit dans la section � qui ce document est-il destin� ? ci-dessus en utilisant mod_vhost_alias.

# extrait le nom du serveur de l'en-t�te Host:
UseCanonicalName Off

# ce format de journal peut �tre �clat� en journaux par serveur virtuel
# � 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�cessaires aux traitements des requ�tes
VirtualDocumentRoot /www/hosts/%0/docs
VirtualScriptAlias  /www/hosts/%0/cgi-bin

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

Voir la documentation du module mod_vhost_alias pour d'avantages d'exemples d'utilisation.

top

Syst�me de serveurs virtuels dynamiques simplifi�

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

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�pertoire cgi-bin unique
ScriptAlias  /cgi-bin/  /www/std-cgi/

Vous trouverez des exemples plus �labor�s d'utilisation de la directive VirtualDocumentRoot dans la documentation du module mod_vhost_alias.

top

Utiliser plusieurs syst�mes d'h�bergement virtuel sur le m�me serveur

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

UseCanonicalName Off

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

<Directory /www/commercial>
    Options FollowSymLinks
    AllowOverride All
</Directory>

<Directory /www/homepages>
    Options FollowSymLinks
    AllowOverride None
</Directory>

<VirtualHost 111.22.33.44>
    ServerName www.commercial.example.com
    
    CustomLog logs/access_log.commercial vcommon
    
    VirtualDocumentRoot /www/commercial/%0/docs
    VirtualScriptAlias  /www/commercial/%0/cgi-bin
</VirtualHost>

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

Note

Si le premier bloc VirtualHost ne comporte pas de directive ServerName, c'est le nom issu d'une recherche DNS inverse � partir de l'adresse IP du serveur virtuel qui sera utilis�. Si ce nom ne correspond pas � celui que vous voulez utiliser, vous pouvez ajouter une entr�e de remplacement (par exemple ServerName none.example.com) pour �viter ce comportement.

top

Pour un h�bergement virtuel par IP plus efficace

Les changements de configuration sugg�r�s pour transformer le premier exemple en h�bergement virtuel par IP conduisent � une configuration peu efficace. Chaque requ�te n�cessite une nouvelle recherche DNS. Pour �viter cette surcharge de travail, le syst�me de fichiers peut �tre organis� pour correspondre aux adresses IP, plut�t qu'aux noms de serveurs, supprimant par la-m�me la n�cessit� d'une recherche DNS. La journalisation doit aussi �tre adapt�e pour fonctionner sur un tel syst�me.

# 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
# �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
top

H�bergement virtuel de masse avec mod_rewrite

L'h�bergement virtuel de masse peut aussi �tre effectu� en utilisant mod_rewrite, soit � l'aide de simples directives RewriteRule, soit en utilisant des techniques plus compliqu�es comme le stockage externe des d�finitions des serveurs virtuels, ces derni�res �tant accessibles via des directives RewriteMap. Ces techniques sont d�crites dans la documentation sur la r��criture.

Langues Disponibles:  en  |  fr  |  ko  |  tr 

top

Commentaires

Notice:
This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our mailing lists.
Comments are disabled for this page at the moment.