Apache : Apprendre à créer des virtual Hosts

Apache est un logiciel open source qui permet de créer un serveur Web pour pouvoir servir des sites web sur internet, c’est déja le plus utilisé au monde ( voir l’image ci-dessous). Dans cet article nous allons découvrir ce que c’est un Virtual Host et comment peut-on s’en servir pour gérer des sites web.

apache-2020

Virtual Hosts :

Virtual Host est un terme qui signifie la méthode de faire fonctionner un ou plusieurs site web sur seulement un seul serveur web au lieu d’héberger chaque site sur un serveur  indépendant. Deux principaux types de virtual hosts existent : Celui qui est basé sur le nom (name-based virtual hosting) et celui qui est basé sur l’adresse IP (IP-based virtual hosting).

Avec Virtual Host basé sur IP vous pouvez héberger plusieurs sites sur le même Host mais chaque site web a une adresse IP différente alors que dans le cas du Virtual Host basé sur le nom vous pouvez vous pouvez héberger plusieurs sites sur le même Host et avec la même adresse IP. Dans cet article nous n’allons voir uniquement la configuration Apache Virtual host basé sur le nom .

Maintenant que vous savez à quoi sert le Virtual Hosting passons maintenant à la pratique, nous allons voir comment configurer les Virtual Host d’apache.

Configurer apache virtual hosts sur Ubuntu serveur 18.04 LTS

Toute la configuration d’apache que vous allez voir je l’ai fait  au niveau de la distribution Ubuntu serveur.

Installation apache :

Installez apache avec la commande ci-dessous :

Hfr@ubuntu-server:~$ sudo apt-get install apache2
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances
Lecture des informations d'état... Fait
Les paquets supplémentaires suivants seront installés :
  apache2-bin apache2-data apache2-utils libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap liblua5.2-0 ssl-cert
Paquets suggérés :
  www-browser apache2-doc apache2-suexec-pristine | apache2-suexec-custom openssl-blacklist
Les NOUVEAUX paquets suivants seront installés :
  apache2 apache2-bin apache2-data apache2-utils libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap liblua5.2-0 ssl-cert
0 mis à jour, 10 nouvellement installés, 0 à enlever et 21 non mis à jour.
Il est nécessaire de prendre 1 729 ko dans les archives.
Après cette opération, 6 986 ko d'espace disque supplémentaires seront utilisés.
Souhaitez-vous continuer ? [O/n] O

Une fois installé assurez-vous que le service apache est bien démarré :

root@www:~# systemctl status apache2
● apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Drop-In: /lib/systemd/system/apache2.service.d
└─apache2-systemd.conf
Active: active (running) since Sun 2020-04-12 09:57:55 UTC; 1h 52min ago
Main PID: 4150 (apache2)
Tasks: 55 (limit: 2290)
CGroup: /system.slice/apache2.service
├─4150 /usr/sbin/apache2 -k start
├─4562 /usr/sbin/apache2 -k start
└─4563 /usr/sbin/apache2 -k start

Vous trouverez la configuration d’Apache dans le répertoire  /etc/apache2/

root@www:~# ls -l /etc/apache2/
total 84
-rw-r--r-- 1 root root 7224 mars 13 12:26 apache2.conf
drwxr-xr-x 2 root root 4096 avril 13 08:54 conf-available
drwxr-xr-x 2 root root 4096 avril 13 08:57 conf-enabled
-rw-r--r-- 1 root root 1782 juil. 16 2019 envvars
-rw-r--r-- 1 root root 31063 juil. 16 2019 magic
drwxr-xr-x 2 root root 12288 avril 13 08:31 mods-available
drwxr-xr-x 2 root root 4096 avril 13 08:58 mods-enabled
-rw-r--r-- 1 root root 320 juil. 16 2019 ports.conf
drwxr-xr-x 2 root root 4096 avril 13 12:12 sites-available
drwxr-xr-x 2 root root 4096 avril 12 09:17 sites-enabled

-Le fichier contenant la configuration principale est apache2.conf, ce fichier contient plusieurs paramètres, nous allons voir ceux qui sont importants :

# These need to be set in /etc/apache2/envvars
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}

Ces paramètres définissent l’utilisateur et le groupe sous lesquels tourne Apache, comme vous avez pu le remarqué le commentaire en haut nous indique que ces variables sont définit dans le fichier /etc/apache2/envvars, allons jeter un coup d’œil sur ce fichier :

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data

Ainsi www-data est utilisateur et le groupe sous lesquels tourne Apache.

Parmi les paramètre important est l’emplacement des log :

ErrorLog ${APACHE_LOG_DIR}/error.log

Une petit recherche sur nous voyons le répertoire des logs est :

root@www:# grep APACHE_LOG_DIR /etc/apache2/envvars
export APACHE_LOG_DIR=/var/log/apache2$SUFFIX

-Le fichier /etc/apache2/ports.conf contient la directive Listen 80 :

root@www:/etc/apache2# cat ports.conf
# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default.conf

Listen 80

