Apache : Les Virtual Hosts
Table des matières
Votre serveur ne dispose que d'une seule adresse IP, et de nombreux alias (CNAMES) pointent vers cette adresse dans le DNS. Pour l'exemple, dev.linuxtricks.fr et marjo21.linuxtricks.fr doivent tourner sur cette machine mais dans 2 racines de sites différents.
D'abord, s'assurer que dans le fichier httpd.conf on ait une ligne de ce style :
Grâce à cette ligne, on inclura tous les .conf de /etc/apache2/vhosts.d/
Vous l'aurez compris, tous mes "virtual hosts" vont être des fichiers du style xxx.conf dans /etc/apache2/vhosts.d/
Voici l'exemple de mon site de développement : dev.linuxtricks.fr
Pour me repérer facilement, le fichier est nomdedomaine.conf :
Et le deuxième :
Je reprends mon fichier précédent et vais expliquer les lignes du "Virtual Host" :
Pour les droits, on a :
Je vais faire simple, je vous montre pour le miroir Calculate Linuxtricks les 2 Virtualhosts configurés (simultanément) afin que vous voyiez les différences (ce qui a été ajouté). A savoir le port d'écoute et les 3 lignes commençant par SSL.
Si on souhaite ajouter un vhost qui écoute sur un autre port, il suffit d'ajouter une directive listen en plus dans le fichier de configuration du vhost :
Introduction
Votre serveur ne dispose que d'une seule adresse IP, et de nombreux alias (CNAMES) pointent vers cette adresse dans le DNS. Pour l'exemple, dev.linuxtricks.fr et marjo21.linuxtricks.fr doivent tourner sur cette machine mais dans 2 racines de sites différents.
Configurer httpd.conf
D'abord, s'assurer que dans le fichier httpd.conf on ait une ligne de ce style :
Code BASH :
Include /etc/apache2/vhosts.d/*.conf
Grâce à cette ligne, on inclura tous les .conf de /etc/apache2/vhosts.d/
Vous l'aurez compris, tous mes "virtual hosts" vont être des fichiers du style xxx.conf dans /etc/apache2/vhosts.d/
Création des Virtual Hosts
Voici l'exemple de mon site de développement : dev.linuxtricks.fr
Pour me repérer facilement, le fichier est nomdedomaine.conf :
Code BASH :
vi /etc/apache2/vhosts.d/dev.linuxtricks.conf
Code BASH :
<VirtualHost *:80> ServerName dev.linuxtricks.fr ServerAlias dev.linuxtricks.fr ServerAdmin webmaster@linuxtricks.fr ErrorLog /var/log/apache2/dev.linuxtricks.fr-error_log TransferLog /var/log/apache2/dev.linuxtricks.fr-access_log DocumentRoot "/var/www/localhost/htdocs/dev/" <Directory "/var/www/localhost/htdocs/dev/"> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> </VirtualHost>
Et le deuxième :
Code BASH :
vi /etc/apache2/vhosts.d/marjo21.linuxtricks.conf
Code BASH :
<VirtualHost *:80> ServerName marjo21.linuxtricks.fr ServerAlias marjo21.linuxtricks.fr ServerAdmin webmaster@linuxtricks.fr ErrorLog /var/log/apache2/marjo21.linuxtricks.fr-error_log TransferLog /var/log/apache2/marjo21.linuxtricks.fr-access_log DocumentRoot "/var/www/localhost/htdocs/marjo21/" <Directory "/var/www/localhost/htdocs/marjo21/"> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> </VirtualHost>
Explications
Je reprends mon fichier précédent et vais expliquer les lignes du "Virtual Host" :
Code BASH :
<VirtualHost *:80> # Virtualhost écoutant sur le port 80 ServerName dev.linuxtricks.fr # Nom du serveur auquel le vhost doit répondre ServerAlias dev.linuxtricks.fr # Eventuel alias supplémentaire ServerAdmin webmaster@linuxtricks.fr # Mail du webmaster ErrorLog /var/log/apache2/dev.linuxtricks.fr-error_log # Délocaliser pour ce vhost les logs d'erreur TransferLog /var/log/apache2/dev.linuxtricks.fr-access_log # Délocaliser pour ce vhost les logs d'accès DocumentRoot "/var/www/localhost/htdocs/dev/" # Racile des fichiers du site <Directory "/var/www/localhost/htdocs/dev/"> #Définition des droits d'un répertoire Options Indexes FollowSymLinks # Options choisies AllowOverride All # Permet d'utiliser le htaccess dans un site Require all granted # On autorise tout le monde </Directory> # Fin de la définition des droits </VirtualHost> # Fin de la définition du vhost
Pour les droits, on a :
- Require all denied => Tout refuser
- Require all granted => Tout accepter
- Require host example.org => Accepter example.org
- Require ip 1.2.3.4 => Accepter 1.2.3.4
- Require not ip 1.2.3.4 => Refuser 1.2.3.4
Et pour du SSL ?
Je vais faire simple, je vous montre pour le miroir Calculate Linuxtricks les 2 Virtualhosts configurés (simultanément) afin que vous voyiez les différences (ce qui a été ajouté). A savoir le port d'écoute et les 3 lignes commençant par SSL.
Code BASH :
<VirtualHost *:80> DocumentRoot /home/miroir/public_html/ ServerName miroir.linuxtricks.fr ServerAdmin adrien.d@mageialinux-online.org ErrorLog /var/log/httpd/miroir.linuxtricks.fr-error_log TransferLog /var/log/httpd/miroir.linuxtricks.fr-access_log ServerSignature Off <Directory /home/miroir/public_html> Options Indexes +FollowSymLinks AllowOverride All </Directory> </VirtualHost> <VirtualHost *:443> DocumentRoot /home/miroir/public_html/ ServerName miroir.linuxtricks.fr ServerAdmin adrien.d@mageialinux-online.org ErrorLog /var/log/httpd/miroir.linuxtricks.fr-error_log TransferLog /var/log/httpd/miroir.linuxtricks.fr-access_log ServerSignature Off SSLEngine on SSLCertificateFile /etc/letsencrypt/live/miroir.linuxtricks.fr/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/miroir.linuxtricks.fr/privkey.pem <Directory /home/miroir/public_html> Options Indexes +FollowSymLinks AllowOverride All </Directory> </VirtualHost>
Ecouter sur plusieurs ports
Si on souhaite ajouter un vhost qui écoute sur un autre port, il suffit d'ajouter une directive listen en plus dans le fichier de configuration du vhost :
Code BASH :
Listen 8080 <VirtualHost *:8080> #Le contenu du vhost </VirtualHost>