Integrating Tomcat with Apache
You can configure the Apache web server to forward requests to Tomcat. Thus, you can speak to both servers on ports 80
or 443
and get rid of the :8080
for your Tomcat applications. I’m somehow doing that very often, so here is small how-to for copy&paste purposes.
Install jk
As you might know, while Tomcat is Java stuff Apache is written in C. So in general it’s not that easy to get them talking to each other. The key to achieve an integration is called mod_jk
(see The Apache Tomcat Connector). So first of all you need to install it:
If it is installed you can configure an AJP worker in /etc/libapache2-mod-jk/workers.properties
:
As soon as this is done the bridge is ready to close the gap between Apache and Tomcat.
Configure Tomcat
We need to configure an AJP connector on port 8009
. So open /etc/tomcat7/server.xml
and add another connector next to the other ones:
If you’re lucky there is already such a connector defined in the comments. So just remove the comment…
Configure Apache to speak through jk
Here I’ll show you how to setup a virtual host. For example, copy the following to /etc/apache2/sites-available/012-yourapp.conf
:
Ok, let me shortly explain what I did there.
- Everything that arrives at this vhost gets forwarded to our previously defined AJP worker (line 9)
- I assume your Tomcat webapp is running on
server:8080/YourApp
, therefor I configured a substitution of the URL to insert/YourApp
(line 7). Of course you need to havemod_rewrite
installed and enabled. (You may skip this line if you’re fine with having/YourApp
in all your URLs) - The rest should be clear. The vhost is available at
http://yourapp.yourserver.tld
, as well as athttp://ya.yourserver.tld
(lines 3&4). You can also use SSL, just configure line 1 to listen at*:433
and add the SSL stuff to the body of your vhost. (SSL exmaple)
Afterwards, enable the vhost to populate it:
Give it a try
If this is done just restart everything:
Now Apache forwards all requests to http://yourapp.yourserver.tld
to your Tomcat webapp at http://yourserver.tld:8080/YourApp
.
Leave a comment
There are multiple options to leave a comment:
- send me an email
- submit a comment through the feedback page (anonymously via TOR)
- Fork this repo at GitHub, add your comment to the _data/comments directory and send me a pull request
- Fill the following form and Staticman will automagically create a pull request for you:
4 comments
I use
mod_proxy
for it and configure a reverse proxy. It works fine with Tomcat 6 and Apache, Nginx and HAProxy. If Tomcat talks to Apache via HTTP instead of AJP Connector, then there are some limitations like no domain model clustering and no large packages (>8k)Thanks – I was missing the ajp connector def in mine and the JkMount directive also I had way too much in my workers.properties. So now mission complete : LAMP on raspberry pi …
Nick
Hi, this is JUST what I was looking for, and had great hopes I could finally finish my Apache/Tomcat set up, but despite following your tutorial to the letter (well, almost) I still get an error when I browse to http://web.me.local/sample/ (I didn’t use the Rewrite rule). It is a -
Service Unavailable The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.
…. error.
Any clues? (I have left a connector in my server.xml for port 8080, and I can get to my site using web.me.local:8080/sample/ with no problems)
Thanks!
P.S. Love the anti spam thing!
Hi, this is JUST what I was looking for, and had great hopes I could finally finish my Apache/Tomcat set up, but despite following your tutorial to the letter (well, almost) I still get an error when I browse to http://web.me.local/sample/ (I didn’t use the Rewrite rule). It is a -
Service Unavailable The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.
…. error.
Any clues? (I have left a connector in my server.xml for port 8080, and I can get to my site using web.me.local:8080/sample/ with no problems)
Thanks!
P.S. Love the anti spam thing!