Elle indique à Apache d’écouter sur toutes les interfaces sur le port 80 qui est le port par défaut pour HTTP, vous pouvez bien sur la changer et définir une interface avec un port différent.

 

Ensuite testez si Apache fonctionne bien, pour cela ouvrez votre navigateur et saisissez le lien http://Adresse_IP ou http://localhost, Vous devriez voir une page comme celle là :

apache2

Maintenant que notre service est up et opérationnel passons à l’étape suivante.

Répertoire pour chaque Virtual Hosts

Pour chaque Virtual Host je vais crée un répertoire , celui où seront stockés les fichiers html:

root@www:~# mkdir /var/www/site1
root@www:~# mkdir /var/www/site2

Il est temps maintenant de créer une page web pour nos  virtual Host.

Création dune page web pour chaque Virtual Host :

Nous allons crée une  page web ( nommée Index.html) pour site1:

root@www:~#vim /var/www/site1/index.html

Mettez le code html ci-dessous dans le  du fichier html et enregistrer le :

<html>
 <head>
 <title>www.site1.com</title>
 </head>
 <body>
 <h1>Page de test pour www.site1.com</h1>
 </body>
</html>

faisons la même chose pour site2:

root@www:~#vim /var/www/site2/index.html

et ajoutez les ligne html ci-dessous :

<html>
 <head>
 <title>www.site2.com</title>
 </head>
 <body>
 <h1>Page de test pour www.site2.com</h1>
 </body>
</html>

Fichier de configuration des Virtual host :

Les fichiers de configuration des Vhost se situent dans le répertoire /etc/apache2/sites-available/

Nous  allons créer deux vhost donc il nous faut deux fichiers de configuration.

Commençons par le premier fichier :

Pour éviter d’écrire toute la configuration, je vais copier le fichier « 000-defaut.conf » ( qui existe par défaut)  et lui donner un nom de mon choix à condition d’ajouter l’extension .conf :

root@www:~# cd /etc/apache2/sites-available
root@www:/etc/apache2/sites-available#
root@www:/etc/apache2/sites-available# cp 000-defaut.conf site1.conf

Editer le fichier site1.conf et ajouter les valeur ci-dessous :

<VirtualHost *:80>
 # The ServerName directive sets the request scheme, hostname and port that
 # the server uses to identify itself. This is used when creating
 # redirection URLs. In the context of virtual hosts, the ServerName
 # specifies what hostname must appear in the request's Host: header to
 # match this virtual host. For the default virtual host (this file) this
 # value is not decisive as it is used as a last resort host regardless.
 # However, you must set it for any further virtual host explicitly.
 #ServerName www.example.com

   ServerName www.site1.com
   ServerAdmin webmaster@site1.com
   ServerAlias site1.com
   DocumentRoot /var/www/site1/index.html

Enregistrer et quitter le fichier.

La même chose pour le deuxième fichier :

root@www:/etc/apache2/sites-available# cp 000-defaut.conf site2.conf

<VirtualHost *:80>
 # The ServerName directive sets the request scheme, hostname and port that
 # the server uses to identify itself. This is used when creating
 # redirection URLs. In the context of virtual hosts, the ServerName
 # specifies what hostname must appear in the request's Host: header to
 # match this virtual host. For the default virtual host (this file) this
 # value is not decisive as it is used as a last resort host regardless.
 # However, you must set it for any further virtual host explicitly.
 #ServerName www.example.com

    ServerName www.site2.com
    ServerAdmin webmaster@site2.com
    ServerAlias site2.com
    DocumentRoot /var/www/site2/index.html

</VirtualHost>

Activation des fichiers de configuration de Virtual Hosts :

Après avoir effectuée toutes les actions précédentes nous allons maintenant désactiver le fichier de configuration par défaut avec la commande a2disite  et activer avec a2ensite ceux que nous avons crée :

root@www:~# a2dissite 000-default.conf
root@www:~# a2ensite monsite1.local.conf
root@www:~# a2ensite monsite2.local.conf

Ensuite redémarré le service apache pour que toutes ces changement soient pris en compte :

root@www:~# systemctl restart apache2

ou bien juste dire à apache de relire sa configuration :

root@www:~# systemctl reload apache2

Et voila nous avons terminé la configuration de nos Virtual Host il nous ne reste que tester notre travail.

Mais avant de tester il nous faut une petit configuration à faire coté client vu que nous ne disposons pas de DNS nous allons jouer avec le fichier hosts et faire correspondre l’adresse IP de notre serveur Web avec les noms de domaine des deux sites Web comme ci-dessous :

root@www:~# vim /etc/hosts
192.168.3.12   www.site1.com
192.168.3.11   www.site2.com

Ouvrez votre navigateur et saisissez les nom de domaine de nos sites.

Félicitation nos sites sont bien accessibles 🙂 Comme pouvez le constater nous avons utilisé la même adresse IP pour les deux différents site web c’est ce qu’on appel virtual host basé sur le nom.

J’espère que cet article vous a bien été utile.