Este documento describe los pasos para integrar Apache con Tomcat de forma que Apache sirva páginas estáticas y reenvíe las solicitudes de servlets a Tomcat. Se instala el módulo JK, se crea un worker llamado "workerMedina", y se modifican archivos de configuración como workers.properties, jk.conf y httpd.conf. También se resuelven errores como mostrar el código fuente en lugar de la salida del servlet o mensajes de error al iniciar Apache.
Apache Tomcat 8: integración con Apache Server (con mod_jk)
1. IES Gran Capitán
Módulo: Despliegue de Aplicaciones Web
Ciclo Formativo de Grado Superior “Desarrollo de aplicaciones Web”
Práctica 12: Integración de Apache Server
con Tomcat
Fecha entrega: 13/01/2014
Autor: Pablo Medina Suárez
IES Gran Capitán. C/. Arcos de la Frontera, S/N. 14014 – Córdoba.
http://www.iesgrancapitan.org http://informatica.iesgrancapitan.org informatica@iesgrancapitan.org
2. Práctiac 12: Integrar Apache con Tomcat
2
1 ÍNDICE
1
ÍNDICE
2
2
INTRODUCCIÓN
3
3
DESARROLLO DE LA PRÁCTICA
4
PREGUNTAS:
9
3.1 ¿QUÉ NUEVO MÓDULO DE APACHE HAS NECESITADO INSTALAR Y ACTIVAR?
9
3.2 DEFINE WORKER. CREA UN WORKER PARA LAS PRUEBAS QUE SE LLAME WORKER[TUAPELLIDO].
9
3.3 ¿QUÉ FICHEROS DE CONFIGURACIÓN VAS A TENER QUE MODIFICAR? CAPTURA PANTALLAS DE
TODOS CON LA PARTE QUE HAS MODIFICADO.
9
3.4 ¿QUÉ FICHEROS DE LOG HAS REVISADO? CAPTURA PANTALLAS DE TODOS ELLOS TANTO SI SE
MUESTRA ALGÚN ERROR COMO SI NO.
10
3.5 INDICA LOS ERRORES QUE HAN IDO APARECIENDO Y CÓMO LOS HAS SOLUCIONADO.
11
3.5.1 ERROR: /EXAMPLES/ DENTRO DE OTRO DIRECTORIO:
11
3.5.2 ERROR: APACHE NOS DA UN ERROR AL INICIARLO:
11
3.5.3 ERROR: COULD NOT FIND WORKER JK-MANAGER Y JK-STATUS:
12
3.5.4 ERROR: LA PÁGINA NOS DEVUELVE UN ERROR 503 (SERVICIO NO DISPONIBLE):
13
3.5.5 ERROR: LA PÁGINA NOS DEVUELVE UN ERROR 404 (NO ENCONTRADO):
13
3.6 OPCIONAL: INVESTIGA EN QUÉ CASOS PUEDE SER INTERESANTE DEFINIR VARIOS "WORKERS". 13
3.7 OPCIONAL: PONLO EN PRÁCTICA CONFIGURANDO UN WORKER MÁS PARA OTRO DE TUS
SERVIDORES WEB VIRTUAL.
13
3.8 OPCIONAL: INVESTIGA TAMBIÉN CÓMO USAR "JKMOUNTCOPY ON" EN EL FICHERO JK.CONF
PARA EVITAR TENER QUE COPIAR LA CONFIGURACIÓN SOBRE LOS FICHEROS JK_ESTATUS, JK_LOG,
ETC A CADA SERVIDOR WEB VIRTUAL. PRUÉBALO EN TU CONFIGURACIÓN.
13
4
CONCLUSIÓN
15
5
BIBLIOGRAFIA
16
IES Gran Capitán. C/. Arcos de la Frontera, S/N. 14014 – Córdoba.
http://www.iesgrancapitan.org http://www.iesgrancapitan.org/blog04/ informatica@iesgrancapitan.org
3. Práctiac 12: Integrar Apache con Tomcat
2
3
INTRODUCCIÓN
Objetivo:
Usar Apache para servir las páginas estáticas y Tomcat para ejecutar servlets.
Al acceder desde el navegador a un servlet http://localhost/examples/[pagina con
servlets] será Apache el que detecta que se trata de un server y que necesita la ayuda de Tomcat
para ejecutarlo de modo que reenvía la petición a Tomcat. Entonces estaremos haciendo uso
de Tomcat como contenedor pero sin acceder directamente a él (indicando el puerto de Tomcat
como hicimos en la práctica anterior):
http://localhost:8080/examples/[pagina con servlets]
Requisitos:
- Tener Tomcat instalado.
Pasos:
Lee la documentación al respecto subida a moodle (documento paso a paso).
Documenta la instalación, configuración y ejecución respondiendo al mismo tiempo a
las preguntas siguientes.
Nota: la última pregunta es opcional y subirá la nota de la práctica.
IES Gran Capitán. C/. Arcos de la Frontera, S/N. 14014 – Córdoba.
http://www.iesgrancapitan.org http://www.iesgrancapitan.org/blog04/ informatica@iesgrancapitan.org
4. Práctiac 12: Integrar Apache con Tomcat
4
3 DESARROLLO DE LA PRÁCTICA
Antes de comenzar, iniciamos en el servidor tanto el servicio Apache como el de
Tomcat, y comprobamos que funcionan correctamente. A su vez, recordamos las rutas donde
están instalados los servicios y los programas necesarios, como Java, etc.
Vemos que comprueban correctamente, así que vamos a comprobar si Apache es capaz
de ejecutar algún Servlet por sí mismo (lo cual comprobaremos que no será así).
Accedemos al directorio de servlets de ejemplo de Tomcat y copiamos el directorio de
aplicaciones de ejemplo de Tomcat (examples) en el directorio de Apache:
Ahora abrimos el navegador y accedemos a la dirección correspondiente para
comprobar si funciona la aplicación:
Como puede verse en la imagen, el resultado obtenido no es el deseado, porque el
navegador nos ha mostrado el código del documento en lugar del resultado, ya que no ha sido
interpretado por el servidor. Por lo tanto, tenemos que encontrar la forma de que Apache recurra
a Tomcat para ejecutar las aplicaciones.
IES Gran Capitán. C/. Arcos de la Frontera, S/N. 14014 – Córdoba.
http://www.iesgrancapitan.org http://www.iesgrancapitan.org/blog04/ informatica@iesgrancapitan.org
5. Práctiac 12: Integrar Apache con Tomcat
5
Tenemos que instalar y activar el módulo jk (libapache2-mod-jk), así que abrimos un
terminal e introducimos lo siguiente, reiniciando además el servicio de Apache:
Hecho lo anterior, comprobamos que nos han aparecido dos archivos nuevos, jk.conf y
jk.load, tanto en el directorio mods-available como en mods-enabled del servicio Apache:
Ya tenemos instalado el módulo necesario, lo siguiente a realizar las configuraciones
necesarias en los ficheros de configuración.
En primer lugar, abrimos el fichero /etc/libapache2-mod-jk/workers.properties y
modificamos las siguientes líneas:
Reemplazamos por la ruta donde está instalado Tomcat
IES Gran Capitán. C/. Arcos de la Frontera, S/N. 14014 – Córdoba.
http://www.iesgrancapitan.org http://www.iesgrancapitan.org/blog04/ informatica@iesgrancapitan.org
6. Práctiac 12: Integrar Apache con Tomcat
6
Reemplazamos por la ruta de instalación de Java
Añadido de un nuevo worker, con el que trabajaremos en el desarrollo de ésta
práctica
Configuraciones realizadas para el nuevo worker, nótese que el puerto utilizado por
nuestro worker debe ser el mismo que uno de los utilizados en el fichero server.xml
Al haber incluido un nuevo worker, debemos hacer la siguiente modificación en el
fichero server.xml de Tomcat:
Aquí puede verse la parte del archivo de configuración server.xml, donde se ve que el
puerto utilizado es el 8009 y se ha creado otro conector para el 8010
IES Gran Capitán. C/. Arcos de la Frontera, S/N. 14014 – Córdoba.
http://www.iesgrancapitan.org http://www.iesgrancapitan.org/blog04/ informatica@iesgrancapitan.org
7. Práctiac 12: Integrar Apache con Tomcat
7
Guardamos los cambios y ahora abrimos y pasamos a configurar el fichero
/etc/apache2/mods-enabled/jk.conf, donde hacemos los siguientes cambios:
Por orden: se comenta la línea donde se indica la ruta del fichero workers.properties, se
indica dónde y qué nombre tendrá el fichero de log de jk, y cuál el nivel de log (error, para
que muestre errores)
NOTA: he comentado la línea JkWorkersFile debido a que la añadiremos más adelante
para evitar un error causado al utilizar un Virtual Host.
Abrimos el fichero de configuración del Virtual Host desde el cual queremos ejecutar
los servlets, en este caso, el sitio por defecto (default) y añadimos lo siguiente:
Entre la etiqueta VirtualHost añadimos la directiva JkMountCopy, para cargar las
direcciones montadas en httpd.conf, que serán interpretadas por el servidor Tomcat, en lugar
de por Apache.
Por último, se añade la directiva JkMountCopy On, que veremos en la pregunta
correspondiente el motivo por el que lo he utilizado.
IES Gran Capitán. C/. Arcos de la Frontera, S/N. 14014 – Córdoba.
http://www.iesgrancapitan.org http://www.iesgrancapitan.org/blog04/ informatica@iesgrancapitan.org
8. Práctiac 12: Integrar Apache con Tomcat
8
Ahora, abrimos el fichero /etc/apache/httpd.conf, en el cual añadimos lo siguiente:
Se emplea la directiva Include para que se carguen las configuraciones del módulo
jk, contenidas en el fichero indicado. E insertamos la línea que se comentó anteriormente
para evitar un error con Apache.
Montamos con JkMount los directorios cuyos documentos serán interpretados por
Tomcat.
Con el uso de la directiva JkMount le indicamos al servidor qué direcciones serán
interpretadas por el servidor Tomcat, en este caso, todos los documentos con extensión .jsp y
todo lo contenido en el directorio /examples/ de nuestro servidor.
A continuación, le indicamos el worker que se encargará de servir las aplicaciones, en
este caso, el que hemos creado anteriormente.
Ya sólo nos queda reiniciar tanto el servicio Tomcat como el servidor Apache para que
los cambios se tengan en cuenta y probamos de nuevo a ejecutar alguna de las servlets. Por lo
que abrimos el navegador y, utilizando la dirección http://localhost/examples/, elegimos alguna
de las aplicaciones:
Otra de las aplicaciones de ejemplo:
IES Gran Capitán. C/. Arcos de la Frontera, S/N. 14014 – Córdoba.
http://www.iesgrancapitan.org http://www.iesgrancapitan.org/blog04/ informatica@iesgrancapitan.org
9. Práctiac 12: Integrar Apache con Tomcat
9
Y con esto, ¡ya tenemos integrado nuestro servidor Apache con Tomcat para servir
servlets!
PREGUNTAS:
3.1
¿Qué nuevo módulo de apache has necesitado instalar y activar?
Se ha instalado y activado el módulo jk (libapache2-mod-jk). Con esto, es posible
establecer conexiones entre servidores utilizando el protocolo AJP.
3.2
Define worker. Crea un worker para las pruebas que se llame
worker[tuapellido].
Un worker es una instancia de Tomcat encargada de ejecutar las servlets enviadas como
petición de un servidor web como, por ejemplo, un servidor Apache, ya que éste es incapaz de
ejecutarlas por sí mismo.
Creación del worker personalizado:
Indicamos qué worker servirá los ficheros de los directorios de nuestro servidor:
3.3
¿Qué ficheros de configuración vas a tener que modificar? Captura
pantallas de todos con la parte que has modificado.
Se han modificado los archivos /etc/libapache2-mod-jk/workers.properties,
/etc/apache2/mods-enabled/jk.conf, server.xml (para comprobar el puerto utilizado), y el
fichero de configuración del Virtual Host.
Pueden verse las modificaciones realizadas en los ficheros más arriba, durante el
desarrollo de la práctica.
IES Gran Capitán. C/. Arcos de la Frontera, S/N. 14014 – Córdoba.
http://www.iesgrancapitan.org http://www.iesgrancapitan.org/blog04/ informatica@iesgrancapitan.org
10. Práctiac 12: Integrar Apache con Tomcat
3.4
10
¿Qué ficheros de log has revisado? Captura pantallas de todos ellos
tanto si se muestra algún error como si no.
He utilizado, principalmente, el fichero /var/log/apache2/mod_jk.log, el cual me ha
sido de mucha utilidad para detectar errores durante el desarrollo de la práctica. En el siguiente
punto pueden verse imágenes donde se detectan errores mediante la consulta de este fichero.
Otros ficheros que también son de utilidad son el fichero /var/log/apache2/error.log:
Y el fichero /var/log/apache2/Access.log:
IES Gran Capitán. C/. Arcos de la Frontera, S/N. 14014 – Córdoba.
http://www.iesgrancapitan.org http://www.iesgrancapitan.org/blog04/ informatica@iesgrancapitan.org
11. Práctiac 12: Integrar Apache con Tomcat
3.5
11
Indica los errores que han ido apareciendo y cómo los has
solucionado.
3.5.1 Error: /examples/ dentro de otro directorio:
Uno de los primeros errores que he cometido, y que ha sido catastrófico al no conseguir
que Tomcat accediera a las aplicaciones (mostrando un error 404), ha sido insertar el directorio
/examples/ dentro de un directorio llamado /webapps/.
Para solucionarlo, tan sólo he tenido que sacar el directorio a /var/www, quedando de la
siguiente manera:
Acto seguido, he eliminado el directorio /webapps/, ya que no tiene utilidad ninguna.
3.5.2 Error: Apache nos da un error al iniciarlo:
Al reiniciar Apache, nos devuelve el siguiente error:
Nos indica que la directiva JkWorkersFile sólo puede emplearse una vez. Para
solucionarlo, tenemos que comentar la siguiente línea en el fichero /etc/apache2/modsenabled/jk.conf:
En cambio, la misma va incluida en el fichero /etc/apache2/httpd.conf:
IES Gran Capitán. C/. Arcos de la Frontera, S/N. 14014 – Córdoba.
http://www.iesgrancapitan.org http://www.iesgrancapitan.org/blog04/ informatica@iesgrancapitan.org
12. Práctiac 12: Integrar Apache con Tomcat
12
3.5.3 Error: Could not find worker jk-manager y jk-status:
Revisando el fichero de log /var/log/apache2/mod_jk.log encontramos las siguientes
líneas, indicando errores relacionados con el módulo jk:
Esto es causado a que estamos empleando el módulo en un Virtual Host, por lo que
tenemos que hacer como se nos indica en el fichero de configuración, y solucionar el problema
comentando las siguientes líneas:
IES Gran Capitán. C/. Arcos de la Frontera, S/N. 14014 – Córdoba.
http://www.iesgrancapitan.org http://www.iesgrancapitan.org/blog04/ informatica@iesgrancapitan.org
13. Práctiac 12: Integrar Apache con Tomcat
13
3.5.4 Error: la página nos devuelve un error 503 (servicio no disponible):
Si hacemos uso, una vez más, del fichero mod_jk.log, nos encontramos los siguientes
errores:
El error puede estar causado porque no tenemos iniciado el servicio de Tomcat, o
porque
tenemos
configurado
un
puerto
equivocado
en
el
fichero
$CATALINA_HOME/conf/server.xml.
3.5.5 Error: la página nos devuelve un error 404 (no encontrado):
Este error puede tener infinitas causas, en mi caso, se me mostraba cuando aún no había
solucionado el error 3.5.1, porque las aplicaciones estaban intentando acceder a una dirección
distinta a la que tenían programada, por lo que la dirección devuelta no podía ser encontrada por
el servidor.
3.6
Opcional: investiga en qué casos puede ser interesante definir varios
"workers".
Hay varios casos en los que trabajar con varios workers resulta útil:
Para servir distintos contextos utilizando workers Tomcat distintos, para
proporcionar un entorno de desarrollo donde los desarrolladores compartan
el mismo servidor pero cada uno utilizando su propio worker.
Cuando queremos que cada host virtual utilice su propio worker. De esta
manera, se establece una clara separación entre cada sitio web, siendo de
utilidad, por ejemplo, en servidores compartidos por varias empresas, donde
cada una aloja su propio sitio web.
Para proporcionar balanceo de carga utilizando múltiples workers, cada uno
corriendo en una máquina distinta, y distribuyéndose las peticiones entre ellos.
De esta forma se consigue una alta disponibilidad y mejora de rendimiento y
número máximo de usuarios de las aplicaciones servidas.
3.7
Opcional: ponlo en práctica configurando un worker más para otro
de tus servidores web virtual.
3.8
Opcional: investiga también cómo usar "JkMountCopy On" en el
fichero jk.conf para evitar tener que copiar la configuración sobre los
ficheros jk_estatus, jk_log, etc a cada servidor web virtual. Pruébalo
en tu configuración.
He utilizado esta directiva desde el primer momento, ya que facilita el desarrollo de la
práctica.
Esta directiva, si está activada en un host virtual, copiará todo lo montado por el
servidor principal (utilizando JkMount o JkUnMount) al sitio que la utilice.
IES Gran Capitán. C/. Arcos de la Frontera, S/N. 14014 – Córdoba.
http://www.iesgrancapitan.org http://www.iesgrancapitan.org/blog04/ informatica@iesgrancapitan.org
14. Práctiac 12: Integrar Apache con Tomcat
14
La configuración por defecto es “Off”, es decir, está apagada. Para activarla en uno de
nuestros host virtuales, tenemos que incluir lo siguiente en el fichero de configuración de dicho
sitio:
De esta forma, se copiaran en este sitio los mounts cargados por el servidor global
mediante el uso de JkMount, en este caso, cargamos desde el /etc/apache2/httpd.conf lo
siguiente:
De esta manera, nos ahorramos tener que copiar en cada host virtual la configuración de
los ficheros del módulo jk.
IES Gran Capitán. C/. Arcos de la Frontera, S/N. 14014 – Córdoba.
http://www.iesgrancapitan.org http://www.iesgrancapitan.org/blog04/ informatica@iesgrancapitan.org
15. Práctiac 12: Integrar Apache con Tomcat
15
4 CONCLUSIÓN
En esta práctica he aprendido a integrar un servidor web con el servidor Tomcat
instalado previamente para poder servir las servlets que Apache no puede servir por sí mismo.
Todo ello gracias a la instalación y uso de mod_jk.
Para ello, se ha tratado el uso de los workers de Tomcat, y los distintos ficheros de
configuración, tanto de Apache, como de Tomcat y del propio módulo utilizado.
Además, he resuelto los distintos errores aparecidos durante la práctica mediante el uso
de los ficheros de log, de la documentación, y del todopoderoso Google.
IES Gran Capitán. C/. Arcos de la Frontera, S/N. 14014 – Córdoba.
http://www.iesgrancapitan.org http://www.iesgrancapitan.org/blog04/ informatica@iesgrancapitan.org
16. Práctiac 12: Integrar Apache con Tomcat
16
5 BIBLIOGRAFIA
Integración de Tomcat y Apache paso a paso.
Consultado en: http://moodle.iesgrancapitan.org/mod/resource/view.php?id=6234
Documentación de Apache Tomcat, Connectors.
Consultado en: http://tomcat.apache.org/connectors-doc/webserver_howto/apache.html
Documentación de Apache Tomcat, JkMountCopy On
Consultado en: http://tomcat.apache.org/connectors-doc/reference/apache.html
Tomcat, introducción en castellano. Workers Tomcat.
Consultado en: http://www.programacion.com/articulo/tomcat_-_introduccion_134/3
IES Gran Capitán. C/. Arcos de la Frontera, S/N. 14014 – Córdoba.
http://www.iesgrancapitan.org http://www.iesgrancapitan.org/blog04/ informatica@iesgrancapitan.org