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.
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à :
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.
nmap : les 12 commandes que vous devez connaître
Protocole du routage
Netstat : Les 14 commandes les plus utilisées
How to check the lock status of a user account in Linux
Fail2Ban : How to protect Linux services