Table des matières

1. Objectifs

Ce TP va nous permettre d’approfondir la compréhension du rôle d’un serveur web ainsi que de sa configuration.  Il se basera sur Apache, mais les concepts généraux sont transposables à d’autres serveurs Web. 

L’accent sera mis sur la démarche analytique : compréhension de la configuration, validation et débugging.  

A la fin de ce TP, vous devrez : 

  • Comprendre comment sont organisés les éléments de configuration Apache
  • Pouvoir modifier le comportement du serveur Apache  sur base des fichiers de configuration
  • Etre capable de valider un changement de configuration du serveur web par une procédure adéquate
  • Pouvoir identifier les erreurs de configuration en utilisant les outils de troubleshooting adéquat, et les corriger.

2. Configuration minimaliste pour Apache

Lors du TP précédent, vous avez déjà pu vous rendre compte qu’Apache propose une organisation structurée et hiérarchique de sa configuration.  Bien que ce soit une manière très propre de travailler, la grande quantité d’informations présente, répartie dans plusieurs fichiers, peut rendre la découverte du logiciel un peu complexe

Nous vous proposons donc dans un premier temps de travailler sur base d’une configuration minimaliste pour comprendre les directives principales.

2.1. Vérification de l’intégrité de votre labo

Nous avons constaté que, dans certaines situations, le laboratoire GNS3 supprimait de manière impromptue certains répertoires, ce qui empêche Apache de fonctionner correctement.  Pour éviter ce cas de figure, voici la procédure qu’il vous faudra appliquer. Elle est également disponible sur Moodle.

Avant de commencer un exercice, vérifiez sur la machine web si les répertoires ci-dessous existent :

  • /etc/apache2/mods-enabled
  • /etc/apache2/sites-enabled

Si ce n’est pas le cas, créez-le et activez les modules qui auraient du l’être au démarrage, en effectuant les commandes suivantes :

  • mkdir /etc/apache2/mods-enabled
  • mkdir /etc/apache2/sites-enabled
  • a2enmod mpm_prefork
  • a2enmod authz_core
  • a2enmod dir
  • a2enmod mime

2.2. Mise en place de la config Apache minimaliste

La configuration par défaut d’Apache est un peu verbeuse. Nous allons donc commencer par travailler sur une configuration simplifiée afin de vous permettre de prendre vos marques.  

Pour cela, effectuez une copie du fichier de configuration principal apache2.conf dans un fichier de backup appelé apache2.conf_bck

Effacez le contenu du apache2.conf original, et insérez à la place les lignes suivantes : 

Listen 80
ServerName www.woodytoys.lab

IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf

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

ErrorLog /var/log/apache2/error.log
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
CustomLog /var/log/apache2/access.log combined
LogLevel debug

2.3. Répertoires Apache

Plusieurs répertoires sont impliqués dans le fonctionnement d’Apache. Examinez-les soigneusement. Il s’agit :

  • du répertoire /etc/apache2/, qui contient les fichiers de configuration.  Nous commencerons ici par nous concentrer sur le fichier apache2.conf
  • du répertoire contenant par défaut les fichiers que le serveur web met à disposition des clients (pages statiques html et scripts cgi) : /var/www
  • /var/www/html/ : contient les pages du site par défaut
  • /var/www/cgi-bin/ : contient les scripts cgi
  • /var/www/error/ : contient les pages affichées en cas d’erreur — et d’autres répertoires à découvrir par vous-même.

2.4. Syntaxe des fichiers de configuration

Les fichiers de configuration d’Apache contiennent des directives, à raison de une par ligne. Il est possible de limiter la portée de ces directives en les limitant à des sections, qui sont délimitées par des tags ouvrant et fermant (ex : <Directory>...</Directory>, <VirtualHost>...</VirtualHost>, …).

Les commentaires commencent par un dièse #.

Vous pouvez utiliser la commande apache2ctl pour vérifier la syntaxe de votre fichier de configuration.  Avec l’option -S, cette même commande vous produira un résumé de votre configuration. 

2.5. Découverte des directives principales et test de la configuration

Parcourez le fichier /etc/apache2/apache2.conf, et consultez la documentation officielle d’Apache pour expliquer ce que fait chaque directive.  Vous pouvez soit lire la documentation générale, ou bien aller directement à la documentation des directives.  

Consultez également le fichier /etc/apache2/envvars : que contient-il?  En quoi est-il important pour le fichier /etc/apache2/apache2.conf

Ensuite, démarrez le serveur en utilisant la commande apache2ctl start.  Lancez une capture Wireshark sur le lien menant au serveur.  

Vérifiez que le processus s’est lancé correctement et est à l’écoute sur les bons ports avec les outils habituels : ps -A et netstat -nltpu.

Depuis le client, vérifiez que vous obtenez bien une page HTML en utilisant le navigateur links : 

links http://www.woodytoys.lab/index.html

Observez le trafic HTTP échangé.  Regardez également dans les logs (/var/log/apache2) pour voir si les requêtes effectuées ont bien été enregistrées

3. Exercice de configuration

Modifiez le fichier apache2.conf pour introduire les modifications ci-dessous à la configuration de votre serveur.  Vous trouverez les directives à utiliser dans la documentation Apache. 

Faites en sorte que votre fichier de configuration soit clair, ne contienne que les lignes nécessaires ainsi que les commentaires adéquats.  Testez et validez chaque fonctionnalité après l’avoir implémentée, en réfléchissant à une procédure de validation adéquate. 

  1. Faire en sorte que si aucun fichier n’est spécifié dans l’URL, le serveur renvoie le fichier index.html par défaut.  Cela permettra au client d’obtenir une page web lorsqu’il navigue directement sur http://www.woodytoys.lab.   (Astuce : Si la directive est refusée, vous devrez problement charger le module dir : a2enmod dir).  
  2. Modifier le répertoire de stockage des documents web (DocumentRoot) pour que le nouveau répertoire soit /home/user/html.  Pour tester : N’oubliez pas de créer le répertoire en question et d’y ajouter un fichier html! 
  3. Spécifiez une adresse email pour l’administrateur (par ex. la vôtre)
  4. Indiquer que les fichiers envoyés par défaut pour chaque répertoire sont les fichiers test.html au lieu de index.html
  5. Le serveur ne doit accepter de requêtes que de la part du directeur
  6. Le serveur écoute sur les ports 80 et 8080

4. Configuration Apache hiérarchique

A présent que vous avez pu manipuler les bases des directives Apache, nous allons revenir à la version “hiérarchique” des configurations.  

Dans le répertoire /etc/apache2, rétablissez en tant que fichier de config principal le fichier apache2.conf_bck, qui contient la configuration habituellement fournie lors de l’installation du logiciel serveur.  Pour cela, copiez-le dans le fichier apache2.conf

cp apache2.conf_bck apache2.conf

Regardez le résultat de la configuration via la commande suivante : 

apache2ctl -S

Enfin, prenez le temps de lire les commentaires du fichier de configuration principal : il explique comment les configurations sont structurées.  Explorez également les autres fichiers disponibles, et répondez aux questions ci-dessous : 

  • Dans quel fichier est défini le port sur lequel Apache doit écouter? 
  • Comment savoir quels modules sont activés?  
  • Qui est l’utilisateur unix utilisé par Apache, et à quel endroit est-il configuré? 
  • A quel endroit spécifie-t’on le port à utiliser en cas d’activation de SSL?

5. Virtual Hosts

Apache permet à un serveur de gérer plusieurs sites, appelés virtual hosts.  Pour pouvoir lier une requête au site correspondant, il peut se baser sur trois éléments : 

  • L’hôte utilisé (nom DNS renseigné dans le champ Host du header HTTP)
  • Le port utilisé (ex : un site sur le port 80, un autre sur le port 81)
  • L’adresse IP utilisée, si la machine en possède plusieurs.  

Pour pouvoir gérer cela, Apache propose de séparer la configuration de chaque site dans un fichier dédié.  Vous trouverez une config de site par défaut (000-default.conf) dans le répertoire sites-available.  Prenez-en connaissance. 

Nous allons nous baser sur cet exemple pour configurer deux virtual hosts : Un sur www.woodytoys.lab, et un autre sur blog.woodytoys.lab.  

Pour cela, effectuez les étapes suivantes : 

  1. Allez modifier le fichier de zone dans le SOA pour ajouter un RR CNAME permettant de faire pointer le nom blog.woodytoys.lab vers www.woodytoys.lab.  Cela permettra au client de trouver l’adresse IP du site blog.woodytoys.lab
  2. Créez un répertoire pour chaque site (www et blog) : 
    • Dans le répertoire des logs (/var/log/apache2/www et /var/log/apache2/blog)
    • Dans le répertoire contenant les fichiers HTML (/var/www/html/www et /var/www/html/blog).  Créez un fichier index.html dans chacun de ces répertoires, avec un contenu différent (ex : Bienvenue sur www et Bienvenue sur le blog)
  3. Créez deux copies du fichier 000-default.conf, appelées www-woodytoys-lab.conf et blog-woodytoys-lab.conf.  Adaptez ces deux fichiers : 
    • Au niveau de la directive ServerName, qui servira à Apache pour associer chaque requête au virtual host correspondant
    • Au niveau du répertoire contenant les documents HTML du site
    • Au niveau du répertoire de log.  
  4. Activez les deux virtual host avec la commande a2ensite
    • a2ensite www-woodytoys-lab
    • a2ensite blog-woodytoys-lab
  5. Vérifiez la configuration avec apache2ctl -S
  6. Redémarrez le serveur Apache, et testez les deux sites depuis le client.