Anuncios categorizados en 'tomcat'

Múltiples Host en Tomcat

Muchas veces nos interesa que el nombre del contexto (Aplicación Web para Tomcat) no aparezca en nuestra Url a la hora de mostrar la aplicación.

Una solución rápida y funcional es sustituir el contexto ROOT de la instalación de Tomcat por nuestra aplicación pero existen varios inconvenientes:

  • Se pierde la aplicación Manager del Tomcat.
  • Si en un futuro se quiere añadir otra aplicación cuyo nombre no se mostrará en la url, deberéis buscar otra solución.

Imaginemos que tenemos una aplicación Web (con 2 idiomas) J2EE bajo Tomcat definida en el Apache de la siguiente manera:

<VirtualHost localhost>

AddDefaultCharset UTF-8
DocumentRoot /apps/www/aplicacion
ServerName www.aplicacion.es
ServerAlias
www.aplicacion.fr

JkMount /* local

TransferLog “C:/apps/logs/access.log”
ErrorLog “C:/apps/logs/error.log”

</VirtualHost>

Como se puede observar existen, como he comentado anteriormente, 2 idiomas (español, francés), mediante el conector mod_jk (JkMount), conectaremos el servidor Apache y Tomcat.

En Tomcat únicamente tendremos una única aplicación:

<TOMCAT_HOME>/webapps/miaplicacion

¿Cómo hacer que los dos dominios, www.aplicacion.fr y www.aplicacion.es apunten al mismo contexto y ocultar su nombre en la url?

Si no se hiciese nada, una de las formas seria, como se ha comentado antes, poner nuestra aplicación bajo el contexto ROOT, pero si más adelante quisiésemos ocultar, en la url, el nombre del contexto de otra aplicación tendríamos un problema.

Para solucionarlo debemos configurar el server.xml (ubicado en: <TOMCAT_HOME>/conf) de la siguiente manera:

<Host name=”localhost” debug=”0″ appBase=”webapps” unpackWARs=”true”>
<Context path=”" docBase=”<TOMCAT_HOME>/webapps/ROOT” debug=”0″ reloadable=”true” />

</Host>

<Host name=”www.aplicacion.es” debug=”0″ appBase=”webapps” unpackWARs=”true”>

<Alias>www.aplicacion.fr</Alias> /* Podemos añadir tantos alias o aplicaciones web queramos */
<Alias>…</Alias>

<Alias>…</Alias>
<Context path=”" docBase=”<TOMCAT_HOME>/webapps/miaplicacion” debug=”0″ reloadable=”true” />

</Host>

De esta forma estamos diciendo al Tomcat que existen 2 dominios pero ambos están compartiendo el mismo contexto, por tanto, el mismo código, y además el contexto ROOT se mantiene operativo. Aunque es aconsejable no mantenerlo en servidor de producción.

Por último tu fichero de host debería contener algo como:

127.0.0.1 www.aplicacion.es
127.0.0.1 www.aplicacion.fr

Instalar Tomcat + Módulo Apache (mod_jk) para Linux

Para poder instalar Tomcat 5.5 hace falta algún requisito como:

Instalar el JDK lo podéis descargar de sun.

Una vez hayas instalado el JDK debes definir la variable JAVA_HOME e indicar la ubicación del JDK.

export JAVA_HOME=<PATH_JDK>
export PATH=$JAVA_HOME/bin:$PATH

Ahora sí podemos instalar el tomcat.

Una vez finalices la descarga del tar.gz tienes que descomprimirlo, al finalizar dicha acción hay que cambiar de usuario y sus permisos, si por defecto estás con un usuario diferente de Tomcat, deberás asignar la ubicación del servidor instalado al usuario tomcat. Para ello habrá que crear un usuario tomcat (adduser tomcat) te pedirá la contraseña <a elegir>.

¿Cómo comprobamos que el Tomcat está bien instalado?

Únicamente deberás arrancarlo mediante <ubicación del tomcat>/bin/catalina.sh start | stop | restart (Es una de las maneras de arrancar, hay varias).

Una vez comprobado que el servidor Tomcat esta arrancado mediante un navegador y poniendo como url (http://<maquina donde haya instalado el tomcat>:8080) y veas que responda, es el momento de instalar el módulo de Apache2 (mod_jk) .

Una vez descargado debes descomprimirlo de la misma manera que Tomcat.

Para la instalación de Apache mod_jk se necesita Apache y Tomcat funcionando.

Creamos un achivo workers.properties, por defecto, en /etc/httpd/conf/workers.properties

workers.tomcat_home=/apps/tomcat
workers.java_home=/apps/java
ps=/
worker.list=status,apj
worker.status.type=status
worker.apj.host=localhost
worker.apj.port=8009
worker.apj.type=ajp13
worker.apj.socket_timeout=5
worker.apj.retries=5
worker.apj.connection_pool_size=1
worker.apj.connection_pool_timeout=40
worker.apj.connect_timeout=5000
worker.apj.reply_timeout=50000
worker.apj.recovery_options=0

Una vez creado y definido el archivo workers.properties debes crear y configurar el archivo mod_jk.conf (por defecto ubicado en: /etc/httpd/conf/mod_jk.conf)

#Carga del mod_jk module (esta línea también puede estar ubicada en el archivo de configuración del apache http.conf)
LoadModule jk_module modules/mod_jk.so

# Ubicación workers.properties
JkWorkersFile /etc/httpd/conf/workers.properties

# Indica la ruta de los logs
JkLogFile <ruta de log>

# Indica el nivel de trazas para el mod_jk [debug/error/info]
JkLogLevel error

Para acabar dentro de tu VirtualHost, definido en el archivo de configuración de apache (httpd.conf), debes indicar lo siguiente:

<VirtualHost *:8080>
ServerName www.tudominio.com
JkMount /* ajp

</VirtualHost>