Comment héberger plusieurs sites web sur un seul serveur Apache ?

Les hôtes virtuels Apache sont une fonctionnalité qui vous permet d’héberger plusieurs sites web indépendants à partir d’une seule installation Apache.

Chaque site possède son propre répertoire de système de fichiers et son propre nom de domaine. Vous pouvez proposer différents sites à différents visiteurs en fonction du domaine qu’ils utilisent.

Les hôtes virtuels sont créés à l’aide de la directive dans les fichiers de configuration d’Apache. Ils sont généralement stockés dans le répertoire sites-available du chemin d’installation d’Apache. Sur les systèmes Debian, c’est généralement /etc/apache2 ; d’autres distributions peuvent utiliser /etc/httpd.

Configuration du site

Chaque site a besoin de son propre répertoire de système de fichiers. Vous placerez les fichiers du site Web, tels que HTML, CSS et JavaScript, dans ce répertoire. On l’appelle Apache DocumentRoot, car c’est la racine à partir de laquelle les documents sont servis.

Vous pouvez placer vos sites n’importe où sur votre système. Vous verrez souvent des hôtes virtuels stockés dans /var/www, chaque site ayant son propre dossier :

sudo mkdir -p /var/www/a.example.com

sudo mkdir -p /var/www/b.example.com

/var/www est normalement détenu par root, nous utilisons donc sudo pour créer les sous-répertoires.

Ensuite, changez la propriété des racines du document à votre utilisateur et définissez les autorisations appropriées. Cela permettra à Apache de lire les fichiers tout en vous donnant un accès en écriture pour que vous puissiez ajouter votre propre contenu.

sudo chown -R $USER:$USER /var/www/a.example.com

sudo chown -R $USER:$USER /var/www/b.example.com

sudo chmod -R 755 /var/www

Copiez les fichiers de votre site Web dans des répertoires. Nous allons utiliser deux fichiers index.html simples :

a.exemple.com/index.html

<body>

    <h1>a.exemple.com</h1>

</body>

b.exemple.com/index.html

<body>

    <h1>b.exemple.com</h1>

</body>

Configuration d’Apache

Vous êtes maintenant prêt à configurer vos hôtes virtuels. Créez un nouveau fichier d’hôte virtuel pour chacun de vos sites. Le nom du fichier n’a pas d’importance ; par convention, il s’agit généralement du nom d’hôte de votre site.

Au minimum, chaque hôte virtuel doit déclarer deux propriétés :

ServerName - Le nom d'hôte (domaine) à partir duquel le site sera servi.
DocumentRoot - L'emplacement du système de fichiers à utiliser pour cet hôte virtuel.

Vous trouverez ci-dessous un exemple de configuration pour nos deux sites :

/etc/apache2/sites-available/a.example.com.conf

Nom du serveur a.example.com

DocumentRoot /var/www/a.example.com

/etc/apache2/sites-available/b.example.com.conf

Nom du serveur b.exemple.com

DocumentRoot /var/www/b.exemple.com

Cette configuration de base est suffisante pour que les deux sites fonctionnent ! Le *:80 signifie qu’Apache envisagera d’utiliser cet hôte virtuel pour toutes les requêtes arrivant sur le port 80. Plus tard, ils seront supprimés par les déclarations ServerName.

Activer les hôtes virtuels

Ajouter un hôte virtuel à sites-available ne fait que le rendre disponible mais pas actif.

Vous devez activer manuellement chaque site que vous souhaitez utiliser. Les configurations d’hôtes virtuels à activer doivent être liées symboliquement à /etc/apache2/sites-enabled (ou /etc/httpd/sites-enabled).

Sur les systèmes Debian, vous pouvez utiliser la commande a2ensite pour simplifier cette étape :

a2ensite a.example.com

a2ensite b.exemple.com

Sur d’autres distributions, utilisez l’extension de la commande ln pour créer manuellement un lien symbolique.

sudo ln -s /etc/httpd/sites-available/a.example.com.conf /etc/httpd/sites-enabled/a.example.com.conf

sudo ln -s /etc/httpd/sites-available/a.example.com.conf /etc/httpd/sites-enabled/b.example.com.conf

Enfin, redémarrez Apache pour appliquer la nouvelle configuration. Les modifications apportées à l’hôte virtuel nécessitent un redémarrage du serveur après leur ajout à sites-enabled.

sudo apache2ctl restart

