Documentation du Dr FRAPPE

Ce wiki regroupe les résultats de mes expériences en informatique accumulés au cours de mes recherches sur le net.

Dans la mesure du possible, j'ai cité mes sources ; il en manque certainement… :-)

Ceci est une ancienne révision du document !


Apache : Hôtes virtuels

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 :

  • il suffit de configurer le serveur DNS pour que chaque domaine pointe sur l'adresse IP du serveur
  • et de configurer le serveur Apache pour qu'il reconnaisse ces domaines

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 :

  1. Le serveur recherche la section <VirtualHost> ayant la meilleure correspondance avec la paire adresse IP/port utilisée dans la requête. Si plusieurs hôtes virtuels ont la même paire adresse IP/port, Apache compare les valeurs des directives ServerName et ServerAlias au nom de serveur présent dans la requête.
  2. Toujours mettre une directive ServerName dans un hôte virtuel par car cela conduirait à des erreurs.
  3. Si aucune directive ServerName ou ServerAlias ne correspond dans la liste des hôtes virtuels présentant la meilleure correspondance du point de vue adresse IP/port, c'est le premier hôte virtuel de cette liste qui sera utilisé.

Pré-requis

Installation

Configuration

Depuis la version 2.4, la syntaxe des fichiers vhosts a changé :

  1. Le nom des fichiers doit se terminer par .conf
  2. Les directives Allow sont remplacées par Require

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

  1. Pour chaque domaine à définir, créez un fichier /etc/apache2/sites-available/domaine.tld.conf
    1. Dans ce fichier, créez une section VirtualHost pour chaque domaine ou sous-domaine :
      /etc/apache2/sites-available/domaine.tld.conf
      <VirtualHost *:80>
          ServerName www.domaine.tld
          ServerAlias domaine.tld *.domaine.tld
      
          DocumentRoot /var/www/html/www.domaine.tld
          ...
      </VirtualHost>
    • Le premier hôte virtuel du fichier est l'hôte par défaut.
    • Directives obligatoires d'une section VirtualHost :
      • ServerName : nom du serveur
      • DocumentRoot : racine du serveur sur le système de fichiers
    • Directives facultatives :
      • ServerAlias : autres noms permis pour accéder au même site Web (jokers * et ? autorisés)
  2. Tutoriel : vhost

Utilisation

Supposons que :

  • vous hébergez le domaine www.exemple.com
  • et vous souhaitez ajouter l'hôte virtuel other.exemple.com qui pointe sur la même adresse IP.

Créez le fichier :

/etc/apache2/sites-available/exemple.com.conf
<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 :

/etc/apache2/sites-available/exemple.com.conf
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.

Désinstallation

Problèmes connus

Voir aussi

Navigation
  • Pages :
    • créer :
QR Code
QR Code Apache : Hôtes virtuels (generated for current page)