Vhosts
| Fiche express | |
|---|---|
| Domaine | Hôtes virtuels (VirtualHost) Apache |
| Convention Debian/Ubuntu | sites-available/ + sites-enabled/
|
| Convention RHEL/CentOS | pas de convention native — arborescence libre + Include
|
| Voir aussi | Vhost drupal.conf · Proxy apache · Securiser apache 2 |
Les hôtes virtuels (vhosts) permettent à un même serveur Apache de servir plusieurs
sites, distingués par nom de domaine (name-based) ou par IP/port dédiés (IP-based).
Cette page couvre la convention sites-available/sites-enabled,
héritée de Debian/Ubuntu mais reproductible manuellement sur toute distribution.
Préparation de l'arborescence
mkdir -p /etc/httpd/sites-available /etc/httpd/sites-enabled
Sur Debian/Ubuntu, cette arborescence existe nativement (/etc/apache2/sites-available,
gérée par a2ensite/a2dissite) ; sur RHEL/CentOS, elle est à créer et à
inclure manuellement dans httpd.conf :
# httpd.conf
Include /etc/httpd/sites-enabled/
(la directive historique NameVirtualHost, utilisée pour déclarer une IP:port comme
hébergeant plusieurs vhosts par nom, a été supprimée en Apache 2.4 — le comportement est
désormais automatique dès qu'au moins deux <VirtualHost> partagent la même
adresse/port ; inutile de la déclarer sur une installation récente.)
Exemple de fichier de vhost
# /etc/httpd/sites-available/example.com.conf
<VirtualHost example.com:80>
ServerAdmin admin@example.com
ServerName example.com
ServerAlias www.example.com *.example.com
DocumentRoot /home/ops/www/example.com/htdocs/
<Directory "/home/ops/www/example.com/htdocs">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>
ErrorLog /home/ops/www/example.com/logs/error.log
CustomLog /home/ops/www/example.com/logs/access.log combined
</VirtualHost>
Pour un serveur local sans DNS, ajouter la résolution dans /etc/hosts de chaque
poste client :
# /etc/hosts
192.0.2.10 example.com example
192.0.2.10 dev.example.com dev
Activer le vhost
ln -s /etc/httpd/sites-available/example.com.conf /etc/httpd/sites-enabled/example.com.conf
mkdir -p /var/log/httpd/example.com/logs/
systemctl reload httpd
HTTPS
Génération d'un certificat auto-signé (test/dev)
# RHEL/CentOS
yum install mod_ssl
openssl pkcs12 -in fichier.pfx -nocerts -nodes -out privatekey.key
openssl pkcs12 -in fichier.pfx -clcerts -nokeys -out certificate.crt
# Debian
apt-get install openssl
mkdir /etc/ssl-certs && cd /etc/ssl-certs
openssl req -new -x509 -nodes -out server.crt -keyout server.key
Bloc VirtualHost HTTPS
<VirtualHost *:443>
ServerAdmin webmaster@localhost
SSLEngine on
SSLProtocol -all +TLSv1.2 +TLSv1.3
SSLCertificateFile /etc/ssl-certs/server.crt
SSLCertificateKeyFile /etc/ssl-certs/server.key
DocumentRoot /var/www/monsite
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/monsite>
Options FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>
ErrorLog /var/log/apache2/monsite-error.log
LogLevel warn
CustomLog /var/log/apache2/monsite-access.log combined
</VirtualHost>
(SSLProtocol et Require all granted modernisés par rapport à la
source, qui n'excluait explicitement que SSLv2/SSLv3 et utilisait encore la syntaxe Apache 2.2
— voir Securiser apache 2 pour le choix des protocoles/suites en détail. Pour un
certificat de production, préférer Let's Encrypt/Certbot à un certificat auto-signé.)
Voir aussi
- Vhost drupal.conf — exemple de vhost applicatif (Drupal)
- Proxy apache — vhost en reverse proxy
- Securiser apache 2 — durcissement TLS détaillé
- WebDAV — partage de fichiers via un vhost dédié