Apache est un serveur web modulaire. Une des avancées techniques de la version 2 est la possibilité d'ajouter des filtres pour traiter le flux provenant du client, le flux provenant du serveur ou les 2.
On note par ailleurs qu'apache possède 2 modules mod_proxy et mod_cache qui permettent de transformer apache en proxy HTTP.
Un handler est responsable de la génération ou de la récupération des données qu'il envoie au client. Typiquement, il n'y a qu'un handler responsable de la génération des données renvoyées au client.
Par contre, un filtre modifie le contenu de la requète ou de la réponse qu'il renvoie au client. Il peut y avoir plusieurs filtres qui traitent la requète ou la réponse, par contre il n'y a toujours qu'un seul handler qui génère la réponse.
Il y a principalement 3 types de filtres, dans ce document, nous nous interessons aux filtres de type RESOURCE, avec comme exemple un filtre transformant un contenu JPEG en JPEG (réduction d'images).
Télécharger la dernière version stable de apache ici
Sous windows, il suffit ensuite d'ouvrir et de compiler le projet apache.dsw, apres l'avoir éventuellement converti au format utilisé par Visual Studio .Net. On note que le projet compile sans problème avec Visual C ++ 2005 Express Beta 2.
Sous linux, on pourra utiliser les classiques configure, make et make install de la manière suivante :
$ ./configure \ --enable-proxy \ --enable-cache \ --enable-threads \ --enable-shared \ --enable-file-cache \ --enable-disk-cache \ --enable-ext-filter \ --enable-ssl \ --enable-so \ --enable-deflate \ --disable-optimization CFLAGS="-g" \ --prefix=$HOME/apache
Les modules que l'on ajoute de cette manière sont liés à l'executable. On souhaite notamment tester la fonctionnalité de proxy cache d'apache 2 et c'est pour cela que l'on rajoute --enable-proxy et --enable-*cache
Ici, on remarque notamment le --prefix qui permet de faire l'installation dans un repertoire de notre choix (ici, $HOME/apache)
$ make $ make install
Une fois l'installation effectuée, avant de tester apache, il faut modifier le fichier de configuration.
$ cd $ cd apache/conf $ vi httpd.conf
Le fichier httpd.conf est largement commenté. Par ailleurs, toutes les directives sont documentées ici
Afin de faire quelques tests, il convient de modifier au minimum les directives suivantes :
# En mode user, on choisit un port supérieur à 1024 Listen 1234 # au besoin, il faut adapter les directives Directory ou Location
On peut ensuite tester que le serveur fonctionne en le lançant :
$ cd ../bin $ ./apachectl start
Puis, pour tester que le serveur fonctionne, on se dirige sur l'url http://localhost:1234/ avec son navigateur favori.
Pour arrèter le serveur :
$ ./apachectl stop
Ce filtre générique permet de tester assez rapidement un nouveau type de filtre. Il utilise un programme executable qui lit les données à filtrer sur l'entrée standard et écrit les données filtrées sur la sortie standard.
Voir Apache Module mod_ext_filter
pour créer un filtre, le plus simple consiste à créer un répertoire jpeg dans le sous répertoire modules du répertoire contenant les sources d'apache. De cette manière, on bénéficie du script buildconf qui permet la création du makefile dans le répertoire jpeg et la modification des autres makefiles/configure, avec notamment la prise en compte du --enable-jpeg dans configure.
$ cd modules $ mkdir jpeg
On copie ensuite les fichiers contenus dans l'archive suivante dans le répertoire jpeg
$ cd jpeg $ tar xvzf mod_jpeg.tar.gz
On lance le script buildconf pour générer les makefiles :
$ cd ../.. $ ./buildconf
On peut maintenant recompiler apache avec support du module jpeg
$ ./configure \ --enable-proxy \ --enable-cache \ --enable-threads \ --enable-shared \ --enable-file-cache \ --enable-disk-cache \ --enable-ext-filter \ --enable-ssl \ --enable-so \ --enable-jpeg \ --enable-deflate \ --disable-optimization CFLAGS="-g" \ --prefix=$HOME/apache $ make $ make install
Pour tester ce module, on peut ajouter les lignes suivantes dans le fichier httpd.conf :
<Location "/"> AddOutputFilterByType JPEG image/jpeg image/jpg </Location>