Iut de Sénart Fontainebleau

Programmation web licence professionnelle bdise

L'objectif de cette partie est l'étude sommaire du protocole http dont voici, en rappel du cours, une description.

Le format d'une requête HTTP est le suivant :

  1. A l'aide de telnet, vérifiez la présence d'un serveur http sur www.arda avec la commande HEAD

    La commande telnet permet d'ouvrir une connection tcp/ip sur le port 80 avec un serveur web :

    telnet www.arda 80
    

    Lorsque la connexion est établie, vous pouvez saisir vous-même la requête http à envoyer au serveur, qui vous répondra.

  2. Récupérer la page d'accueil de www.arda
  3. Essayer de récupérer le document à l'url http://www.arda/toto.html. Quel est le code de retour ?
  4. Essayer de récupérer le document à l'url http://www.arda/tata.html. Quel est le code de retour ?
  5. En utilisant toujours le programme telnet, essaye de récupérer l'url www.arda/tp/index.html. Que se passe-t-il ?

    Ce repertoire est protégé par un login et mot de passe : toto et toto. il faut le transmettre dans l'entête de la requête, via l'entête Authorization. Pour la méthode Basic, le login et mot de passe sont fournis en encodant en base 64 la chaîne "login:mdp". (utiliser le programme openssl pour encoder)

    Authorization: Basic encodage_base_64(login:mdp)
  6. Reprendre les questions précédentes en utilisant un navigateur.
  7. A la racine de www.arda, se trouve un script traite.php qui peut récupérer en GET la variable testget ou en POST testpost. Essayer les deux méthodes, toujours avec telnet.(pour passer en POST la variable testpost, utiliser le bon Content-Type: application/x-www-form-urlencoded) et la taille du corps de la requête avec Content-Length.

Les documentations du serveur HTTP Apache sont disponibles ici. Durant ce TP (2 séances), vous allez installer un serveur sur votre machine, qui tournera sur le port 8080. Important, le tp utilise la branche 2.2 et non 2.4 qui diffère un peu.

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. 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 destiné à la compilation d'Apache. Par exemple

    mkdir /tmp/distrib_apache
    

  2. Copier la distribution source d'apache (le fichier httpd-2.2.25.tar.gz) dans ce directory. Désarchivez-le :

    cp http-2.2.25.tar.gz /tmp/distrib_apache
    cd /tmp/distrib_apache
    tar -xvzf  httpd-2.2.25.tar.gz
    Ceci doit créer un répertoire http-2.2.25
  3. 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.
  4. Sans changer de répertoire, créez (sur votre compte !) un répertoire $HOME/installation_apache
    mkdir $HOME/installation_apache
  5. Générez les makefiles : tapez la commande
    ./configure --prefix=$HOME/installation_apache  --enable-modules=all -enable-ssl

    L'option --prefix permet d'indiquer le répertoire d'installation. Le reste indique que l'on souhaite utiliser autant de modules que possible.
  6. Tapez make puis make install pour compiler et installer les fichiers compilés dans le repertoire d'installation ($HOME/installation_apache). Si tout s'est bien passé, vous avez l'arborescence suivante :
  7. Allez dans $HOME/installation_apache/bin et lancez le serveur avec la commande
    apachectl start

Notes importantes pour la suite

Configuration et lancement du 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

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.
    • Accédez par http à la racine de votre serveur (http://localhost:8080/). Qu'affiche le log de votre serveur ? quel est le code de retour http ?
    • Où se trouve dans le système de fichier le repertoire correspondant ? Quel est le fichier correspondant à l'affichage sur le navigateur ? modifiez ce fichier et recommencez.
    • Que représente favicon.ico ? ajoutez une image à votre racine portant ce nom et testez.
    • Accédez par http à une url qui n'existe pas. Qu'affiche le log de votre serveur ? quel est le code de retour http ?
  2. La racine de votre serveur a été initialisée dans httpd.conf avec le repertoire $HOME/installation_apache/htdocs/ (vous pouvez le modifier !!!). Une requête sur votre serveur, sans préciser le nom d'un document, vous renvoie le document par défaut index.html situé dans ce repertoire.
  3. Le sous-directory $HOME/installation_apache/htdocs/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 httpd.conf. Testez avec la machine du voisin.
  4. Un exemple de fichier .htaccess
    1. order deny,allow
    2. deny from all
    3. allow from 193.48.172.2
  5. Le sous-directory $HOME/installation_apache/htdocs/private/me/ ne pourra être accédé que par vous (avec mot de passe, donc "authentification", voir AuthUserFile).

    Pour créer un fichier d'utilisateurs avec leur mot de passe, vous devez utilisez la commande htpasswd qui se trouve dans le repertoire bin de l'installation. Pour le créer avec un utilisateur,

    htpasswd -c passwordfile username
    

    La commande vous demandera alors le mot de passe correspondant à l'utilisateur.

    Un exemple de fichier .htaccess
    1. AuthType Basic
    2. AuthName "mot de passe"
    3. AuthUserFile /chemin/vers/password.file
    4. AuthGroupFile /chemin/vers/group.file
    5. Require Group admins
    6. <Limit GET POST>
    7. require valid-user
    8. </Limit>
  6. L'administrateur du serveur devra être vous-même, joignable à une adresse e-mail valide.
  7. Les requêtes pour les url http://votre-machine/iut-fbleau/* devront être redirigées vers les pages correspondantes à l'iut (http://www.arda/*).
  8. Les images présentes dans le directory $HOME/installation_apache/images/ devront être accessibles par http://votre-machine/images/.
  9. Les fichiers présents dans le sous-directory $HOME/installation_apache/images devront avoir le type image/gif par défaut.
  10. Les utilisateurs auront leur espace utilisateur accessible par http://votre-machine/~login/, qui devra correspondre au directory Unix ~login/www/.
  11. 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@iut-fbleau.fr
  12. Une requête non autorisée (403) doit être redirigée sur la page de garde de l'iut (http://www.arda/).
  13. Les scripts CGI seront dans $HOME/installation_apache/htdocs/misc/cgi-bin et accessibles de manière indifférenciée par : http://votre-machine/cgi-bin/nom-du-script ou http://votre-machine/htbin/nom-du-script.

Gestion des connexions

  1. Connectez-vous sur le serveur apache par le biais de la commande telnet sur le port 80.
    telnet localhost 80
    

  2. Arrêtez la connexion
  3. Modifiez la directive Timeout en la diminuant, recommencez après avoir relancé le serveur.
  4. Utilisez l'outil ab pour envoyer 10000 connexions (avec 100 connexions simultanées) sur la page racine de votre serveur.

    ab -n 10000 -c 100 http ://nom-machine/
    

  5. Augmentez les valeurs des directives : StartServers, MinSpareServers et MaxSpareServers et refaites le test.
  6. rajoutez l'option -k qui active les connexions HTTP/1.1 persistentes et refaites le test.

Apache en mode sécurisé

Création d'un certificat SSL pour Apache : (ajustez les repertoires)

openssl req -new -x509 -nodes -keyout www.key -out www.crt

Pensez à configuer, dans le sous-repertoire extra du repertoire conf, le fichier httpd-ssl.conf et à l'inclure depuis httpd.conf. Tester. Apache fournit des modules d'administration assez intéressants : le Handler Info (module info_module) et le Handler Status (status_module). 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...

retour à la page d'accueil

retour au sommet