Virtual Hosts with JBoss AS

    "Virtual Hosts" is a method to serve requests for multiple host names - i.e., www.mycompany.com and www.myothercompany.com can both point to a single IP address.

     

    In this article you will find some examples of how to set up virtual hosts for different JBoss AS versions.

     


    JBoss AS 7

    For virtual hosts configuration of JBoss AS 7, see Virtual Hosts with JBoss AS 7.

    JBoss AS 5

     

    If you want to set up a virtual host for your web app, create or modify the WEB-INF/jboss-web.xml to contain the highlighted line as follows:

     

    your-app.war/WEB-INF/jboss-web.xml

    <jboss-web>
       <virtual-host>www.mycompany.com</virtual-host>
       <virtual-host>www.myothercompany.com</virtual-host>
    </jboss-web>

     

    The following example shows a vhost configuration for the jmx-console.war for jboss-5.0.

    jbossweb.sar/server.xml

    <Server>
       <Service name="jboss.web">
    
          <!-- A HTTP/1.1 Connector on port 8080 -->
          <Connector protocol="HTTP/1.1" port="8080" address="${jboss.bind.address}" 
                   connectionTimeout="20000" redirectPort="8443" ></Connector>
    
          <Engine name="jboss.web" defaultHost="localhost">
    ...
             <Host name="localhost"> 
    ...
                <Valve className="org.jboss.web.tomcat.service.jca.CachedConnectionValve"
                    cachedConnectionManagerObjectName="jboss.jca:service=CachedConnectionManager"
                    transactionManagerObjectName="jboss:service=TransactionManager" ></Valve>
             </Host>
    
             <Host name="loopback">
                <Alias>loopback-120</Alias>
                <Valve className="org.jboss.web.tomcat.service.jca.CachedConnectionValve"
                    cachedConnectionManagerObjectName="jboss.jca:service=CachedConnectionManager"
                    transactionManagerObjectName="jboss:service=TransactionManager" ></Valve>
             </Host>
        </Engine>
      </Service>
    </Server>
    

     

     

    jmx-console.war/WEB-INF/jboss-web.xml

    <jboss-web>
       <!-- Uncomment the security-domain to enable security. You will
          need to edit the htmladaptor login configuration to setup the
          login modules used to authentication users.
          <security-domain>java:/jaas/jmx-console</security-domain>
    
       -->
       <virtual-host>loopback</virtual-host>
    </jboss-web>
    

     


    JBoss 4.0.2

    This example shows a vhost configuration for the jmx-console.war for jboss-4.0.2.

     

    jbossweb-tomcat55.sar/server.xml

    <Server>
       <Service name="jboss.web"
          className="org.jboss.web.tomcat.tc5.StandardService">
    
          <!-- A HTTP/1.1 Connector on port 8080 -->
          <Connector port="8080" address="${jboss.bind.address}"
             maxThreads="250" strategy="lf" maxHttpHeaderSize="8192"
             minSpareThreads="200" maxSpareThreads="250" emptySessionPath="true" 
             enableLookups="false" redirectPort="8443" acceptCount="100"
             connectionTimeout="20000" disableUploadTimeout="true"></Connector>
    
          <Engine name="jboss.web" defaultHost="localhost">
    ...
             <Host name="localhost"
                autoDeploy="false" deployOnStartup="false" deployXML="false">
             </Host>
    
             <Host name="loopback"
                autoDeploy="false" deployOnStartup="false" deployXML="false">
                <Alias>loopback-120</Alias>
                <Valve className="org.apache.catalina.valves.AccessLogValve"
                   prefix="loopback-120-" suffix=".log"
                   pattern="common" directory="${jboss.server.home.dir}/log"></Valve>
             </Host>
        </Engine>
      </Service>
    </Server>
    

     

     

    jmx-console.war/WEB-INF/jboss-web.xml

    <jboss-web>
       <!-- Uncomment the security-domain to enable security. You will
          need to edit the htmladaptor login configuration to setup the
          login modules used to authentication users.
          <security-domain>java:/jaas/jmx-console</security-domain>
       -->
       <virtual-host>loopback</virtual-host>
    </jboss-web>
    

     


    JBoss 3.2.3

    As described in the admin/devl guide, do the following.

     

    Step 1: Define the hosts in the jbossweb-tomcat41.sar/META-INF/jboss-service.xml Config attribute fragment:

     

          <attribute name="Config">
             <Server>
                <Service name="JBoss-Tomcat">
                   <Engine name="MainEngine" defaultHost="vhost1">
                      <Logger className="org.jboss.web.tomcat.Log4jLogger"
                         verbosityLevel="debug" category="org.jboss.web.localhost.Engine"></Logger>
    
                      <Host name="vhost1">
                         <Alias>vhost1.starkinternational.com</Alias>
    
                         <Valve className="org.apache.catalina.valves.AccessLogValve"
                            prefix="vhost1" suffix=".log"
                            pattern="common" directory="${jboss.server.home.dir}/log"></Valve>
                         <Valve className="org.jboss.web.tomcat.security.SecurityAssociationValve"></Valve>
                         <!-- Default context parameters -->
                         <DefaultContext cookies="true" crossContext="true" override="true"></DefaultContext>
                      </Host>
    
                      <Host name="vhost2">
                         <Alias>vhost2.starkinternational.com</Alias>
    
                         <!-- Access logger -->
                         <Valve className="org.apache.catalina.valves.AccessLogValve"
                            prefix="vhost2" suffix=".log"
                            pattern="common" directory="${jboss.server.home.dir}/log"></Valve>
                         <Valve className="org.jboss.web.tomcat.security.SecurityAssociationValve"></Valve>
                         <!-- Default context parameters -->
                         <DefaultContext cookies="true" crossContext="true" override="true"></DefaultContext>
                      </Host>
                   </Engine>
    
                   <!-- A HTTP/1.1 Connector on port 8080 -->
                   <Connector className="org.apache.coyote.tomcat4.CoyoteConnector"
                      address="" port="8080" minProcessors="5"
                      maxProcessors="100" enableLookups="true" acceptCount="10" debug="0"
                      connectionTimeout="20000" useURIValidationHack="false"></Connector>
                </Service>
             </server>
          </attribute>
    

     

    Step2: Define the Host to which the web app should be deployed using the WEB-INF/jboss-web.xml descriptor virtual-host element:

     

    <jboss-web>
        <!-- Deploy this war to vhost2 -->
       <virtual-host>vhost2.starkinternational.com</virtual-host>
    </jboss-web>
    

     


    JBoss 3.2.4

    Beginning with 3.2.4RC2 where Tomcat5 is the default web container, the Host settings are in the standard tomcat server.xml file.

    jbossweb-tomcat50.sar/server.xml

     

    <Server>
      <Service name="jboss.web">
    
        <!-- A HTTP/1.1 Connector on port 8080 -->
        <Connector port="8080" address="${jboss.bind.address}"
             maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
             enableLookups="false" redirectPort="8443" acceptCount="100"
             connectionTimeout="20000" disableUploadTimeout="true" ></Connector>
    
        <Engine name="jboss.web" defaultHost="localhost">
    
          <Logger className="org.jboss.web.tomcat.Log4jLogger"
              verbosityLevel="DEBUG"
              category="org.jboss.web.localhost.Engine"></Logger>
    
          <Host name="localhost" autoDeploy="false">
    ...
            <!-- Default context parameters -->
            <DefaultContext cookies="true" crossContext="true" override="true" ></DefaultContext>
          </Host>
    
          <Host name="vhost1">
             <Alias>vhost1.mydot.com</Alias>
             <Alias>vhost1-alias</Alias>
             <Valve className="org.apache.catalina.valves.AccessLogValve"
                prefix="vhost1-" suffix=".log"
                pattern="common" directory="${jboss.server.home.dir}/log"></Valve>
             <Valve className="org.jboss.web.tomcat.security.SecurityAssociationValve"></Valve>
             <!-- Default context parameters -->
             <DefaultContext cookies="true" crossContext="true" override="true"></DefaultContext>
          </Host>
    
          <Host name="vhost2">
             <Alias>vhost2.mydot.com</Alias>
             <Alias>vhost2-alias</Alias>
             <Valve className="org.apache.catalina.valves.AccessLogValve"
                prefix="vhost2-" suffix=".log"
                pattern="common" directory="${jboss.server.home.dir}/log"></Valve>
             <Valve className="org.jboss.web.tomcat.security.SecurityAssociationValve"></Valve>
             <!-- Default context parameters -->
             <DefaultContext cookies="true" crossContext="true" override="true"></DefaultContext>
          </Host>
        </Engine>
      </Service>
    </Server>
    

     

    Also, a single war can be deployed to mulitple virtual hosts through the jboss-web.xml virtual-host element. To make the jmx-console available on localhost, vhost1 and vhost2, edit the

    jmx-console.war/WEB-INF/jboss-web.xml

    <jboss-web>
       <!-- Uncomment the security-domain to enable security. You will
          need to edit the htmladaptor login configuration to setup the
          login modules used to authentication users.
          <security-domain>java:/jaas/jmx-console</security-domain>
       -->
       <virtual-host>localhost</virtual-host>
       <virtual-host>vhost1.mydot.com</virtual-host>
       <virtual-host>vhost2-alias</virtual-host>
    </jboss-web>