Monday, April 12, 2010

Alojando múltiples dominios en JBoss (Hosting multiple domains in JBoss)

 Esto es una situación que creo que es común, sobretodo en entornos corporativos. Voy a explicar los pasos necesarios y las fuentes utilizadas para conseguirlo (espero que se entienda xD)

Tenemos 2 instancias de Jboss y en cada máquina hay 2 interfaces: Servicio y Operación y Mantenimiento (O&M) por lo tanto, necesitábamos tener expuestos por la interfaz de servicio los WebServices que se usarán por los clientes y el resto (portal de administración, jmx-console, etc.) por el de O&M. A parte es interesante evitar modificar el máximo número de ficheros de configuración, sobretodo de las aplicaciones de Jboss.


En el enlace siguiente he visto toda la información que hace falta:

http://www.fusioncube.net/index.php/hosting-multiple-domains-with-jboss


Aquí se puede entrar en más detalle:

http://tomcat.apache.org/tomcat-5.5-doc/config/


Partimos de que JBoss AS se a arrancado en el puerto 0.0.0.0 para que escuche por todos los interfaces.


Ya que las aplicaciones Web se despliegan en la instancia de tomcat que incluye jboss (jboss-web.deployer) es ahí donde configuraremos el fichero server.xml.


Existen 3 partes importantes en este fichero:


1º Definición del Engine y del default host. El defaultHost debe ser un vhost válido definido dentro del Engine y será donde se desplegarán todas las aplicaciones que no tengan un virtual-host definido.
<Engine name="jboss.web" defaultHost="localhost">
2º Localhost. Ya existe en la configuración por defecto y le añadimos los alias para que todo lo que entre por localhost o por uno de sus alias irá a las aplicaciones que no tengan configurado un virtual-host en su jboss-web.xml (puesto que es el defaultHost).
<Host name="localhost" autoDeploy="false" deployOnStartup="false" deployXML="false"
           configClass="org.jboss.web.tomcat.security.config.JBossContextConfig" >
    <Alias>myHostname_om</Alias>
    <Alias>172.1.3.137</Alias>
    <Valve className="org.jboss.web.tomcat.service.jca.CachedConnectionValve"
        cachedConnectionManagerObjectName="jboss.jca:service=CachedConnectionManager"
        transactionManagerObjectName="jboss:service=TransactionManager" ></Valve> </Host>
3º Definición de cada virtual host extra. Un virtual host permite separar las aplicaciones web y aplicar distintas configuraciones. En este caso definimos uno para la lógica de servicio con 2 alias, uno para resolver por hostname y otro para resolver por IP. El name del host puede ser tanto una ip como un hostname, pero en este caso para llamar al host de una forma genérica se le ha llamado vhost_ls.
<Host name="vhost_ls" autoDeploy="false" deployOnStartup="false" deployXML="false"
           configClass="org.jboss.web.tomcat.security.config.JBossContextConfig">
    <Alias>myHostname_ls</Alias>
    <Alias>192.168.2.137</Alias>
    <Valve className="org.jboss.web.tomcat.service.jca.CachedConnectionValve"
        cachedConnectionManagerObjectName="jboss.jca:service=CachedConnectionManager"
        transactionManagerObjectName="jboss:service=TransactionManager" ></Valve> </Host>
Una vez configurado el vhost se modificará la configuración de cada aplicación web que queremos que vaya al vhost_ls. Editando su fichero ./WEB-INF/jboss-web.xml, añadiremos lo siguiente (funciona tanto para el hostname como la ip):

<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>       
    <virtual-host>myHostname_ls</virtual-host>
    <context-root>/</context-root>
</jboss-web>


Esto es lo que yo he configurado en nuestro entorno. En teoría, quedaría mejor tener el vHost-localhost el vHost-lógicaServicio y el vHost-O&M cada uno con sus alias, incluso quitar localhost, así solo poder atacar por esos dos, poniendo como defaultHost el de O&M, pero en la práctica no he sido capaz de hacerlo funcionar, así que si alguien lo intenta y lo consigue que me avise.


Un saludo y espero que os sea de ayuda.

Discolo

No comments: