HTTP: Un serveur: Apache (miroir français ici)

Ici la FAQ officielle.

Les documentations du serveur HTTP Apache version 1.3.9sont 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 :

  1. Créez dans le /tmp de la machine locale, un répertoire où ira s'installer la distribution d'Apache : par exemple

  2. mkdir /tmp/distrib_apache
  3. Copier la distribution source d'apache avec les binaires précompilés pour Solaris (le fichier apache_1.3.9-sun4u-sun-solaris2.270.tar.gz) dans ce directory. Désarchivez-le : tar xvfz apache_1.3.9-sun4u-sun-solaris2.270.tar.gz. Ceci doit créer un répertoire apache_1.3.9
  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.
  5. Sans changer de répertoire, créez un répertoire $HOME/installation_apache
  6. Générez les makefiles : tapez la commande "./configure --prefix=$HOME/installation_apache --enable-module=most --enable-module=so --enable-shared=max". La commande --prefix permet d'indiquer le répertoire d'installation. Le reste indique que l'on souhaite utiliser autant de modules dynamiques que possible.
  7. Tapez "make" puis "make install" pour compiler et recopier les fichiers compilés dans le répertoire d'installation ($HOME/installation_apache)
  8. Allez dans $HOME/installation_apache/bin et lancez le serveur avec la commande apachectl start
Notes importantes pour la suite :

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 :

  1. Le serveur devra tourner sur le port 8080. Pensez à le lancer SUR VOTRE MACHINE LOCALE !
  2. 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.
  3. Les logs et les fichiers de configuration doivent être dans $HOME/installation_apache/logs/ et $HOME/installation_apache/conf.
  4. 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.
  5. 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. Solution recommandée : avec le fichier .htaccess.conf. regardez l'exemple cii-dessous et également la doc de la commande 'allow'.
  6. 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 !
  7. Exemple de fichier .htaccess :

  8.  

     
     
     
     
     

    Remarque : il est possible de cumuler les authorisations en mettant des allow par exemple dans d'autres lignes au sein du <limit> ... </limit>
     

    AuthUserFile /u/I3S/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 $HOME/installation_apache/images/ devront être accessibles par http://votre-machine.essi.fr:8080/images/.
  4. Les fichiers présents dans le sous-directory $HOME/installation_apache/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 (403) doit être redirigée sur la page de garde de l'essi (http://www.essi.fr/).
  8. Les scripts CGI seront dans $HOME/installation_apache/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.

  10. Vous pourrez les tester en recopiant dans cotre dir cgi-bin par exemple le script man-cgi installé sur le serveur de l'essi. Vous le trouverez sur /www/Internet/cgi-bin/man-cgi
  11. Est il ici possible de lire le source d'un script cgi-bin ? Qu'en pensez vous ? (Pirates ou hackers furieux).
  12. 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 ? Allez voir la doc du module mod_asis
  13. 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 ?

  14.  
  15. Installation de handlers d'administration

  16.  

     
     
     
     
     

    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 (mod_speling) qui corrige automatiquement les fautes de frappes dans les noms d'URLs, etc...

  18.  
  19. Serveurs virtuels :

  20.  

     
     
     

    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.
     

  21. Les fichiers de logs du serveur "normal" seront dans $HOME/installation_apache/logs, ceux du deuxième dans$HOME/installation_apache/logs1.
  22. 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.
  23. Vous simulerez un vieux navigateur en faisant un telnet sur le port 80.

  24.  
  25. Analyse des logs de votre serveur.  Je vous  propose trois 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. Idem pour HTTP-Analyse, il s'agit d'un produit commercial qui n'est pas en Open Source.
     

    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.

Si vous avez terminé avant l'heure dites-le à l'enseignant de TP, il vous donnera un petit travail à faire, par exemple installer le module pour le langage PHP sur votre serveur.