Apache-es.org Segundo módulo de Apache - Obteniendo datos de las estructuras de Apache ------------------------------------------------------------------------ 1-Introducción En el primer módulo que os mostré, vimos la estructura básica de un handler o filtro de Apache y como configurarlo en el servidor. El siguiente paso, normalmente, es mostrar cómo crear directivas de configuración que, después de ser insertadas en el fichero httpd.conf, podamos leer con nuestro módulo. Pero antes quería explicar cómo obtener los datos importantes de la conexión, para luego poder usarlos como queramos. 2- Obteniendo Información No resulta nada fácil conseguir información sobre las estructuras de datos de Apache. Personalmente siempre busco en los mismos sitios: - El directorio "include" dentro del código fuente de Apache. En el fichero httpd.h, se encuentra la definición de las estructuras más importantes y necesarias para una conexión HTTP. Estas son 3, REQUEST_REC, CONN_REC, y SERVER_REC, correspondientes a las estructuras que definen la "petición" en sí, la conexión, y el servidor (virtual o no) que sirve esa petición. - La documentación de desarrollador de Apache, en http://httpd.apache.org/docs/2.2/developer/ . No es demasiado completa, pero tiene artículos interesantes...por ejemplo: http://httpd.apache.org/docs/2.2/developer/API.html En las notas del API están referencias a la estructura REQUEST_REC y ciertas anotaciones básicas sobre manejar VirtualHosts, además de los métodos para obtener datos de configuración que afectan a o a . - Google. Cuando tengo alguna duda sobre una estructura particular (por ejemplo, saber a qué tipo exacto de entero corresponde apr_port_t), directamente lo miro en google y aparecen muchas referencias a sites con la documentación de Apache. A pesar de todo el caos que puede representar navegar por la documentación existente, uno se da cuenta de lo poderosa que es la API de Apache (apr.apache.org). Hay funciones para casi todas las necesidades que puedas tener a la hora de manejar datos, procesos, y conexiones. Os voy a dejar en http://www.apache-es.org/pdf/request_rec.h.txt la estructura REQUEST_REC comentada en castellano. En dicha estructura están los datos pertenecientes a la petición que nos realiza el cliente, tales como el protocolo, la URI, etc... Dentro de lo que Apache considera como una petición, es decir, dentro de la estructura REQUEST_REC, se puede acceder a la información del SERVIDOR virtual que sirve esa petición, y a la estructura de la CONEXIÓN que se utiliza en ese momento para servir dicha petición. 3- Usos Posibles y breve apunte de Mod_perl Sencillamente, se pueden hacer perrerías con esos datos. P.ej: - Redirecciones internas. Si estas creando un producto comercial basado en Apache, y quieres que internamente Apache siempre redirija a una URL determinada. O que realize llamadas ocultas a otra URL para loggear los datos de conexión en otro servidor. - Módulos especiales de VirtualHosting, que permitan un control a medida de los datos de transferencia, del manejo de las URLS, del manejo de los virtualhosts. Etc... Hay que darse cuenta que NO ESTAIS RESTRINGIDOS AL PROTOCOLO HTTP. Podéis utilizar el protocolo que queráis. Apache os proporciona el marco para desarrollar SERVIDORES que respondan a un tipo determinado de peticiones, y, con la programación adecuada y menos esfuerzo del que pensáis, programar cosas como: - Un servidor SMTP con Apache: http://search.cpan.org/~mock/Apache-SMTP/lib/Apache/SMTP.pm - Un servidor FTP con Apache: http://incubator.apache.org/projects/mod_ftp.html Recordad que, además de poder utilizar la API de C de Apache, existe un módulo MUY poderoso llamado mod_perl que permite realizar las MISMAS cosas, "simplificando" la programación tal y como realiza Perl. Al fin y al cabo, Perl es un intérprete nada más, y por debajo, está hecho en C. A mod_perl me gustaría dedicarle unos cuantos articulillos, pero no tengo tanto tiempo. Más información en : http://perl.apache.org 4- El modulo de hoy Lo encontraréis en http://www.apache-es.org/pdfs/mod_showrequest.c . Está comentado en castellano, y es básicamente similar al anterior, con la estructura básica de un módulo de Apache, y "engancha" en el mismo sitio en el proceso de conexión. Para compilarlo: "apxs2 -c -a mod_showrequest.c" Para instalarlo: (como root) "apxs2 -i mod_request.c" o bien copiais a mano el fichero mod_showrequest.so al directorio "modules" de vuestro Apache. En el fichero de configuración de Apache añadimos: LoadModule showrequest_module modules/mod_showrequest.so Y para terminar la configuración: SetHandler showrequest Para probarlo: http://elhostquehayaisutilizado.com/loquequerais?arg=1?arg=2 El arg=1?arg=2 es para que veáis la salida de los argumentos El siguiente artículo tratará de directivas de configuración. Kitai http://www.apache-es.org