SafeChildren Banner

Havoc Oracle Solaris Experts

lunes, 19 de abril de 2010

Instalación de Apache HTTPD con Tomcat6 y Mod_JK

Introducción
En esta serie de artículos, vamos a ver las diferentes formas que hay para definir una estructura de Apache Tomcat para su puesta en producción. Veremos cómo podemos configurar Apache Tomcat con Apache HTTP mediante <mod_jk> y cómo poner <squid-cache> como frontend haciendo de proxy reverso.

Como es una serie y no un unico post iremos viendo cómo montar la infraestructura, desde lo más básico, hasta -en las últimas entregas- cómo ponerlo en producción.

Instalación de Apache HTTPD como frontend de Tomcat6 con Mod_JK
En esta ocasión vamos a ver cómo podemos utilizar Apache HTTP 2.2.x como frontend de nuestro Tomcat6. Para ello disponemos de varias soluciones, entre ellas:
  • Utilizar mod_proxy
  • Utilizar mod_jk 
Antes de comenzar, vamos a ver cuáles son las diferencias principales entre ambos métodos, y posteriormente explicaremos cómo son los pasos de instalación en ambos casos.
  • Técnica de Mod_Proxy:  Cuando utilizamos este método, todas las peticiones que entren en nuestro Apache HTTPD serán enviadas al Tomcat, es decir, tanto contenido estático como dinámico.
  • Técnica de Mod_JK: Cuando utilizamos este método, podemos discriminar qué queremos en Tomcat y que no queremos, es decir, podemos utilizar <*.jsp> para que sea tomcat quien lo procese, y el resto sea httpd quien lo gestion -contenido dinámico a tomcat, estático a httpd- Además, podemos gestionar cargas y failovers de nuestros balanceadores.
Una vez explicadas las diferencias, nos vamos a centrar en el uso de mod_jk ya que creo es una solución más robusta y nos permite más optimizaciones

Configuración Apache 2.2.x HTTPD en 64bits
Lo primero que vamos hace es decargar y compilar -yo voy a utilizar SunCC- el servidor http de Apache desde su web, si quieres puedes optar por Compilar Apache 1.3.x en 64bits sobre Solaris 10
wget http://www.eu.apache.org/dist/httpd/httpd-2.2.15.tar.gz
$ export CFLAGS="-m64 -O3"
$ export CC=cc
$ export LDFLGAS="-64"
$ ./configure 
   --prefix=/opt/www/apache2/64 \
   --enable-so \
   --enable-rewrite  \
   --enable-vhost-alias  \
   --enable-unique-id  \
   --enable-head  \
   --with-included-apr \
$ make
# make install
Instalación de Mod_JK 1.30 en 64bits
Al igual que antes, vamos a compilar Mod_JK en 64bits utilizando el compilador de SunCC -Sun Compiler Tools-
$ wget http://www.apache.org/dist/tomcat/tomcat-connectors/jk/source/jk-1.2.30/tomcat-connectors-1.2.30-src.tar.gz
$ gtar zxpf tomcat-connectors-1.2.30-src.tar.gz
$ cd tomcat-connectors-1.2.30-src/native
$ export CC=cc
$ export CFLAGS="-m64 -O2"
$ ./configure --with-apxs=/opt/www/apache2/64/bin/apxs
$ make
# make install
Configuración de Apache Mod_JK
A continuación vamos a configurar el módulo <mod_jk>, para ello, deberemos indicar en el archivo de configuración <$APACHE_HOME/conf/httpd.conf> que carge el módulo de mod_jk utilizando para ello "LoadModule" -en Apache 2.2 la ubicación es $APACHE_HOME/modules, en 1.3.x es $APACHE_HOME/libexec-
#############################################
# CARGA DE MODULOS JK
#############################################
LoadModule jk_module          modules/mod_jk.so

#################################################
## MOD_JK
#################################################
<IfModule mod_jk.c>
  JkWorkersFile conf/extra/modules/modjk.conf.d/modjk.conf
 JkLogFile logs/mod_jk.log
 JkLogLevel error
<IfModule>
Continuaremos con la creación del archivo de configuración <modjk.conf> que hemos definido en <JkWorkersFile> donde definiremos los nombres, puertos y demás parámetros de los tomcat que queremos utilizar.

El formato del archivo <JkWorkersFile> puedes encontrarlo en la documentación oficial de Apache Tomcat, pero os he preparado un JkWorkersFile de ejemplo con las principales propiedades para que no empeceis desde cero.

Configurar Apache Tomcat JK Connector
Ahora toca el turno a nuestra instalación de Apache Tomcat, para ello editaremos el archivo <$TOMCAT_HOME/conf/server.xml> y en el apartado <SERVICE> deberemos declarar un connector nuevo, pero esta vez, utilizará el protocolo <AJP/1.3>. El puerto debe ser el mismo que hemos puesto en el valor de la propiedad <Worker.Port>, por si alguno tiene dudas, aquí os dejo un archivo de configuración de Apache Tomcat Server.xml de Ejemplo:

    <Connector
        port="13201"
        protocol="AJP/1.3"
        redirectPort="8443"
        connectionTimeout="20000"
        bufferSize="8192"
        URIEncoding="UTF-8"
    />
Configuración VirtualHost de Apache
Por último, sólo nos queda indicar a Apache HTTPD Qué contenido debe ser procesado por Tomcat y cuál por él. Para ello, deberemos utilizar la propiedad <JkMount _mountpoint_ _worker_> donde mountpoint hace referencia a la expresión regular y worker al nombre del tomcat, por ejemplo, si queremos que todas las JSP y Servlet los procese nuestro worker router, haremos
JkMount /*.jsp router cluster1
JkMount /*servlet* cluster1
Por lo tanto, nuestro virtualhost deberá quedar así -ten en cuenta que es un ejemplo-
################################################
## WWW.TEST.COM
################################################
<VirtualHost *:80>
  JkMount /*.jsp cluster1
  JkMount /*servlet* cluster1
</VirtualHost>
Finalización de proceso
Ya tenemos configurado el sistema, sólo nos queda iniciar el Tomcat y el Apache, para probar que todo está como queremos.

Conclusión
En esta ocasión hemos visto cómo podemos poner un servidor Apache HTTPD haciendo de frontend de Tomcat y, esto nos va a permitir utilizar -por ejemplo- mod_rewrite para simular URL estáticas, además de proporcionarnos un LoadBalance que nos permitirá escalar nuestros aplicativos de forma sencilla.

Sin embargo, todavía esta configuración no es para ir a producción ya que no hemos tratado en ningún caso el uso de recursos, cargas, ... y, debemos separar las capas para establecer un punto de entrada (DMZ) el cual tengo un acceso muy controlado -utilizando IPFilter-

En la próxima entrega ya sí que veremos cómo establecer una configuración de producción -ahora que tenemos las bases- y veremos cómo utilizar la tecnología de zonas para encapsular nuestros servicios y hacerlos mucho más seguros.


<< Instalación de Apache Tomcat "Stand Alone"

Referencias

No hay comentarios:

Publicar un comentario en la entrada