HTTP: Un serveur: Apache
Les documentations du serveur HTTP Apache
version 1.3.4 sont disponibles en
ligne à l'ESSI.
Dans ce TP (2 séances), vous allez installer un serveur sur votre
machine, qui va tourner sur le port 8080, le port 80 n'étant accessible
qu'aux process tournant sous l'user ID root (de même que
tous les ports de nº inférieurs à 1024) .
Compilation et installation
La première chose à faire est de récupérer
le programme et de mettre un bookmark sur les
documentations du serveur. Il s'agit de copies locales pour éviter
le délai dû à la lenteur du réseau mais le format
est identique à ce que vous auriez trouvé sur le site
officiel. Vous êtes donc dans les conditions réelles d'utilisation.
Voici le mode opératoire pour désarchiver et compiler
le programme :
-
Créez quelque part chez vous, un répertoire où ira
s'installer la distribution source d'Apache
: par exemple
mkdir $HOME/internet/tp2/distrib_apache
-
Copier la distribution source d'apache (le fichier apache_1.3.4.tar.Z)
dans ce répertoire.
-
Désarchivez-le : tar xvfz apache_1.3.4.tar.Z.
Ceci doit créer un répertoire apache_1.3.4
-
Parcourez le fichier INSTALL
(more INSTALL) qui contient toutes les indications pour compiler et installer
apache. Ne faites rien pour le moment, pour éviter toute bêtises,
nous vous avons écrit les commandes qu'il faut lancer dans les points
suivants.
-
Sans changer de répertoire, créez un répertoire $HOME/installation_apache
-
Générez les makefiles : tapez la commande "./configure
--prefix $HOME/installation_apache". La commande --prefix
permet d'indiquer le répertoire d'installation.
-
Tapez "make" puis "make
install" pour compiler et recopier les fichiers compilés
dans le répertoire d'installation ($HOME/installation_apache)
Notes importantes pour la suite :
-
ATTENTION : cette procédure est très classique.
En effet, il ne faut pas que les sources de votre serveur, c'est-à-dire
la distribution que vous venez de détarer et de compiler (le fichier
apache_1.3.4.tar.Z décompressé) se trouve au même endroit
que les binaires du serveur, ses fichiers de configuration, etc... (le
répertoire $HOME/installation_apache). Le répertoire d'installation
classique pour Apache est /usr/local/apache, mais pour pouvoir écrire
dans ce répertoire il faudrait être root sur la machine (ce
que sont en général les webmasters).
-
Dans la suite du TP, vous travaillerez principalement sur les fichiers
de configuration se trouvant dans l'installation du serveur. Avant de poursuivre
ce TP, vérifiez bien le contenu du répertoire $HOME/installation_apache.
Il doit ressembler à cet exemple
d'organisation d'un serveur installé.
-
Les fichiers d'erreur et de logs du serveur vous seront précieux
pour débugger. La commande tail -f nom_de_fichier
permet de lire un fichier en continu . Utilisez-la sur le fichier error_log.
Je vous conseille d'avoir en permanence un xterm exécutant
la commande tail -f $HOME/installation_apache/logs/error_log
Pour le moment, vous n'avez pas de fichier de log, ils apparaitront
lorsque vous lancerez le serveur pour la première fois.
-
Pour lancer, stopper, faire relire les fichiers de configuration à
votre serveur, tester la configuration, etc... la commande $HOME/installation_apache/bin/apachectl
est
là pour vous aider ! Elle accepte comme arguments start,
stop, restart, configtest, etc...
Travail à effectuer : lancer et configurer le serveur
Rappel : les fichiers de configuration se trouvent dans
le
repertoire conf de l'installation ($HOME/installation_apache/conf).
Ce sont ces fichiers que vous aurez à modifier. Avant de les modifier,
recopiez-les
sous les noms suivants : access.conf, httpd.conf, srm.conf,
n'écrasez pas les originaux de la distribution !!!
Au travail : votre nouvel employeur vous a demandé d'installer
un serveur qui vérifie les spécifications suivantes :
-
Le serveur devra tourner sur le port 8080. Pensez à le lancer SUR
VOTRE MACHINE LOCALE !
-
La base de toute l'arborescence des documents doit être $HOME/installation_apache/Docs/.
Une requête sur votre serveur, sans préciser le nom d'un document
doit renvoyer la home page de votre serveur située dans ce dir.
La Home Page s'appelle par défaut index.html.
-
Les logs et les fichiers de configuration doivent être dans $HOME/installation_apache/logs/
et $HOME/installation_apache/conf.
-
Les accès seront dans $HOME/installation_apache/logs/acces.log,
les erreurs dans $HOME/installation_apache/logs/erreur.log,
les clients utilisés dans $HOME/installation_apache/logs/client.log.
-
Le sous-directory $HOME/installation_apache/Docs/private/my-machine/
ne pourra être accédé que par votre propre machine
et aucune autre (voir "authentification", allow, deny, order, dans la doc)
. Vous pourrez soit créer un fichier .htaccess contenant les autorisations
(recommandé), soit mettre ces autorisations entre <DIRECTORY>...</DIRECTORY>
dans le fichier access.conf
-
Le sous-directory $HOME/installation_apache/Docs/private/me/
ne pourra être accédé que par vous (avec mot de passe,
donc "authentification", voir AuthUserFile). Vous pourrez utiliser le programme
htpasswd
pour
générer des mots de passe. Le lien précédent
pointe sur le binaire Solaris, mais si vous avez un jour besoin de ce programme
sur un autre OS, vous pouvez aussi récupérer le fichier htpasswd.c,
il se compile très facilement !
-
Exemple de fichier .htaccess :
AuthUserFile /home/buffa/passwd.buffa
AuthName admin
AuthType basic
<limit GET POST>
require valid-user
</limit>
-
L'administrateur du serveur devra être vous-même, joignable
à une adresse e-mail valide.
-
Les requêtes pour les URL http://votre-machine.essi.fr:8080/inria/*
devront être redirigées vers les pages correspondantes à
l'INRIA (http://www.inria.fr/*).
-
Les images présentes dans le directory $HOME/installation_apache/images/
devront être accessibles par http://votre-machine.essi.fr:8080/images/.
-
Les fichiers présents dans le sous-directory $HOME/installation_apache/images
devront avoir le type image/gif par défaut.
-
Les utilisateurs auront leur espace utilisateur accessible par http://votre-machine.essi.fr/~login/,
qui devra correspondre au directory Unix ~login/www/.
-
Une requête erronée (404) doit avoir une réponse en
francais du type Ce fichier n'existe pas. Vous pouvez envoyer un
mail à votre-login@essi.fr
-
Une requête non autorisée doit être redirigée
sur la page de garde de l'essi (http://www.essi.fr/).
-
Les scripts CGI seront dans $HOME/installation_apache/Docs/misc/cgi-bin
et
accessibles de manière indifférenciée par
-
http://votre-machine.essi.fr:8080/cgi-bin/nom-du-script
ou http://votre-machine.essi.fr:8080/htbin/nom-du-script.
Vous pourrez les tester en recopiant par exemple le script man-cgi
installé sur le serveur de l'essi. Vous le trouverez sur /www/Internet/cgi-bin/man-cgi
-
Est il ici possible de lire le source d'un script cgi-bin ? Qu'en pensez
vous ? (Pirates ou hackers furieux).
-
Imaginons que vous déplaciez provisoirement les pages web de votre
serveur sur une autre machine. Ce déplacement est temporaire et
vous n'avez pas envie de modifier votre configuration, ni meme d'arreter
et de relancer le serveur. Faites donc un fichier index.asis ! Les fichiers
.asis sont destinés à être envoyés tels que,
sans que le serveur ne rajoute d'entête. Que mettre dans le fichier
index.asis ?
-
Configurez le serveur pour mettre des fichiers .asis également dans
le répertoire $HOME/installation_apache/Docs/as-is/
. A quoi ce genre de configuration peut-il servir ?
-
Installation de handlers d'administration
Apache fournit des modules d'administration assez intéressants
: le Handler Info (module info_module) et le Handler Status (status_module).
-
Le premier permet au travers de requêtes passées à
l'URL http://<host>/info de lister tous les modules installés
et leur configuration actuelle.
-
Le second permet au travers de requêtes du type http://<host>/status
de
connaître l'état actuel du serveur :
-
heure de démarrage,
-
nombre de requêtes gérées depuis le dernier redémarrage,
-
charge CPU moyenne,
-
nombre de processus actuellement en cours,
-
état actuel des processus...
-
Vous installerez ces modules ainsi que d'autres handlers... Il y a un module
qui corrige automatiquement les fautes de frappes dans les noms d'URLs,
etc...
-
Serveurs virtuels :
Votre machine possède un alias DNS (elle n'a qu'une seule adresse
IP mais la machine est visible sous deux noms différents, en l'occurence
le deuxième nom est le même que le nom "normal de la machine
suivit d'un "1". Par exemple gargamelle1.essi.fr est le deuxième
nom de la machine gargamelle.essi.fr).
Avec les browsers récents, le nom du serveur est passé
en toutes lettres (au lieu de la simple adresse IP, comme c'était
le cas avec les premiers navigateurs) lors de requêtes pour un URL
donné. Apache sait utiliser ce nom pour "simuler" les alias DNS
basés sur des numéros IPs différents.
-
Testez votre serveur avec des requêtes utilisant les deux noms de
la machine sur laquelle il tourne.
-
Maintenant vous allez faire en sorte que les requêtes portant sur
le premier nom servent les pages web situées dans le répertoire
$HOME/installation_apache/Docs,
alors que les requêtes sur le second nom servent les pages situées
dans $HOME/installation_apache/Docs1/ Quels sont les avantages
d'une telle pratique ? Connaissez vous des serveurs "virtuels"
?
-
Les fichiers de logs du serveur "normal" seront dans $HOME/installation_apache/logs,
ceux du deuxième dans$HOME/installation_apache/logs1.
-
Vous configurerez également un "serveur par défaut" affichant
une page d'explications si le navigateur utilisé est trop ancien
pour gérer les "Serveur virtuels". Ainsi, si un utilisateur
utilise un vieux Mosaic, il saura que son navigateur est trop vieux.
-
Vous simulerez un vieux navigateur en faisant un telnet sur le port 80.
-
Analyse des logs de votre serveur. Je vous propose deux
outils parmi la ribambelle d'outils existants, publics ou commerciaux.
Commencez par compiler analog si c'est celui que vous choisissez. Wusage
étant un produit commercial limité à 30 jours, la
distribution n'est pas au format source, directement au format exécutable.
Lisez la doc.
Comme vous n'avez pas un fichier de log consistant, vous pourrez artificiellement
en générer un par exemple en extrayant des logs globaux de
l'essi les lignes concernant vos propres pages.
grep votre_login /www/server/roxen/logs/www.essi.fr/Log pour le
serveur global
grep votre_login /www/server/roxen/logs/www.essi.fr/Log pour le
serveur local
Configurez l'outil choisi. Je vous conseille de TOUT mettre dans des
fichiers de configuration. Ne touchez pas aux fichiers .h d'analog. Vous
ferez des statistiques sur la consultation DES PAGES web, les statistiques
en nombre de requêtes http n'étant pas pertinentes.
Générez le rapport d'analyse sous forme de page HTML
!
Si vous n'êtes pas arrivés au bout, rien de grave. Essayez
quand même d'avoir une bonne idée des possibilités
offertes par un serveur. Si vous avez à lancer un serveur en tant
que root, n'oubliez surtout pas de changer son uid à autre chose
que root (au fait, pourquoi ?).
Nous verrons lors des prochains cours encore bien d'autres possibilités
de configuration.