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 :

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 :

  1. 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.
  2. Les logs et les fichiers de configuration doivent être dans my_dir/logs/ et my_dir/conf.
  3. Les accès seront dans logs/acces.log, les erreurs dans logs/erreur.log, les clients utilisés dans logs/client.log.

  4. 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
  5. 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.
  6. Exemple de fichier .htaccess :

    AuthUserFile /home/buffa/passwd.buffa
    AuthName admin
    AuthType basic
    <limit GET POST>
    require valid-user
    </limit>

  1. L'administrateur du serveur devra être vous-même, joignable à une adresse e-mail valide.
  2. 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/*).
  3. Les images présentes dans le directory my_dir/images/ devront être accessibles par http://votre-machine.essi.fr:8080/images/.
  4. Les fichiers présents dans le sous-directory my_dir/images devront avoir le type image/gif par défaut.
  5. Les utilisateurs auront leur espace utilisateur accessible par http://votre-machine.essi.fr/~login/, qui devra correspondre au directory Unix ~login/www/.
  6. 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
  7. Une requête non autorisée doit être redirigée sur la page de garde de l'essi (http://www.essi.fr/).
  8. Les scripts CGI seront dans my_dir/Docs/misc/cgi-bin et accessibles de manière indifférenciée par
  9. 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

  10. Est il ici possible de lire le source d'un script cgi-bin ? Qu'en pensez vous ? (Pirates ou hackers furieux).
  11. 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.
  12. Serveurs virtuels
  13. 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.
     

  14. Analyse des logs de votre serveur.  Je vous  propose deux outils parmi la ribambelle d'outils existants, publics ou commerciaux.

  15.  

    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 !

  16. 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). 

  17. 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.