Les serveurs virtuels, ou VirtualHost, permettent de faire cohabiter plusieurs serveurs web sur une même machine. C’est intéressant notamment dans le cadre d’un poste de développement pour pouvoir gérer tous ses projets et pouvoir y accéder par des urls différentes.
Emplacement des VirtualHost
Vous allez pouvoir trouver vos VirtualHost dans le répertoire :
cd /etc/apache2
Là, deux dossiers vont nous intéresser tout particulièrement : « sites-available » dans lequel vous trouverez tous les serveurs virtuels créés et disponibles, et « sites-enabled » où vous trouverez les hôtes disponibles ayant été activés.
Création d’un VirtualHost
Dans le cas d’un poste de développement, vous allez créer des hôtes virtuels basés sur le nom (une seule IP, plusieurs noms de domaines).
Déjà, il vous faut modifier votre fichier host local pour que le nom de domaine que vous allez créer avec votre VirtualHost pointe sur votre machine locale. Pour cela, vous pouvez faire un
sudo vi /etc/hosts
en édition, vous allez rajouter :
127.0.0.1 votre.virtual.host
Vous allez maintenant pouvoir vous rendre dans le dossier « sites-available » pour créer un nouveau fichier avec votre éditeur préféré.
Votre fichier va être encadré par les balises <VirtualHost> et </VirtualHost>. Dans la balise ouvrante, vous allez pouvoir spécifier les ip et ports entrants si besoin. Si vous souhaitez utilise n’importe quelle IP, vous pouvez mettre « * ».
Par exemple, voici deux balises ouvrantes, une pour n’importe quelle IP sur le port 80 (http) et une sur n’importe quelle IP sur le port 443 (https) :
<VirtualHost *:80> <VirtualHost *:443>
Voici maintenant un exemple plus complet de VirtualHost, qui va gérer le http et le https, les cerfificats https, le chargement d’un fichier de configuration PHP contenant les constantes, mais également l’emplacement des logs erreur php et apache.
Le voici, nous détaillerons ensuite les différents éléments de ce serveur virtuel :
<VirtualHost *:80> ServerName dev.monsite.com ServerAdmin webmaster@localhost DocumentRoot /var/www/monSite/public_html ErrorLog /var/www/monSite/logs/apache/error_log TransferLog /var/www/monSite/logs/apache/access_log <Directory "/var/www/monSite/public_html"> AllowOverride All php_value auto_prepend_file /var/www/monSite/config/dev.monsite.config.php php_value error_log /var/www/monSite/logs/php/php.err </Directory> </VirtualHost> <VirtualHost *:443> ServerName dev.monsite.com ServerAdmin webmaster@localhost SSLEngine on SSLCertificateFile /etc/ssl/certs/dev.monsite.pem SSLCertificateKeyFile /etc/ssl/certs/dev.monsite.pem DocumentRoot /var/www/monSite/public_html ErrorLog /var/www/monSite/logs/apache/error_log TransferLog /var/www/monSite/logs/apache/access_log <Directory "/var/www/monSite/public_html"> AllowOverride All php_value auto_prepend_file /var/www/monSite/config/dev.monsite.config.php php_value error_log /var/www/monSite/logs/php/php.err </Directory> </VirtualHost> <pre>
Voici le détail des éléments :
- DocumentRoot : la racine html de votre projet.
- ErrorLog et TransferLog : les chemins vers les logs d’erreur Apache.
- Les balises Directory contiennent des instructions spécifiques au dossier en question.
- AllowOverride All donne la priorité au fichier htaccess par rapport à la configuration du vhost.
- auto-prepend permet de spécifier un fichier à charger. En général il s’agit d’un fichier de configuration PHP contenant les constantes.
- error_log dans le cadre d’une php_value permet d’indiquer le chemin du log d’erreur PHP.
- Pour le port 443, vous pouvez spécifier que le SSL est actif avec SSLEngine.
- Vous pouvez ensuite vers le certificat et la clé de certificat avec SSLCertificateFile et SSLCertificateKeyFile.
Activer et desactiver un VirtualHost
Si vous souhaitez activer un Virtualhost disponible, il suffit de taper la commande :
sudo a2ensite votre.virtual.host
Pour le désactiver, il faudra taper cette commande :
sudo a2dissite votre.virtual.host
A chaque fois, vous devrez faire un reload d’apache :
/etc/init.d/apache2 reload
Pour plus d’informations, je vous invite à consulter la documentation Apache sur le sujet.