Sunday, March 3, 2013

How do I redirect from Apache to Tomcat?


I'm working on my first Java site. I'm running Apache Tomcat on port 8080, and Apache HTTPD on port 80. The current URL that I can access the site at is (for example) 123.4.5.6:8080. I want to remove the port number from the URL before I point the domain at the new IP.
At the moment I am only using Apache for phpmyadmin, however I plan on using it for CGI scripts and other stuff once I figure out mod_jk etc... So I don't want to change Tomcat's port to 80 and turn off Apache.
I hope this makes sense.

The correct way to do things is to leave Apache at 80 and Tomcat at 8080 and use a plug in (preferably mod_proxy) to proxy Tomcat from Apache. mod_proxy would only take you 10 minutes to set up.
This how-to is very simple to follow.
I'd recommend this too - best not have your JVM running as root unless you've got some other way of allowing it to bind to port 80.

mod_jk allows you to not run as root and still use port 80 to serve requests through Apache. – Mike
@kgiannakakis: do you prefer this over mod_jk?
mod_proxy is a newer module and is considered to be better than mod_jk. It is only supported from Apache's version 2.2 onwards. I personally have only used mod_proxy.
The usual way this is done, as you already mentioned, is to use mod_jk from Apache HTTPD to forward that content that you want to be processed by Tomcat.
There is a Quick HowTo at tomcat.apache.org. You need to do the following:
  • Copy mod_jk.so into the appropriate modules directory for Apache HTTPD.
  • Create a configuration file workers.properties
  • In Apache HTTPD's httpd.conf, add a section to configure mod_jk.
  • Ensure that Tomcat is configured to accept the mod_jk protocol, which is usually on port 8009.
The lines in httpd.conf with JkMount:
JkMount  /examples/* worker1
tell Apache HTTPD which requests are to be forwarded to Tomcat.

Both the helpful answers above are good, but I much prefer mod_proxy over mod_jk. There's no extra installation to do for mod_proxy, unlike mod_jk, and the setup is much easier. mod_jk gives you more control over detailed tuning of Tomcat parameters, but if you just want a simple redirect from Apache to Tomcat, mod_proxy is the way to go.

If you want static content to be served by Apache instead of Tomcat you should use mod_jk :http://tomcat.apache.org/tomcat-6.0-doc/proxy-howto.html
And what about SSL - if we want Apache to handle HTTPS, because it is faster then java/Tomcat?



No comments: