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 fichierapache2.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.
- 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
). - 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! - Spécifiez une adresse email pour l’administrateur (par ex. la vôtre)
- Indiquer que les fichiers envoyés par défaut pour chaque répertoire sont les fichiers
test.html
au lieu deindex.html
- Le serveur ne doit accepter de requêtes que de la part du directeur
- 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 :
- Allez modifier le fichier de zone dans le SOA pour ajouter un RR CNAME permettant de faire pointer le nom
blog.woodytoys.lab
verswww.woodytoys.lab
. Cela permettra au client de trouver l’adresse IP du siteblog.woodytoys.lab
. - 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 fichierindex.html
dans chacun de ces répertoires, avec un contenu différent (ex : Bienvenue sur www et Bienvenue sur le blog)
- Dans le répertoire des logs (
- Créez deux copies du fichier
000-default.conf
, appeléeswww-woodytoys-lab.conf
etblog-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.
- Au niveau de la directive
- Activez les deux virtual host avec la commande
a2ensite
.a2ensite www-woodytoys-lab
a2ensite blog-woodytoys-lab
- Vérifiez la configuration avec
apache2ctl -S
- Redémarrez le serveur Apache, et testez les deux sites depuis le client.