Les filtres avec Apache 2

Introduction

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.

Différence entre un handler et un filtre

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

Récupération et compilation de apache 2

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

Test de apache 2

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

Utilisation de mod_ex_filter

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

création du filtre mod_jpeg

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>

Liens

Valid XHTML 1.0!