Problem description: You want to server multiple web applications with one Tomcat instance. The brute force variant is to just “rewrite” or ProxyPass the request from e.g. www.myhost.com to the local tomcat with localhost:8080/myhost. But this leads to context urls of ressources in the served html pages. You can either deploy you webapp in the ROOT context (but there is just ONE ROOT context, so this does not work). So let us use virtual hosts on both, the apache webserver and the tomcat servlet container.

create a app location in $CATALINA_HOME
mkdir www.your-server-name.net

deploy the webapp in ROOT context

edit server.xml according
http://confluence.atlassian.com/display/DOC/Guide+to+using+Apache+Tomcat%27s+Virtual+Hosts
http://tomcat.apache.org/tomcat-6.0-doc/

in Tomcat server.xml

<Engine name=“Catalina” defaultHost=“www.internal.your-server-name.net”>
     
<Host name=“www.internal.your-server-name.net” appBase=“www.your-server-name.net”>
     
</Host>
</Engine>

edit Apache config according:

In Apache conf
http://confluence.atlassian.com/display/DOC/Using+Apache+with+virtual+hosts+and+mod_proxy

<VirtualHost *>
   
ServerName
www.your-server-name.net
      
ProxyRequests Off
   
<Proxy *>
       
Order deny,allow
       
Allow from all
   
</Proxy>
    ProxyPass / http://www.internal.your-server-name.net:8080/
   
ProxyPassReverse / http://www.internal.your-server-name.net:8080/
   
<Location />
       
Order allow,deny
       
Allow from all
   
</Location>
</VirtualHost>

and in /etc/hosts

127.0.0.1   localhost  www.internal.your-server-name.net

restart tomcat
restart apache

that’s it :-)

Interested in Cloud or Chef Trainings? Have a look at our Commandemy Trainings page. Need help migrating to the cloud? Check out Infralovers.

comments powered by Disqus
Blog Tags