IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Créer des modules DSO pour Apache avec Kylix

7 avril 2001

Par Jean-Philippe Bempel

Sous Windows, les DLL ISAPI offrent l'avantage par rapport aux langages scriptés d'être compilées, et par rapport aux CGI d'être chargées une fois pour toutes en mémoire ! Sous linux, les modules DSO (Dynamic Shared Object) ouvrent les mêmes perspectives quant à la rapidité d'exécution d'applications serveur web. Pourtant la création et la configuration de ces modules et loin d'être simples et bien documentées. L'aide de kylix est assez succinte sur le sujet. Je vous propose donc de suivre pas à pas le déploiment de tels modules.

La plupart des distributions Linux installent le serveur web Apache dans une configuration standard et statique. Pour que les modules DSO fonctionnent il faut impérativement avoir la librairie libhttpd.so. Cette librairie s'obtient en recompilant Apache pour gérer les DSO. Les sources n'etant pas toujours livrées avec, il faut donc télécharger ces dernières sur http://httpd.apache.org/dist/apache_1.3.19.tar.gz
Sauvegardez ce fichier dans le répertoire /tmp.

Décompressez ensuite les sources:

> cd /tmp
> tar xzvf apache_1.3.19.tar.gz
> cd apache_1.3.19


Créez à l'aide de votre éditeur de texte favori le fichier config.status avec le code suivant:

#!/bin/sh
CFLAGS="-g" \
CFLAGS_SHLIB="-g" \
LIBS="/usr/lib/libpthread.so" \
./configure \
"--with-layout=Apache" \
"--enable-module=so" \
"--enable-rule=SHARED_CORE" \
"$@"


Donnez ensuite les droits d'exécution sur ce fichier:

chmod 755 config.status

Executez le fichier:

/tmp/apache_1.3.19 > ./config.status

Lancez la compilation:

/tmp/apache_1.3.19 > make

Lancez l'installation:

/tmp/apache_1.3.19 > make install

Par défaut, apache s'installe dans /usr/local/apache/

Créez un nouveau projet : File | New... -> Web Server Application -> Apache DSO

Configurez le projet dans : Project | Options -> onglet Directories/Conditionals dans le champ Output directory, indiquez /usr/local/apache/libexec

Enregistrez votre projet. Par exemple Hello.dpr . A la compilation, le fichier généré sera libHello.so

Dans les sources du projet : Project | View Source
Remplacez le nom du module par défaut 'Project1_module' par le nom de votre projet, par exemple 'Hello_module' (Attention la casse est importante !)

Maintenant il nous faut configurer Apache pour qu'il charge notre module :
Editez le fichier de configuration /usr/local/apache/conf/httpd.conf et rajoutez les lignes suivantes:

LoadModule Hello_module libexec/libHello.so

et

<Location /HelloBin>
SetHandler libhello-handler
</Location>


ATTENTION: la casse est toujours importante ! le Handler est en faite le nom du fichier en minuscule sans '.so' et avec '-handler' L'option Location crée un alias HelloBin qui va correspondre à l'appelle de notre module.

Il ne reste plus qu'a redémarrer Apache:

/usr/local/apache/bin > ./apachectl restart

Pour invoquer votre module, supposons que l'on est créé une action HelloWorld:

http://localhost/HelloBin/HelloWorld

Par comparaison, cet URL est equivalente sous Windows à:

http://localhost/scripts/Hello.dll/HelloWorld