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 :
- La première ligne est composée d'une commande HTTP (GET,POST, ...), d'une
URL qui identie la ressource demandée puis de la version du protocole HTTP utilisée,
- Les lignes suivantes constituent l'en-tête de la requête HTTP,
- La fin de l'entête est signalée par une ligne vide,
- Les lignes suivantes constituent le contenu de la requête qui bien souvent est vide
(sauf dans le cas d'une requête POST par exemple).
- 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.
- Récupérer la page d'accueil de www.arda
- Essayer de récupérer le document à l'url
http://www.arda/toto.html
. Quel est le code de retour ?
- Essayer de récupérer le document à l'url
http://www.arda/tata.html
. Quel est le code de retour ?
- 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)
- Reprendre les questions précédentes en utilisant un navigateur.
- 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 :
-
Créez dans le /tmp de la machine locale, un répertoire
destiné à la compilation d'Apache. Par exemple
mkdir /tmp/distrib_apache
-
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
-
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 (sur votre compte !) un répertoire
$HOME/installation_apache
mkdir $HOME/installation_apache
-
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.
-
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 :
-
Allez dans $HOME/installation_apache/bin et lancez le serveur
avec la commande
apachectl start
Notes importantes pour la suite
-
"Dans la vraie vie", le repertoire d'installation (binaires et libriaires) seraient /usr ou /usr/local,
et le repertoire de configuration /etc. Evidemment, il faut avoir les droits d'écriture dans ces repertoires, que
vous n'avez pas sur les machines de l'iut.
-
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.
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 :
-
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 ?
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.
-
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.
Un exemple de fichier .htaccess
order deny,allow
deny from all
allow from 193.48.172.2
-
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
AuthType Basic
AuthName "mot de passe"
AuthUserFile /chemin/vers/password.file
AuthGroupFile /chemin/vers/group.file
Require Group admins
<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/iut-fbleau/*
devront être redirigées vers les pages correspondantes à
l'iut (http://www.arda/*).
-
Les images présentes dans le directory $HOME/installation_apache/images/
devront être accessibles par http://votre-machine/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/~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@iut-fbleau.fr
-
Une requête non autorisée (403) doit être redirigée
sur la page de garde de l'iut (http://www.arda/).
-
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
- Connectez-vous sur le serveur apache par le biais de la commande telnet sur le port 80.
telnet localhost 80
- Arrêtez la connexion
- Modifiez la directive Timeout en la diminuant, recommencez après avoir relancé le
serveur.
- 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/
- Augmentez les valeurs des directives :
StartServers, MinSpareServers et MaxSpareServers
et refaites le test.
- 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).
-
Le premier permet au travers de requêtes passées à
l'URL
http://<host>/server-info
de lister tous les modules installés
et leur configuration actuelle.
-
Le second permet au travers de requêtes du type
http://<host>/server-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
(mod_speling) qui corrige automatiquement les fautes de frappes dans les
noms d'URLs, etc...
retour à la page d'accueil
retour au sommet