Vous devriez maintenant être en mesure de voir Apache servir vos deux sites différents. Si vous n’avez pas de résolution DNS sur votre serveur, vous pouvez modifier le fichier /etc/hosts de votre système pour tester la configuration.

Ajoutez les lignes suivantes au fichier /etc/hosts :

127.0.0.1 a.exemple.com

127.0.0.1 b.exemple.com

Cela forcera les deux domaines à se résoudre à votre système. Vous pourrez maintenant les visiter dans votre navigateur pour voir les deux pages différentes de l’hôte virtuel.

Alias du site

Si vous voulez servir le même site sur plusieurs domaines, utilisez la directive ServerAlias sur votre hôte virtuel.

Chaque alias sera pris en compte lorsqu’Apache comparera votre hôte virtuel aux requêtes entrantes. L’hôte virtuel sera utilisé si la demande est Hôte l’en-tête correspond à ServerAlias ou à ServerName.

Nom du serveur a.example.com

ServerAlias exemple.com

ServerAlias www.example.com

DocumentRoot /var/www/a.example.com

Cet exemple permet de servir un site dans trois domaines, sans avoir à répéter les détails de la configuration. Vous devez utiliser ServerAlias pour définir plusieurs domaines – répéter ServerName est possible, mais écrasera les utilisations ci-dessus.

Autres options de configuration

De nombreuses options de configuration du serveur Apache peuvent être utilisées avec des hôtes virtuels. Ils remplaceront la configuration globale du serveur lorsque Apache traitera une requête utilisant l’hôte virtuel.

Nom du serveur a.example.com

DocumentRoot /var/www/a.example.com

Index du répertoire mon-index.html



<Répertoire /var/www/a.example.com>

    AllowOverride Tous

    Options -Index

    Exiger que toutes les subventions

</Directory>



Journal des erreurs ${APACHE_LOG_DIR}/error.log

CustomLog ${APACHE_LOG_DIR}/access.log combiné

Cet hôte virtuel applique de nombreux autres paramètres. my-index.html est servi par défaut au lieu de index.htm et des chemins de logs personnalisés sont utilisés.

En outre, des paramètres supplémentaires sont appliqués à la racine du document elle-même, à l’aide du fichier de bloc de répertoire.

Les surcharges .htaccess sont autorisées (AllowOverride All) et les pages de liste de répertoire par défaut d’Apache sont désactivées (Options -Indexes).

Adresse IP Hôte

Apache supporte également les hôtes basés sur l’IP en plus des hôtes basés sur le nom que nous avons vus jusqu’à présent. Les hôtes basés sur IP sont idéaux lorsque votre serveur dispose de plusieurs interfaces réseau, comme un réseau d’entreprise interne et l’Internet public. Il est possible de desservir un site différent selon l’interface réseau utilisée.

Nom du serveur a.example.com

DocumentRoot /var/www/a
Nom du serveur b.exemple.com

DocumentRoot /var/www/b
Nom du serveur a.example.com

DocumentRoot /var/www/a2

Dans cet exemple, les requêtes adressées à a.example.com via l’interface IP 192.168.0.1 recevraient un contenu différent de celui envoyé via 172.17.0.1.

En outre, les utilisateurs de cette dernière IP seraient en mesure de se connecter à b.example.com. Ce site n’est pas exposé aux utilisateurs qui se connectent via 192.168.0.1.

Cette approche vous permet d’utiliser un seul serveur pour votre intranet d’entreprise et votre site web public.

Associez les sites internes à l’adresse IP du réseau local de votre serveur ; exécutez les hôtes publics en fonction de votre adresse WAN.

Correspondance avec un hôte virtuel

La routine de résolution des hôtes virtuels d’Apache est bien documentée et assez simple.

En général, Apache tente de faire correspondre le fichier de demande d’en-tête Host avec un fichier ServerName ou ServerAlias dans une configuration d’hôte virtuel. S’il y a plusieurs correspondances, Apache utilisera la première extension correspondant à l’hôte virtuel trouvé.

Les hôtes virtuels sont triés par nom de fichier. Si vous devez faire correspondre un site avant un autre, renommez votre fichier de configuration pour qu’il soit trié avant le site cible. Vous pouvez ajouter un préfixe numérique tel que 000-a.exemple.com.conf. La plupart du temps, cela ne sera pas nécessaire : si tous vos sites ont des domaines uniques, vous ne devriez jamais rencontrer de conflit.

Un petit clic pour évaluer l'article