Anuncios categorizados en 'host'

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

Como configurar distintos VirtualHost para desarrollo

¿Cómo poder configurar X VirtualHost en tu apache a la hora de desarrollar?

Quizás para muchos no es la solución más óptima pero a mí me ha ayudado en la fase de desarrollo y más cuando estamos hablando de tener más de un frente abierto. Se entiende como frente aquella Web que te pide un amigo, familiar, etc.

Mi estrategia de desarrollo es la siguiente:

  1. Crear una carpeta para general donde irán ubicados los nuevos desarrollos.
  2. Para cada desarrollo habrá una carpeta.
  3. Abrimos el archivo httpd.conf y deberás cambiar algunas líneas de configuración:

ServerName <host de la máquina, por defecto localhost>:80

DocumentRoot “<ruta donde tienes ubicados los desarrollos>”

<Directory “<ruta donde tienes ubicados los desarrollos>“>

Finalmente crearemos tantos VirtualHosts como carpetas de desarrollo tengamos:

NameVirtualHost *:80

<VirtualHost *:80>
ServerName <url_local> (Ejemplo: local.desarrollo1.com)
ServerAlias 127.0.0.1
DocumentRoot <ruta de la carpeta de desarrollo1>
</VirtualHost>

<VirtualHost *:80>
ServerName <url_local> (Ejemplo: local.desarrollo2.com)
ServerAlias 127.0.0.1
DocumentRoot <ruta de la carpeta de desarrollo2>
</VirtualHost>

.
.
.

Una vez configurado todos los VirtualHost necesarios, únicamente debes cambiar tu archivo hosts y añadir tus nuevos VirtualHosts:

127.0.0.1 local.desarrollo1.com
127.0.0.1 local.desarrollo2.com
127.0.0.1 local.desarrollo3.com
127.0.0.1 local.desarrollo4.com
.
.

Recordar después de reiniciar el servidor Apache y si teneis el navegador Explorer, abierto, deberéis reiniciarlo.