Our goto server for Enterprise J2EE apps is Tomcat. Frequently we come across the requirement of deploying multiple web applications on the same Tomcat and map different subdomains to each web app.

For example,
<pre>crm.mydomain.com to an app deployed in webapps/crm

mobilerp.mydomain.com to an app deployed in webapps/erp</pre>

We usually do this with virtual host facility available in Tomcat.

<pre><Host name="crm" appBase="webapps">
    <Context path="" docBase="crm/"/>

<Host name="erp" appBase="webapps">
  <Context path="" docBase="erp/"/>

Now if you setup your DNS with the 2 subdomain entries, the sub-domains will be forwarded to the appropriate webapps by Tomcat.

Apache mod_jk:

We usually deploy Tomcat in a cluster in production using Apache and mod_jk. We need to do the following for that:

<pre><VirtualHost crm.mydomain.com:80>
    ServerName crm.mydomain.com
    JkMount / tomcat
    JkMount /* tomcat

<VirtualHost erp.mydomain.com:80>
    ServerName erp.mydomain.com
    JkMount / tomcat
    JkMount /* tomcat

Ofcourse this is http. For https we do our usual SSL steps. Your worker.properties will look something like this:

<pre>worker.list= tomcat,status


worker.tomcat.sticky_session = 1


Note: If after all this configuration, all sub domain still get redirected to the default web app, make the following change:

<pre><Host name="crm.mydomain.com" appBase="webapps">
   <Context path="" docBase="crm/"/>

<Host name="erp.mydomain.com" appBase="webapps">
   <Context path="" docBase="erp/"/>

This is because mod_jk will forward the domain name as is.

Lakshmisri Gopalan

Have something to add to the conversation? We’re all ears!

Leave a Reply