"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>
Comments