Ajouter des sous domaines au site principal webodesign.net

Dans ce TP, nous commencerons avec un VPS avec un Debian 11 fraîchement installé et nous finirons avec trois sites différents partageant la même adresse IP, hébergés sur la même machine. Les thèmes abordé dans cet exercice seront, l’Installation d’Apache, la définition des emplacements de fichiers pour la page Apache par défaut, la création d’une structure de fichiers pour les hôtes virtuels, la création des pages index.html pour nos sites de démonstration, la création de fichiers d’hôtes virtuels, l’activation des nouveaux fichiers d’hôte virtuel, le test des hôtes virtuels en http, et enfin la sécurisation des domaines avec les certificats Let’s Encrypt TLS.

Présentation

1. Présentation

L’hébergement virtuel est une technique permettant d’héberger plusieurs sites Web sur un seul serveur Web. Ces sites sont différenciés soit par des noms de domaines différents, soit par des adresses IP ou des ports différents.

Cette fonctionnalité est bien entendue supportée sous Apache, qui a été l’un des premiers serveurs Web à la mettre en œuvre, et par Nginx.

Plusieurs techniques peuvent être utilisée pour réaliser ces hébergements virtuels :

  • Les hôtes virtuels par adresse IP : les requêtes sont alors triées en fonction de l’adresse IP qu’elles utilisent. Chaque hôte virtuel dispose de sa propre adresse IP et répond alors aux requêtes concernant son adresse.
  • Les hôtes virtuels par port : les requêtes sont alors triées en fonction du port qu’elles utilisent. Chaque hôte virtuel dispose de son propre port et répond alors aux requêtes concernant son adresse. Cette technique n’est quasiment jamais utilisée, car utiliser un port différent des ports standards (80 et 443) nécessite de le spécifier dans l’adresse du site (http://example.org:8081/foo/bar, par exemple).
  • Les hôtes virtuels par nom : cette technique repose sur l’évolution apportée par la norme HTTP 1.1, qui prévoit d’ajouter un champ « Host » dans les en-têtes HTTP. Ce champ est alors utilisé pour identifier l’hôte virtuel qui est concerné par une requête donnée.
  • Les hôtes virtuels dynamiques : qui ne possèdent pas de configuration propre, mais qui sont déterminés à partir de l’URL de la requête. Il est alors possible en utilisant quelques règles de décrire le comportement d’un ensemble d’hôtes virtuels.

Installation d’Apache

2. Installation d’Apache

Pour installer le serveur web Apache tapez les commandes suivantes :

sudo apt update
sudo apt install apache2 apache2-doc

Cela installera également le manuel Apache.

La commande suivante affiche l’état du service Apache dans une fenêtre de terminal :

sudo systemctl status apache2

Le véritable test d’une installation réussie est de savoir si l’on accède aux fichiers à partir du serveur via le navigateur local. Accéder à cette adresse :

http://ADRESSE IP

On devrait voir une page de bienvenue pour Apache sur Debian, ce qui signifie que Apache est maintenant en cours d’exécution.

État des lieux des emplacements de fichiers Apache

3. État des lieux des emplacements de fichiers Apache

Sous Debian, la localisation de la page du document racine se trouve dans le répertoire /var/www/html et s’appelle index.html. On peut voir son contenu en exécutant cette commande :

ls -la /var/www/html

Notez que les répertoires et les fichiers index.html appartiennent à l’utilisateur root.

Sous Debian, tous les fichiers Apache sont dans le dossier /etc/apache2 :

ls -la /etc/apache2

Les répertoires des sites disponibles et des sites activés contiennent des informations sur les sites existants et sur les sites autorisés à être accessibles sur Internet.

Le fichier /etc/apache2/sites-enabled/000-default.conf est un lien symbolique vers le fichier du même nom dans le dossier sites-available. Ce lien permet à Apache de lire le contenu du fichier « /etc/apache2/sites-available/000-default.conf » et l’envoyer au navigateur. En ajoutant d’autres fichiers de configuration dans /etc/apache2/sites-available et en créant les liens symboliques correspondants dans /etc/apache2/sites-enabled, nous pouvons établir les pages appartenant aux différents domaines. C’est ainsi que nous pouvons héberger plusieurs sites indépendants à partir d’une même adresse IP.

Création d’une structure de fichiers pour les hôtes virtuels

4. Création d’une structure de fichiers pour les hôtes virtuels

Nous allons maintenant créer les répertoires des deux sites annexes. Les deux sites sont très sommaires et disposerons d’une page « index.html » et d’un sous-dossier devant contenir des éventuelles images.

robert@vmi8:/var/www$ sudo mkdir projets

robert@vmi8:/var/www$ sudo mkdir -p /var/www/projets/01-test-vhost/site1/{public_html,image}
robert@vmi8:/var/www$ sudo mkdir -p /var/www/projets/01-test-vhost/site2/{public_html,image}

On obtient la nouvelle structure de fichier / répertoire.

robert@vmi8:/var/www/projets$ ll /var/www/projets/01-test-vhost/site1
total 14
drwxr-xr-x 7 root root 4096 Dec 29 20:33 ./
drwxr-xr-x 2 root root 4096 Dec 29 20:34 ../
drwxr-xr-x 2 root root 4096 Dec 29 20:33 image/
drwxr-xr-x 2 root root 4096 Dec 29 20:33 public_html/

Dans l’image ci-dessus, nous voyons que l’utilisateur root possède toujours le dossier public_html, à partir duquel nos fichiers publics seront distribués sur Internet. Nous allons maintenant changer la propriété afin que notre utilisateur simple puisse accéder aux fichiers public_html. Les commandes sont les suivantes :

sudo chown -vR robert:robert /var/www/projets/01-test-vhost/site1/public_html
sudo chown -vR robert:robert /var/www/projets/01-test-vhost/site2/public_html

On s’assure également que les fichiers du répertoire /var/www et ses sous-dossiers puissent être accessibles en lecture.

sudo chmod -R 755 /var/www/projets

Création des pages « index.html » pour nos sites de démonstration

5. Création des pages « index.html » pour nos sites de démonstration

Nos fichiers publics seront dans /var/www/projets/01-test-vhost/site1/public.html et /var/www/projets/01-test-vhost/site2/public.html. Nous allons maintenant créer un fichier « index.html » dans chacun de ces deux dossiers afin d’afficher du contenu pendant la navigation. En utilisant nano, nous allons maintenant créer « index.html » pour site1 :

sudo nano /var/www/projets/01-test-vhost/site1/public_html/index.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
	<title>BIENVENU SUR MON SITE 1</title>
	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
	<style type="text/css">
		body,td,th {
   			color: #FF3333;
		}
	</style>
</head>
<body>
	<h1>Contenu du site num 1</h1>
</body>
</html>

De même, on créer le fichier « index.html » du site exemlple site2

sudo nano /var/www/projets/01-test-vhost/site2/public_html/index.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
	<title>BIENVENU SUR MON SITE 2</title>
	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
	<style type="text/css">
		body,td,th {
   			color: #FF3333;
		}
	</style>
</head>
<body>
	<h1>Contenu du site num 2</h1>
</body>
</html>

Création des fichiers de configuration des hôtes virtuels

6. Création des fichiers de configuration des hôtes virtuels

Un hôte virtuel est une identité (supplémentaire) assumée par le serveur web. Le Serveur HTTP Apache2 est capable de gérer simultanément plusieurs arborescences Web grâce à la notion Virtual Hosts (hôtes virtuels).

Apache distingue deux types d’hôtes virtuels :

  • ceux qui se basent sur l’adresse IP : cette méthode nécessite une adresse IP différente pour chaque site ;
  • ceux qui reposent sur le nom DNS du serveur web : celle-ci n’emploie qu’une adresse IP et différencie les sites par le nom d’hôte communiqué par le client HTTP.

La configuration par défaut d’Apache 2 a déjà activé les hôtes virtuels basés sur le nom grâce à la directive NameVirtualHost du fichier /etc/apache2/sites-enabled/000-default. Ce fichier décrit en outre un hôte virtuel par défaut qui sera employé si aucun hôte virtuel correspondant n’existe.

Informons maintenant Apache qu’il y a deux nouveaux sites à desservir. Nous allons copier deux fois le fichier d’hôte virtuel par défaut, 000-default.conf, puis modifier ces nouveaux fichiers pour les adapter a notre convenance.

Création du fichier VirtualHost du site 1

6.1. Création du fichier VirtualHost du site 1

Utilisons nano pour voir ce que contient de fichier « site1.conf » :

sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/site1.conf

Pour plus de clarté, nous allons supprimer les commentaires et voici ce que l’on devrait retourner avec nano :

<VirtualHost *:80>
    ServerAdmin admin@webodesign.com
    ServerName site1.webodesign.net
    ServerAlias www.site1.net
    DocumentRoot /var/www/projets/01-test-vhost/site1/public_html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
  • 80 : Cet hôte virtuel écoutera sur le port 80. Vous pouvez modifier le numéro de port via le fichier ports.conf.
  • ServerAdmin : Il s’agit de l’adresse e-mail à laquelle Apache enverra des messages à l’administrateur en cas d’erreur dans le système. Peut être omis.
  • ServerName : le nom du serveur, évidemment, doit coïncider avec le nom de domaine.
  • ServerAlias : autre nom pour le même serveur que ci-dessus. Vous pouvez avoir autant de d’alias que vous le souhaitez.
  • DocumentRoot : pointe vers l’adresse absolue du site sur le disque.
  • ErrorLog : adresse du journal des erreurs.
  • CustomLog : journal des erreurs d’Apache pour la consignation des accès à l’application
Création du fichier VirtualHost du site 2

6.2. Création du fichier VirtualHost du site 2

sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/site2.conf
sudo nano /etc/apache2/sites-available/site2.conf
<VirtualHost *:80>
    ServerAdmin admin@webodesign.com
    ServerName site2.webodesign.net
    ServerAlias www.site2.net
    DocumentRoot /var/www/projets/01-test-vhost/site2/public_html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Activation des nouveaux fichiers d’hôte virtuel

7. Activation des nouveaux fichiers d’hôte virtuel

La commande a2ensite créera des liens symboliques à partir du répertoire activé vers les sites disponibles, de sorte qu’Apache commencera à servir les hôtes virtuels. Les commandes sont les suivantes :

sudo a2ensite site1.conf
sudo a2ensite site2.conf

Si vous souhaitez désactiver le site par défaut, la commande est la suivante :

sudo a2dissite 000-default.conf

Vous pouvez le laisser tel quel dans le cas où quelqu’un entre l’adresse IP directement dans le navigateur – alors l’index par défaut, index.html sera activé et le visiteur verra ce que vous avez décidé de coder.

Une fois que vous avez utilisé les commandes a2ensite et a2dissite, vous pouvez voir quelque chose comme ceci dans la fenêtre du terminal :

robert@vmi8:/var/www/projets$ sudo a2dissite 000-default.conf
Site 000-default disabled.
To activate the new configuration, you need to run:
systemctl reload apache2
robert@vmi8:/var/www/projets$ sudo a2ensite site1.conf
Enabling site site1.
To activate the new configuration, you need to run:
systemctl reload apache2
robert@vmi8:/var/www/projets$ sudo a2ensite site2.conf
Enabling site site2.
To activate the new configuration, you need to run:
systemctl reload apache2
robert@vmi8:/var/www/projets$ sudo systemctl reload apache2
# ou
robert@vmi8:/var/www/projets$ sudo service apache2 reload

Test de la configuration pour une écoute sur le port 80

8. Test de la configuration pour une écoute sur le port 80

Sécurisation des domaines avec les certificats Let’s Encrypt TLS

9. Sécurisation des domaines avec les certificats Let’s Encrypt TLS

Nous allons utiliser des certificats gratuits pour transformer notre trafic HTTP en trafic HTTPS, ce qui rendra la connexion au site sécurisée.

Certbot pour Debian provient du repo Backports, alors nous créons une liste de sources pour notre cas :

sudo nano /etc/apt/sources.list.d/apache.list

et entrez la ligne suivante dans ce fichier :

deb http://deb.debian.org/debian stretch-backports main

Sauvegarde le fichier avec les combinaisons de touches [Ctrl+o], Retour, [Ctrl+x].

sudo apt update

et installez les backports :

sudo apt-get install certbot python-certbot-apache -t stretch-backports

Enfin, exécutez Certbot :

sudo certbot --apache

Il sera demandé une adresse e-mail en cas d’urgence, puis deux autres questions facultatives auxquelles on peut répondre et ensuite la question la plus importante – pour quels noms souhaite t’on activer HTTPS ?

J’ai choisi 4 et 5 car ce sont les seuls domaines et sous-domaines réels pour lesquels j’ai configuré DNS :

Voici le déroulé du paramétrage.

robert@vmi8:/etc/apache2/sites-available$ sudo certbot --apache
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator apache, Installer apache

Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: site1.webodesign.net
2: www.site1.webodesign.net
3: site2.webodesign.net
4: www.site2.webodesign.net
5: www.webodesign.net
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel): 1
Requesting a certificate for site1.webodesign.net
Performing the following challenges:
http-01 challenge for site1.webodesign.net
Waiting for verification...
Cleaning up challenges
Created an SSL vhost at /etc/apache2/sites-available/site1-le-ssl.conf
Deploying Certificate to VirtualHost /etc/apache2/sites-available/site1-le-ssl.conf
Enabling available site: /etc/apache2/sites-available/site1-le-ssl.conf
Redirecting vhost in /etc/apache2/sites-enabled/site1.conf to ssl vhost in /etc/apache2/sites-available/site1-le-ssl.conf

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://site1.webodesign.net
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/site1.webodesign.net/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/site1.webodesign.net/privkey.pem
   Your certificate will expire on 2023-04-01. To obtain a new or
   tweaked version of this certificate in the future, simply run
   certbot again with the "certonly" option. To non-interactively
   renew *all* of your certificates, run "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

On redémarre Apache

sudo service apache2 restart

Voici le résultat :