La configuration du serveur Apache se fait par une approche modulaire qui permet d'ajouter et de modifier de nouveaux fichiers selon les besoins, et non dans un seul fichier monolithique. Cette conception modulaire permet de créer un site ou un domaine individuel appelé hôte virtuel.
Les hôtes virtuels permettent à une même instance d'Apache de servir plusieurs sites web. Chaque domaine ou site individuel configuré avec Apache renvoie le visiteur vers un répertoire contenant les données du site en question. Le visiteur n'est pas averti que le même serveur sert aussi d'autres sites. Ce schéma n'a aucune limite tant que le serveur peut supporter la charge.
Ce guide explique comment configurer des hôtes virtuels Apache sur un serveur Ubuntu 20.04. Vous apprendrez comment servir des contenus différents à des visiteurs différents selon les domaines demandés en créant deux hôtes virtuels.
Nous supposons que :
Nous allons créer un hôte virtuel pour example.com et un autre pour test.com. Il y sera fait référence tout au long du guide, mais vous devrez y substituer vos propres domaines ou valeurs tout en suivant le guide.
Nous allons créer un hôte virtuel avec le nom de domaine monsite.loc, qui pointera sur le site web en local.
Chacun des répertoires (nommés ici exemple.org et test.org) contiendra les fichiers du site web.
USER@MACHINE:~$ sudo mkdir -p /var/www/html/{exemple,test}.org USER@MACHINE:~$ sudo chown -R www-data:www-data /var/www/html USER@MACHINE:~$ sudo chmod -R 2755 /var/www/html
Les dossiers des sites se nomment exemple.org et test.org (noms de domaine pour l'accès en production) et non pas exemple.loc et test.loc (noms de domaine pour l'accès en local).
Pour faciliter le nommage du dossier projet et des fichiers de configuration, c'est le nom de domaine de production qui est utilisé.
Cette pratique de nommage n'est pas une obligation, mais reste toutefois une bonne pratique.
Éditez avec les droits d'administration le fichier /etc/hosts
Chaque ligne définit l'association entre une adresse IP et un nom de domaine, plusieurs noms de domaine peuvent avoir la même adresse IP. Par exemple :
# site web local exemple 127.0.0.1 exemple.loc # Autres sites web locaux 127.0.0.1 mon-projet-personnel.loc 127.0.0.1 un-autre-site-web-local.loc 127.0.0.1 test.loc
USER@MACHINE:~$ echo "Bienvenue sur exemple.org !" | sudo tee /var/www/html/exemple.org/index.html
USER@MACHINE:~$ echo "Bienvenue sur test.org !" | sudo tee /var/www/html/test.org/index.html
USER@MACHINE:~$ sudo chown -R www-data:www-data /var/www/html ; sudo chmod -R 2755 /var/www/html
USER@MACHINE:~$ sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/exemple.org.conf
Notez que le nom de domaine de production exemple.org est repris aussi bien pour le répertoire du site que pour le nom du fichier de configuration et que l'extension du fichier de configuration est .conf
<VirtualHost *:80> # e-mail de l'administrateur ServerAdmin admin@exemple.org # Associer le nom de domaine au dossier du projet ServerName exemple.loc ServerAlias www.exemple.loc DocumentRoot /var/www/html/exemple.org # fichiers journaux ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <directory /var/www/html/exemple.org> AllowOverride All Require all granted </Directory> </VirtualHost>
Cette section d’hôte virtuel correspond à toutes les requêtes qui sont faites sur le port 80, le port HTTP par défaut. Ici, nous nous limitons au protocole http et non https.
USER@MACHINE:~$ sudo cp /etc/apache2/sites-available/exemple.org.conf /etc/apache2/sites-available/test.org.conf
<VirtualHost *:80> # e-mail de l'administrateur ServerAdmin admin@test.org # Associer le nom de domaine au dossier du projet ServerName test.loc ServerAlias www.test.loc DocumentRoot /var/www/html/test.org # fichiers journaux ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <directory /var/www/html/test.org> AllowOverride All Require all granted </Directory> </VirtualHost>
USER@MACHINE:~$ sudo a2ensite /etc/apache2/sites-available/exemple.org.conf Enabling site exemple.org. To activate the new configuration, you need to run: systemctl reload apache2 USER@MACHINE:~$ sudo a2ensite /etc/apache2/sites-available/test.org.conf Enabling site test.org. To activate the new configuration, you need to run: systemctl reload apache2
si vous avez besoin de les désactiver, c'est :
USER@MACHINE:~$ sudo a2dissite /etc/apache2/sites-available/exemple.org.conf USER@MACHINE:~$ sudo a2dissite /etc/apache2/sites-available/test.org.conf
USER@MACHINE:~$ sudo apache2ctl configtest . . . Syntax OK
USER@MACHINE:~$ sudo systemctl restart apache2 USER@MACHINE:~$ sudo systemctl status apache2
Le serveur est maintenant configuré pour servir deux sites web.
... 127.0.0.1 exemple.org 127.0.0.1 test.org
Cela dirigera toute demande de exemple.org et test.org sur votre ordinateur en l'envoyant au serveur local. C’est ce que nous voulons si nous ne sommes pas réellement les propriétaires de ces domaines afin de tester nos hôtes virtuels.
Si vous avez modifié le fichier hosts de votre ordinateur local, vous pouvez supprimer les lignes ajoutées une fois vérifiée la configuration.
Vous éviterez ainsi de surcharger votre fichier hosts avec des entrées devenues inutiles.
Désormais, un seul serveur gère deux noms de domaine distincts.
Pour étendre ce processus, il suffit de suivre les mêmes étapes pour ajouter d'autres hôtes virtuels.
Il n'y a pas de limite au nombre de noms de domaine gérables par Apache, alors n'hésitez pas à créer autant d'hôtes virtuels que le serveur peut en supporter.