20060920 miércoles septiembre 20, 2006

Apache 2.2 + Tomcat 5.5-6 (I) Aún cuando Apache Tomcat puede funcionar perfectamente como servidor único de contenido estático y dinámico, en configuraciones más avanzadas tenemos que recurrir a montajes algo más complejos. Lo más común es ponerlo detrás de un servidor web, como puede ser el de Apache, que nos dará juego para hacer configuraciones más potentes. La conjunción de Apache Httpd + Tomcat nos permitirá entre otras cosas:

  • Utilizar la velocidad de Apache-Httpd para servir el contenido estático.
  • Utilizar el módulo 'rewrite' para redireccionar algunas URLs.
  • Utilizar la cache de Apache-Httpd.
  • Poder arrancar Apache Tomcat sin usuario root para poder servir a una petición del puerto 80 (y sin usar IP forwarding).
  • Poder tener el Tomcat en una máquina fuera de la DMZ.
  • Poder añadir más capas con Tomcat's en máquinas diferentes.
  • Escalar el número de peticiones a servir mediante balanceo de carga entre Tomcat's.
  • Conseguir un cluster de Tomcat's con tolerancia a fallos.
  • Tener mejor control en las caídas del Tomcat o de la máquina que lo alberga, pudiendo mostrar páginas de error personalizadas.
  • ¿Sugerencias?
Para la conexión de estas dos piezas de software existen varias alternativas, siendo lo más recomendable la utilización de un conector de Tomcat especialmente optimizado para dicha tarea. El protocolo que utiliza tiene por nombre AJP (Apache JServ Protocol), la versión más utilizada es la 1.3 y está implementado en un módulo llamado 'mod_jk'. El problema que ha tenido esta configuración es que con frecuencia no se cuenta con la versión binaria adecuada y ha de compilarse e instalarse en el servidor web, aparte de tener una configuración un poco farragosa. Por suerte, desde la versión 2.1 del servidor web de Apache, existe otra solución a la instalación del conector mod_jk. Los señores de Apache han hecho suyo dicho protocolo y lo han implementado en un modulo con el fin de poder conectar, vía AJP13, con cualquier servlet container (como Tomcat, Domino, IIS, Sun-WS o Jetty). Otra alternativa de comunicación de Apache con Tomcat es la utilización del modulo mod_proxy de Apache que utiliza http en vez de un protocolo binario optimizado como AJP. También es posible tener el Tomcat escuchando por un puerto como el 8080 y redireccionar a dicho puerto las peticiones web mediante el módulo 'mod_rewrite', e incluso otra montajística como usar el 'IP forwarding' del 'iptables'. 'Mod_jk' es la evolución de 'mod_jserv' y convivió con el abandonado 'mod_jk2' que contaba con una sintaxis más sencilla en su configuración. Para Tomcat 4, también se contaba con mod_webapp también ora deprecated.
El reciente módulo 'mod_proxy_ajp' de Apache aporta numerosas ventajas, entre ellas el venir con la instalación estándar, poderse linkar estáticamente o cargar dinámicamente, y mediante la implementación del protocolo AJP, tener una sintaxis de configuración del Apache-httpd mucho más simple y concisa. En una configuración estándar de Tomcat, con un conector escuchando por el puerto 8009 (el de por defecto para AJP13), sólo habría que añadir al Apache la carga del módulo mod_proxy_ajp (y del mod_proxy) y poner las 2 lineas:
ProxyPass        /portal ajp://localhost:8009/portal
ProxyPassReverse /portal ajp://localhost:8009/portal

o alternativamente:

<location /portal >
ProxyPass ajp://localhost:8009/portal
ProxyPassReverse ajp://localhost:8009/portal
</location>

que hacen que cualquier URL que comience por '/portal' sea redirigida al Tomcat que está en la misma máquina (localhost) escuchando por el puerto 8009 peticiones AJP para servir el contenido dinámico. Fácil ¿no?..

Technorati tags: , , , ,

Posted by Feliciano Borrego in Java at 20060920 Comentarios[8]

Comentarios:

Atención al servidor Web de Glassfish (Grizzly), implementación enteramente programada en Java, usando NIO y que según dicen es tán rápido o más que el apache.

Enviado por lasterra en septiembre 21, 2006 a las 11:30 AM CEST #

Ya no se trata de rapidez, hay mucho 'indio' tanto o más rápido que Apache, se trata del resto de artilugios que se le añaden, hosting virtual, caché, url rewriting, gestión de permisos, etc...

Apache es servidor que está y estará en los web hostings, el de la magna documentación, el de los expertos y los iniciados, el de los foros, blogs y listas, el multilenguaje (Java, PHP, Python, Perl, ...), en difinitiva
Apache es 'El Servidor' http.

Enviado por feli en septiembre 21, 2006 a las 12:44 PM CEST #

Por supuesto, no tengo dudas de que apache sea mejor.... pero es que apache tiene muchos años¡¡

Simplemente queria dejar anotado que Java tiene alternativas, y que se esta avanzando tb en este area. Desde luego sustituir al apache es muy complicado, y has dado buenas razones .

Enviado por lasterra en septiembre 22, 2006 a las 11:19 AM CEST #

No olvidarse de los filtros de cache y compresion de apache, ni de los fast-cgi.

Y de lo dificil que es "atacar" a un APACHE y entrar dentro.

Una pregunta, ES MAS SEGURO, Glassfish que apache, lo dudo.

Enviado por batch4j en septiembre 25, 2006 a las 03:51 PM CEST #

Estoy montando un servidor con una web creada integramente en JSP+Java, sobre Tomcat y contra MySQL... el rendimiento es bueno, aunque no hay gran carga de usuarios. Si utilizara Apache+Tomcat para responder las peticiones de los usuarios, obtendría mejor rendimiento? porque al fin y al cabo, Apache recibe la petición JSP y la redirige a Tomcat el cual genera el HTML y lo sirve.. entonces es como si tubiera Tomcat solo sirviendo, no?

Un saludo a todos.

Enviado por ari0k0 en octubre 02, 2006 a las 10:31 PM CEST #

Saludos

tengo una consulta
ya tengo montado mi tomcat en apache con el mod_jk

tengo un webapps en toncat donde incluyo tres aplicaciones

y tambien tengo tres virtualhost
www.mipagina.com
uno.mipagina.com
dos.mipagina.com

mi duda es como hago para entrar en un vortual host y crear una session y luego entrar a otro virtual host y conservar la session
en tomcat estoy utilizando SSO pero cuando ya estoy en apache ese SSO que he creado en tomcat solo me sirve para un solo virtual host
mas si entro a otro virtual host se pierde mi session

Atte.
ExZ

Enviado por ExZ en octubre 02, 2006 a las 10:48 PM CEST #

Hola, Ari0k0,
por norma general, Tomcat da suficiente rendimiento incluso para cargas elevadas (depende en gran medida del Hw: Memoria, CPU y Disco) y las últimas versiones también están muy optimizadas para servir contenido estático.
No te compliques, usa un Tomcat únicamente y cuando detectes que no es capaz de atender a todas las peticiones, aplica entonces otras alternativas.

Para ello haz un seguimiento de los logs, de la CPU y memoria utilizada.

Enviado por feli en octubre 02, 2006 a las 10:49 PM CEST #

Gracias

me puedes dar tu correo
para poder hacerte mas consultas

Atte.
enzo

Enviado por ExZ en octubre 05, 2006 a las 05:24 PM CEST #

Enviar un comentario:
Los comentarios han sido deshabilitados.