CentOS : Configurer un VirtualHost pour Apache (httpd)

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é.

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Florian BURNEL

Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.

Nombre de posts de cet auteur : 5568.Voir tous les posts

6 thoughts on “CentOS : Configurer un VirtualHost pour Apache (httpd)

  • 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 ?

    Répondre
    • Bonjour,
      A première vue, non, mes logs étaient bien générés malgré que SELinux soit actif.

      Cdlt,
      Florian

      Répondre
  • Bonjour,
    merci, difficile de faire plus claire !

    Répondre
  • 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

    Répondre
  • Intéressant et très utile mais à mettre à jour svp

    Répondre
  • pour moi ,ces commandes ne fonctionne pas, quand j’execute dans le navigateur rien n’affiche ,pouvez vous m’aide

    Répondre

Répondre à clement Annuler la réponse

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.