CentOS : Configurer un VirtualHost pour Apache (httpd)
Sommaire
I. Présentation
Après avoir vu comment installer un serveur LAMP sous CentOS, je vous propose de voir comment configurer un VirtualHost pour Apache, sur un environnement CentOS toujours.
L'objectif des hôtes virtuels (Virtual Hosts) est clair : vous permettre d'héberger plusieurs sites sur le même serveur web. Dans chaque hôte virtuel, nous pouvons configurer indépendamment les options et notamment le nom de domaine associé au site, ainsi que le dossier sur le serveur qui correspond aux données du site.
Le nom de domaine est très important dans la configuration car lorsqu'Apache va recevoir une requête il va savoir à quel site la requête est destinée.
II. Préparer le dossier du vHost
Dans cet exemple, nous mettrons en oeuvre le site it-connect.local mais il conviendra d'adapter avec le nom de votre site. Pour faire des tests et tricher sans interagir avec le DNS, sur Windows vous pouvez déclarer le nom de domaine dans votre fichier hosts (C:\Windows\System32\drivers\etc).
Il est à noter que, par défaut, Apache est préconfiguré avoir un hôte virtuel qui a pour racine le dossier "/var/www/html". Un bon point de départ, mais insuffisant pour héberger plusieurs sites.
Ce que l'on va commencer par faire, c'est créer un dossier dédié à notre site. Ce qui donne :
sudo mkdir -p /var/www/it-connect/html
Le sous-dossier "html" n'est pas obligatoire mais cela permet de garder la structure d'origine. Dans la commande ci-dessus, l'option "-p" sert à créer tout le chemin. Autre point important : la gestion des journaux (logs) ; il est possible de les stocker à un endroit spécifique, nous allons créer un dossier dédié aux logs de ce VirtualHost.
sudo mkdir -p /var/www/it-connect/logs
L'utilisateur d'Apache se nomme tout simplement "apache", nous allons lui donner les droits sur les dossiers du vHost (html et logs) et appliquer les permissions par défaut.
sudo chown -R apache:apache /var/www/it-connect/ sudo chmod -R 755 /var/www/it-connect/
III. Créer un fichier d'exemple
Pour que le site soit joignable, il faut créer une page d'index qui par défaut doit se nommer index.html. Créez et ouvrez le fichier :
sudo nano /var/www/it-connect/html/index.html
Je vous propose d'inclure ce bout de code pour faire un essai :
<html> <head> <title>IT-Connect</title> </head> <body> <h1>Bienvenue sur le site it-connect.local</h1> </body> </html>
Enregistrez ce fichier et passez à la suite... Pour le moment notre magnifique site n'est pas en ligne.
IV. Préparation du serveur Apache
Avec Apache, nous avons pour habitude d'utiliser deux dossiers pour gérer les sites :
- sites-available : stocke les configurations de tout nos sites
- sites-enabled : stocke les configurations des sites actifs
En fait, nous allons dire à Apache d'inclure à sa configuration le chargement de tous les fichiers de configuration stocké dans le dossier "sites-enabled". Cette gestion permet d'activer ou désactiver facilement un site afin de le mettre en production en temps voulu.
Ces deux dossiers sont à créer :
sudo mkdir /etc/httpd/sites-available /etc/httpd/sites-enabled
Ensuite, Apache doit être configuré pour appeler le contenu du dossier sites-enabled. Modifiez le fichier de configuration :
sudo nano /etc/httpd/conf/httpd.conf
Et ajoutez les deux lignes ci-dessous à la fin du fichier. Au prochain redémarrage du processus, Apache va charger tous les fichiers ".conf" du dossier sites-enabled.
# Load config from sites-enabled directory IncludeOptional sites-enabled/*.conf
Maintenant, il faut que l'on crée notre hôte virtuel...
V. Création du vHost Apache
Puisqu'il s'agit d'un nouveau site, nous allons le créer dans le dossier sites-available. En fait, tous les sites doivent être déclarés dans ce dossier. Ensuite, on fera un lien symbolique vers le dossier sites-enabled pour ce site afin de l'activer ?
sudo nano /etc/httpd/sites-available/it-connect.conf
Dans ce fichier, l'hôte virtuel se déclare dans un bloc <VirtualHost> qui contient à l'intérieur toutes les directives de configuration du site. Nous retrouvons notamment la racine du site qui est celle que l'on a créé au préalable (/var/www/it-connect/html) ainsi que le chemin pour les logs. En complément, la directive ServerName sert à indiquer le nom de domaine.
Voici un exemple de VirtualHost qui correspond à un site accessible en http (port 80) :
<VirtualHost *:80> ServerName www.it-connect.local ServerAlias it-connect.local DocumentRoot /var/www/it-connect/html ErrorLog /var/www/it-connect/logs/error.log CustomLog /var/www/it-connect/logs/access.log combined </VirtualHost>
Quand c'est bon pour vous, enregistrez et fermez le fichier. Maintenant pour que le site puisse être chargé par Apache, nous devons l'inclure dans le dossier sites-enabled. Plutôt que de déplacer le fichier de configuration ou de le copier, nous allons plutôt créer un lien symbolique avec la commande ln. Ce qui donne :
sudo ln -s /etc/httpd/sites-available/it-connect.conf /etc/httpd/sites-enabled/it-connect.conf
VI. Tester l'accès au site
Maintenant que la configuration est prête, il ne reste plus qu'à redémarrer le service Apache :
sudo systemctl restart httpd
Si le redémarrage échoue : soit votre configuration contient une anomalie, soit c'est une protection SELinux qui s'est déclenchée.
Il y a notamment l'option httpd_unified qui est désactivée par défaut. Pour que le processus Apache puisse accéder en écriture au contenu de notre site, ce qui est utile pour les logs, il faut activer cette option en passant le booléen sur "1".
La commande ci-dessous va effectuer la modification au sein de SELinux :
sudo setsebool -P httpd_unified 1
Précision : grâce à l'option "-P" nous rendons cette modification persistante (donc en cas de redémarrage complet du serveur). Retentez ensuite de redémarrer Apache 🙂
Notre magnifique site est désormais en ligne ! ??
Pour terminer cet article, je vous invite à consulter les logs d'accès à notre site. Pour afficher les dernières lignes du fichier, saisissez la commande suivante :
sudo tail -f /var/www/it-connect/logs/access.log
Vous devrez voir apparaître des logs correspondants à l'accès depuis votre PC :
192.168.1.120 - - [20/Nov/2019:22:34:27 +0100] "HEAD / HTTP/1.1" 200 - "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36" 192.168.1.120 - - [20/Nov/2019:22:35:31 +0100] "GET / HTTP/1.1" 200 135 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
Voilà, vous êtes désormais en mesure de configurer des hôtes virtuels avec Apache ! Je vous invite à adapter la configuration du vHost en fonction de l'application qui se trouve derrière notamment pour ajuster la sécurité.
Merci pour cet article. Une question. SELinux ne rouspète pas si l’on range les logs ailleurs que dans l’arborescence /var/log/httpd ?
Bonjour,
A première vue, non, mes logs étaient bien générés malgré que SELinux soit actif.
Cdlt,
Florian
Bonjour,
merci, difficile de faire plus claire !
bonjour,
merci pour ce tutoriel !
j’ai un peu de difficulté avec mon hote virtuelle, je suis à la lettre les instructions, mais après avoir relancé httpd, la page de mon site « test » qui devrait se trouver sur test.xxx.freeboxos.fr (dns offert par la freebox avec ip fixe), s’est placée sur xxx.freeboxos.fr (et vole donc la vedette à la page de bienvenue apache).
dans le doute j’ai viré le serveuralias de test.conf :
ServerName test.xxx.freeboxos.fr
DocumentRoot /var/www/test/html
ErrorLog /var/www/test/logs/error.log
CustomLog /var/www/test/logs/access.log combined
ps : je n’ai eu aucun pb à configurer un vhost pour phpmyadmin sous xxx.freeboxos.fr/phpmyadmin
avez vous une idée de ce que j’aurais pu rater?
Cordialement
Intéressant et très utile mais à mettre à jour svp
pour moi ,ces commandes ne fonctionne pas, quand j’execute dans le navigateur rien n’affiche ,pouvez vous m’aide