systemadmin.es > LAMP y web > Programación de un módulo de apache simple

Programación de un módulo de apache simple

La programación de un módulo sencillo para el apache no son muchas lineas. Vamos a ver como realizar un módulo simple (“Hello World“).

#include "httpd.h"
#include "http_config.h"

static int hello_world_modulo_apache (request_rec *r)
{
        fprintf(stderr,"modulo ejemplo apache: Hello World.\n");
        return DECLINED;
}

static void register_hooks(apr_pool_t *p)
{
        ap_hook_handler(hello_world_modulo_apache, NULL, NULL, APR_HOOK_REALLY_FIRST);
}

module AP_MODULE_DECLARE_DATA mod_ejemplo =
{
        STANDARD20_MODULE_STUFF,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL,
        register_hooks
};

Vamos a ver por partes el código:

  • static int hello_world_modulo_apache (request_rec *r)

    Definimos la acción que va a realizar el módulo, en este caso imprimir por stderr (en el error log) la cadena “Hello World

  • static void register_hooks(apr_pool_t *p)

    Definimos la función que va a registrar los hooks (puntos del proceso de una petición) en los que el módulo va a actuar

  • module AP_MODULE_DECLARE_DATA mod_ejemplo =

    Definimos la estructura de datos que luego el apache va a leer para registrar el módulo y activarlo

Para compilar el módulo lo deberemos hacer mediante este comando (evidentemente deberemos adaptar los paths a nuestro sistema):

# gcc $(/usr/local/apache22/bin/apr-1-config --cppflags) $(/usr/local/apache22/bin/apr-1-config --cflags) -fPIC -DSHARED_MODULE -I/usr/local/apache2/include/ -c mod_ejemplo.c
# ld -Bshareable -o mod_ejemplo.so mod_ejemplo.o
# cp mod_ejemplo.so /usr/local/apache2/modules/

Para cargar el módulo deberemos añadir en el fichero httpd.conf la siguiente línea:

LoadModule mod_ejemplo modules/mod_ejemplo.so

El primer parámetro indica el nombre de la estructura de datos AP_MODULE_DECLARE_DATA, siendo el segundo parámetro el path donde se encuentra el módulo.

Una vez reiniciado el apache podremos ver como se escribe en el logs/error_log la cadena:

modulo ejemplo apache: Hello World.

Veremos que no aparece inmediatamente después de cada petición, esto es porque no se realiza el flush, podemos forzarlo mediante fflush inmediatamente después del fprintf:

fflush(stderr);

One comment to “Programación de un módulo de apache simple”

  1. Hola,
    intento programar un simple modulo para Apache, y kisiera estudiar el codigo fuente
    Tengo el apache 2.0.65 pero no me vienen los fuentes(*.c):(, ¿los puedo descargar?¿donde?

    ¿mod_ejemplo es el identificador del modulo?¿puedo usar cualkier otro?

Deja un comentario:

XHTML - Tags permitidos:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>