Virtual Host
Guide sur la création et la gestion des Virtual Hosts dans Apache.
Créé le 2 novembre 2025
Mis à jour le 2 novembre 2025
Introduction
🔗 Exemples de VirtualHost - Apache
Les Virtual Hosts sont au cœur de la configuration d’Apache lorsqu’il s’agit d’héberger plusieurs sites sur un même serveur.
Ils permettent de définir des environnements indépendants, chacun avec son propre nom de domaine, son dossier racine et ses logs, tout en partageant la même instance Apache.
Cette approche est indispensable pour organiser proprement plusieurs projets web, que ce soit sur un serveur de production ou en environnement local de développement.
Chaque virtual host correspond à une configuration distincte stockée dans le dossier /etc/apache2/sites-available, puis activée pour être lue par Apache.
Sites disponibles et sites actifs
Les dossiers /etc/apache2/sites-available et /etc/apache2/sites-enabled ont un rôle important à connaître.
Sites disponibles
/etc/apache2/sites-available
Ce dossier contient l’ensemble des fichiers de configuration des virtual hosts disponibles sur le serveur.
Chaque fichier y définit les paramètres d’un site web (nom de domaine, dossier racine, logs, etc.).
Les fichiers présents ici ne sont pas encore actifs tant qu’ils n’ont pas été explicitement activés.
Sites actifs
/etc/apache2/sites-enabled
Ce dossier contient uniquement des liens symboliques pointant vers les fichiers de configuration présents dans sites-available.
Lorsqu’un site est activé avec la commande a2ensite nom_du_site.conf, Apache crée automatiquement ce lien symbolique, rendant ainsi le site actif et chargé au prochain redémarrage du service.
Par défaut, Apache installe des fichiers de configuration de base comme 000-default.conf et default-ssl.conf. Ces fichiers peuvent servir d’exemples, mais il est recommandé de les désactiver pour éviter les conflits avec vos propres configurations.
sudo a2dissite 000-default.conf # désactive 000-default.conf (HTTP port 80) sudo a2dissite default-ssl.conf # désactive default-ssl.conf (HTTPS port 443)
Créer un virtual host
Pour héberger un site avec Apache, vous devez créer un virtual host, c’est-à-dire un fichier de configuration dédié à ce site.
Chaque virtual host définit les règles propres à un projet : domaine, dossier racine, logs et droits d’accès.
Créez ce fichier dans le dossier /etc/apache2/sites-available/.
Choisissez un nom clair et explicite pour le retrouver facilement, par exemple : mon_site_dev.conf pour un environnement de développement ou mon_site_prod.conf pour la production.
sudo nano /etc/apache2/sites-available/<mon_site>.conf # à compléter sudo nano /etc/apache2/sites-available/my_project_dev.conf # exemple
Exemple générique
Un virtual host se compose d’un bloc <VirtualHost> qui définit comment Apache doit répondre à un domaine donné.
Chaque bloc précise le port, le domaine, les logs, les permissions, et la manière dont le contenu est servi (fichiers statiques ou proxy vers une application).
<VirtualHost *:80> ServerName mon-site.fr ServerAlias www.mon-site.fr ErrorLog ${APACHE_LOG_DIR}/mon_site_error.log CustomLog ${APACHE_LOG_DIR}/mon_site_access.log combined </VirtualHost>
-
ServerName: nom de domaine principal du site -
ServerAlias: variantes du domaine principal -
ErrorLogetCustomLog: fichiers de logs dédiés à ce site
Servir un site statique
Dans le cas d’un site statique, Apache distribue directement les fichiers présents dans un dossier local du serveur.
<VirtualHost *:80> ServerName my-static-site.fr ServerAlias www.my-static-site.fr DocumentRoot /var/www/my_static_site <Directory /var/www/my_static_site> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> ErrorLog ${APACHE_LOG_DIR}/my_static_site_error.log CustomLog ${APACHE_LOG_DIR}/my_static_site_access.log combined </VirtualHost>
-
DocumentRoot: dossier racine du site -
Directory: permissions et comportements appliqués à ce dossier-
OptionsIndexesFollowSymLinks: autorise la navigation dans le répertoire et les liens symboliques -
AllowOverride All: permet aux fichiers.htaccessd’appliquer leurs propres règles -
Require all granted: autorise l’accès à tous les visiteurs
-
Ce mode est idéal pour des sites statiques, des portfolios ou des exports HTML simples.
Servir une application via reverse proxy
Un reverse proxy publie une application qui écoute sur une URL locale avec un port. C’est le cas pour les applications Node.js ou tout autre serveur web applicatif.
Avant tout, il faut activer les modules nécessaires :
sudo a2enmod proxy proxy_http proxy_wstunnel headers sudo systemctl restart apache2
Exemple complet pour une application qui tourne sur le port 4174 :
<VirtualHost *:80> ServerName my-app-dev.fr ServerAlias www.my-app-dev.fr ProxyPreserveHost On # redirection du trafic HTTP vers l'app ProxyPass / http://localhost:4174/ retry=0 ProxyPassReverse / http://localhost:4174/ RequestHeader set X-Forwarded-Proto "http" RequestHeader set X-Forwarded-Port "80" ErrorLog ${APACHE_LOG_DIR}/my_app_error.log CustomLog ${APACHE_LOG_DIR}/my_app_access.log combined </VirtualHost>
Ce mode permet de faire transiter les requêtes vers une application locale sans exposer directement son port.
Variante mixte dossier et proxy
Il est aussi possible de combiner un dossier statique (pour les ressources publiques) et un proxy pour l’application.
<VirtualHost *:80> ServerName my-project-dev.fr DocumentRoot /var/www/my_project <Directory /var/www/my_project> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> ProxyPreserveHost On # ne proxifie pas le sous-dossier public ProxyPass /public ! ProxyPass / http://localhost:4174/ retry=0 ProxyPassReverse / http://localhost:4174/ ErrorLog ${APACHE_LOG_DIR}/my_project_error.log CustomLog ${APACHE_LOG_DIR}/my_project_access.log combined </VirtualHost>
Ce type de configuration est souvent utilisé pour des applications modernes dont les assets statiques sont servis par Apache, tandis que le rendu dynamique passe par un serveur applicatif.
Activer un virtual host
Une fois le fichier de configuration créé, vous devez l’activer pour qu’Apache le prenne en compte.
sudo a2ensite <mon_site>.conf # à compléter sudo a2ensite my_project_dev.conf # exemple sudo systemctl reload apache2 # recharge la configuration sans couper le service
Cette commande crée un lien symbolique entre le fichier /etc/apache2/sites-available/my_project_dev.conf et le dossier /etc/apache2/sites-enabled.
Apache lit ensuite ce dossier pour charger uniquement les sites activés.
Le site est donc désormais disponible.
Nom de domaine
Chaque virtual host doit être identifié par un nom unique pour qu’Apache sache quelle configuration utiliser lorsqu’il reçoit une requête.
Ce rôle est assuré par les directives ServerName et ServerAlias.
-
ServerName indique le nom de domaine principal du site, c’est celui que le client (navigateur) enverra dans l’en-tête
Hostde la requête HTTP -
ServerAlias permet de définir des variantes de ce nom, comme les versions avec ou sans
www
Lorsque le navigateur envoie une requête à Apache, celui-ci compare le nom reçu dans l’en-tête Host avec les valeurs de ServerName et ServerAlias de chaque virtual host.
C’est ainsi qu’il détermine quelle configuration charger et donc quel site servir.
Si aucun ServerName ou ServerAlias ne correspond, Apache utilisera le premier virtual host défini (souvent 000-default.conf).
Cela peut entraîner l’affichage du mauvais site, ou simplement la page par défaut d’Apache.