El funcionamiento principal de Apache desde su creación fue la de aceptar y responder requisiciones de Páginas en Internet, y como fue mencionado en Servidores de Páginas y "Java Application Servers" , estas requisiciones correspondían a documentos estáticos (puro HTML ), es por esto que cuando se requiere ejecutar algún tipo de contenido dinámico (programas) como "Java", es necesario coordinar los esfuerzos de Apache con otro ambiente, en el caso de "Java" es precisamente "Tomcat" quien ofrece facilidades para ejecutar los dos componentes más utilizados en ambientes "Java": "JSP ("Java Server Pages")" y "Servlets".
En esta guia se hablará exclusivamente sobre la linea verde del diagrama, donde el Servidor de Páginas es "Apache" y el Servlet Engine es "Tomcat".
Mod_JK
El módulo Mod_JK
es aquel utilizado por Apache para comunicarse con "Tomcat", debido a que este módulo es externo de Apache, se incluye en la distribución de Código Fuente de "Tomcat" , a continuación se mencionan los pasos a seguir para su creación
Obtener el archivo Tar con el Código Fuente de "Tomcat" (no el binario!).
Descomprimir el Código Fuente de "Tomcat" en un directorio temporal (generalmente /tmp
) , esto genera un directorio por nombre jakarta-tomcat-<numero_de_version>-src
.
Ahora se debe descender dentro de jakarta-tomcat-<numero_de_version>-src
al directorio src/native/apache1.3
.
Dentro de este directorio se debe ejecutar el siguiente comando:
apxs -o mod_jk.so -I../jk -I/usr/local/jdk/include/ -I/usr/local/jdk/include/linux -c *.c ../jk/*.c |
apxs
es un comando incluido en Apache utilizado para compilar módulos empleados por productos que operan en conjunción con Apache.
Las letras -I
en la instrucción indican los directorios que deben ser incluidos al compilar el módulo; en el caso anterior el directorio /usr/local/jdk
indica el directorio base del JDK de Java.
(Vea
instalación de Tomcat
para más detalles sobre el JDK)
Una vez ejecutado el comando anterior exitosamente, se genera el archivo mod_jk.so
dentro del directorio.(Este es el Módulo en sí)
Mod_JK
Para instalar el módulo en Apache primeramente se debe copiar el Módulo (mod_jk.so
) al directorio /usr/local/apache/libexec
, para que este disponible en Apache.
A diferencia de los módulos incluidos en Apache los cuales generalmente requieren que Apache sea re-compilado-instalado, el módulo Mod_JK
solo requiere de unas modificaciones al archivo general de configuración httpd.conf .
Los parámetros para incluir el módulo Mod_JK
son los siguientes:
LoadModule jk_module libexec/mod_jk.so AddModule mod_jk.c JkWorkersFile /usr/local/tomcat/conf/workers.properties JkLogFile /usr/local/tomcat/log/mod_jk.log JkLogLevel warn |
Las primeras dos lineas LoadModule
y AddModule
indican que el módulo debe ser cargado y agregado, respectivamente.
JkWorkersFile
le indica muy específicamente a Apache como comunicarse con "Tomcat", este archivo aunque utilizado primordialmente por Apache se incluye en "Tomcat" (he ahí la razón por la cual reside en /usr/local/tomcat/conf
), este archivo debe ser modificado para contener los siguientes parámetros:
workers.tomcat_home=/usr/local/tomcat workers.java_home=/usr/local/jdk ps=/ worker.list=ajp12, ajp13 worker.ajp13.port=8009 worker.ajp13.host=localhost worker.ajp13.type=ajp13 |
Obviamente el entrar en detalle sobre que o porque hay worker.properties sale sobrando!, pero lo que se esta indicando en este archivo es que "Apache" se comunicará con "Tomcat" mediante el protocolo ajp13
(otra alternativa sería ajp12
), que "Tomcat" también reside en el mismo "Host" local y esta utilizando el puerto TCP 8009 para atender solicitudes; inclusive si observa la
ejecución de Tomcat
notará que "Tomcat" activa estos puertos al iniciarse.
JkLogFile
y JkLogLevel
indican el lugar donde serán enviados errores relacionados con Apache y "Tomcat" y el nivel de errores reportados , respectivamente. Hasta este punto ya están configurados casi todos los aspectos relacionados con "Tomcat" y "Apache", solo falta uno: Como indicar a Apache que solicitudes deben ser enviadas a Tomcat ?, esto es, si ya se diseñaron 5 o 10 programas en "Java" ( JSP y/o Servlets ) como se coordinan estas con la información que actualmente es enviada por Apache ?
Se utiliza el parámetro JkMount
dentro de httpd.conf:
JkMount /*.jsp ajp13 JkMount /servidordatos/Insertar ajp13 |
La declaración indica que toda requisición terminada en jsp
(un Java Server Page), será enviada por Apache vía el protocolo ajp13
, este protocolo da precisamente a Tomcat, como fue mencionado en workers.properties
; la segunda declaración indica que una requisición para el archivo Insertar
bajo el directorio servidordatos
también debe ser enviada a "Tomcat".
Nótese el énfasis en enviada, el hecho de que sea enviada no implica éxito, una vez enviada la solicitud el mismo "Tomcat" debe estar configurado apropiadamente para atender estas solicitudes, pero bueno , esto es tema de Tomcat .
Al igual que todo parámetro en httpd.conf , basta incluirlo en el segmento de "Virtual Host":
<Virtual Host 127.0.0.1> ServerName www.filantropia.org DocumentRoot /www/beneficio/ DirectoryIndex ayuda.htm, index.htm JkMount /donaciones/Intl JkMount /donaciones/Local </Virtual Host> |
Si empieza a utilizar muchos JkMount's solo significa una cosa: La mayor parte del trabajo la esta realizando "Tomcat" ya que todo se esta enviando hacia "Tomcat", en este caso es conveniente eliminar "Apache" de la Arquitectura y que "Tomcat" reciba las requisiciones directamente; si observa la gráfica inicial este caso se da con la linea roja y será descrito a mayor detalle en la configuración de Tomcat .
Si de cualquier manera opta por mantener "Apache" en la Arquitectura se recomienda el uso del parámetro Include
al definir una gran cantidad de JkMount's, esto incrementa la legibilidad de httpd.conf y reduce la carga Administrativa de mantener diversos JKMount's; el archivo httpd.conf cambiaría a:
# Ningun JkMount Aqui Include /usr/local/apache/conf/mijava.txt |
Y sería dentro del archivo mijava.txt
donde se incluyen los JkMount's
JkMount /*.jsp ajp13 JkMount /servidordatos/Insertar ajp13 JkMount /servidor/Actualizar ajp13 JkMount /servidor/Eliminar ajp13 JkMount /foros/Insertar ajp13 JkMount /foros/Eliminar ajp13 JkMount /registro/Nuevo ajp13 JkMount /foros2/Insertar ajp13 |