Les Hôtes Virtuels d'un serveur web Apache permettent d'héberger un ou plusieurs sites Web (correspondant à des domaines comme www.company1.example.com et www.company2.example.com) sur une même machine. L'utilisateur final ne perçoit pas qu'en fait il s'agit d'un même serveur physique.
Les hôtes virtuels peuvent être :
Préférez l'hébergement virtuel par nom, plus simple (de plus, il économise les adresses IP), sauf en cas d'utilisation d'équipements qui nécessitent un hébergement basé sur IP :
Nous parlerons donc ici des hôtes virtuels par nom.
Le serveur s’appuie sur les informations transmises dans les en-têtes HTTP des requêtes.
Les noms utilisés doivent être définis sur le serveur DNS et être liés à une adresse IP associée au serveur.
Un hôte virtuel par nom associe un nom de domaine et son site web : chaque domaine ou site, configuré dans Apache, dirige le visiteur vers un répertoire spécifique contenant les fichiers de ce site. Un serveur web peut donc héberger et gérer plusieurs sites web grâce à ce système de virtualisation. C'est le principe d'un serveur mutualisé.
La résolution d'un hôte virtuel par nom choisit le plus approprié parmi les candidats dont l'IP convient le mieux. C'est sans objet si l'on utilise un joker (*) pour l'adresse IP dans les directives VirtualHost :
Depuis la version 2.4, la syntaxe des fichiers vhosts a changé :
Remplacer (ancienne syntaxe) | par | |
---|---|---|
autoriser toutes les requêtes | Order allow,deny Allow from all | Require all granted |
interdire toutes les requêtes | Order deny,allow Deny from all | Require all denied |
<VirtualHost *:80> ServerName www.domaine.tld ServerAlias domaine.tld *.domaine.tld DocumentRoot /var/www/html/www.domaine.tld ... </VirtualHost>
Supposons que :
Créez le fichier :
<VirtualHost *:80> # Le premier hôte virtuel de la liste est aussi le serveur par défaut pour *:80 ServerName www.example.com ServerAlias example.com DocumentRoot "/www/domain" </VirtualHost> <VirtualHost *:80> ServerName other.example.com DocumentRoot "/www/otherdomain" </VirtualHost>
On peut aussi spécifier une adresse IP explicite à la place de * dans la directive <VirtualHost>. Cela permet de faire tourner des hôtes virtuels par nom sur une même adresse IP, et d'autres, soit par IP, soit basés sur un autre jeu d'hôtes virtuels par nom sur une autre adresse IP.
Plusieurs serveurs sont accessibles par plus d'un nom. Il suffit de placer la directive ServerAlias dans une section <VirtualHost>. Par exemple, dans la première section <VirtualHost> ci-dessus, la directive ServerAlias indique aux utilisateurs les autres noms permis pour accéder au même site Web :
ServerAlias exemple.com *.exemple.com
Les requêtes portant sur un domaine example.com seront servies par l'hôte virtuel www.example.com. Les caractères joker * et ? peuvent être utilisés pour les correspondances. Bien entendu, vous ne pouvez pas inventer des noms et les placer dans une directive ServerName ou ServerAlias. Il faut d'abord configurer votre serveur DNS pour lier ces noms à une adresse IP associée avec votre serveur.
La recherche del'hôte virtuel par nom qui correspond au plus près à la requête s'effectue parmi les <virtualhost> selon leur ordre d'apparition dans le fichier de configuration. Le premier hôte virtuel dont le ServerName ou le ServerAlias correspond est utilisé, sans priorité particulière en cas de présence de caractères génériques (que ce soit pour le ServerName ou le ServerAlias).
La liste complète des noms dans la section VirtualHost est traitée comme une directive ServerAlias sans caractères génériques.
Vous pouvez affiner la configuration des hôtes virtuels en plaçant d'autres directives à l'intérieur des sections <VirtualHost>. La plupart des directives peut être placée dans ces sections en y changeant seulement la configuration de l'hôte virtuel associé. Pour déterminer si une directive particulière est permise, consultez le contexte de la directive. Le jeu de directives configurées dans le contexte du serveur principal (en dehors de toutes sections <VirtualHost>) sera utilisé seulement s'il n'y a pas de configuration contraire par un hôte virtuel.