HTTP: Un serveur: Apache
Les documentations du serveur HTTP Apache
version 1.3b3 sont disponibles en
ligne à l'ESSI.
Vous allez installer un serveur sur votre machine, qui va tourner sur
le port 8080, le port 80 (et tou les ports de nº inférieurs
à 1024) n'étant accessibles qu'aux process tournant sous
l'user ID root.
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 :
mkdir $HOME/distrib_apache
cd distrib_apache
cp /u/I3S/buffa/www/internet98/apache/apache_1.3b3.tar.gz .
gunzip -c apache_1.3b3.tar.gz | tar xovf -
Débrouillez vous maintenant pour compiler le programme (commencez
par lire le fichier README). Vous n'avez normalement pas à
changer les fichiers de configuration, mais vous pouvez y jeter un oeil
quand même.
Notes importantes pour la suite :
-
ATTENTION : il ne faut pas que les sources de votre serveur,
c'est-à-dire la distribution que vous venez de détarer et
de compiler se trouve au même endroit que le serveur lui-même,
avec ses pages html, etc...
-
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
-
Pour lancer votre serveur, lancer la commande
httpd -d my_dir &
-
Pour relire les fichiers de configuration sans relancer le serveur, faire
:
xargs kill -HUP < logs/httpd.pid
Regardez la commande restart_apache dans l'exemple d'install, repertoire bin.
Pour vraiment tuer le serveur :
xargs kill -TERM < logs/httpd.pid
Voir commande stop.
Toutes les réponses aux questions suivantes se trouvent dans la
documentation du serveur, cherchez bien.
Configuration du serveur
Rappel : les fichiers de configuration se trouvent dans la distrib dans
le repertoire 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.
Votre nouvel employeur vous a demandé d'installer un serveur
qui vérifie les spécifications suivantes :
-
La base de toute l'arborescence des documents doit être my_dir/Docs/.
Une requête sur votre serveur, sans preciser 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 my_dir/logs/
et my_dir/conf.
-
Les accès seront dans logs/acces.log, les erreurs
dans logs/erreur.log, les clients utilisés dans
logs/client.log.
Le sous-directory my_dir/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,
soit mettre ces autorisations entre <DIRECTORY>...</DIRECTORY> dans
le fichier access.conf
-
Le sous-directory my_dir/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.
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 my_dir/images/
devront être accessibles par http://votre-machine.essi.fr:8080/images/.
-
Les fichiers présents dans le sous-directory my_dir/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 my_dir/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).
-
Les fichiers dans my_dir/Docs/as-is/ sont destinés
à être envoyés tels que, sans que le serveur ne rajoute
d'entête. Quelles sont les utilisations possibles de tels fichiers
? Pour les hackers.
-
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.
-
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
!
-
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...
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.