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

     
     
     
     
    Partenaires

    Hébergement Web