Connecting Apache 2.0.43 to Tomcat 4.1.12
(Using JK Web Server Connector)
Configuring the Connector
The following section will contain instructions for installing Tomcat as a servlet container for Apache 2.0
on UNIX. For example, this will allow Tomcat’s examples, found at http://localhost:8080/examples to execute properly on requests for port 80. (i.e. http://localhost/examples). This also allows Apache to be the
web server that serves up ALL static content for both legacy applications (those in the DocumentRoot) and those included in web applications.
At this point, you should have a working Apache installation serving content on port 80, and a working
Tomcat installation serving HTTP requests on port 8080. (The Tomcat examples included with the Tomcat
installation should work).
These instructions have been tested on Red Hat 8.0 and Solaris 2.8.
The Connector Overview
To connect Apache and Tomcat, you need a connector. My choice, (for reasons explained below) is
As of 9/05/2002, there are 3 to choose from:
mod_jk (AJP13) mod_jk is the older but more stable version, which
supports load balancing and non-standard web
At the time of this writing, this connector would be the
best choice since it has been around for awhile and is
NOTE: There are known bugs when using mod_jk and
Tomcat 4.0.1 or 4.0.2, so you MUST use 4.0.3 or
mod_webapp (WARP) mod_webapp is newer (it first appeared with Tomcat
4.0.x) than mod_jk and still has some bugs.
It has several limitations (no differentiation between
static and dynamic content, so no use for Apache).
Unless you have some other reason for using
mod_webapp, I recommend sticking with mod_jk until
the former reaches satisfactory stability. mod_jk2 Is still fairly new. Would want something a bit more
DSO Support in Apache
Make sure that the version of Apache you have installed has DSO support:
% $APACHE_HOME/bin/httpd -l
If you see “mod_so.c” in the output, DSO support is available. If it's missing, you may have to recompile
or reinstall Apache. (See the chapter in this book for installing Apache)
You have two choices in obtaining the proper mod_jk.so connector library; compiling it from source or simply getting the binary. You can save yourself a tremendous amount of aggravation by simply
downloading the binary you need. Using RedHat 8.0, I could not get the “configure” or the “ant” option to
create the required mod_jk.so file. I had to breakdown and download the binaries.
Binaries can be found on:
Copy the mod_jk.so library to the Apache “modules” directory:
% cp mod_jk.so $APACHE_HOME/modules
% chmod 755 $APACHE_HOME/modules/mod_jk.so
When integrating Tomcat and Apache, we will need to modify the following files:
Tomcat’s main configuration file. Found in $CATALINA_HOME/conf.
Tomcat’s configuration file for setting instances/workers. This can be placed anywhere that
mod_jk has read access.
Tomcat’s configuration file for integration with Apache. Found in
Apache’s main configuration. Found in $APACHE_HOME/conf.
Edit server.xml File
Edit the file $CATALINA_HOME/conf/server.xml as follows
a) Add the following lines immediately after the
b) Locate the entry for “AJP 1.3 Connector”. It will have a default port already defined for port
8009. You can simply do a search for the first occurrence of “8009”.
If you needed to change the port number from 8009 to 8029 (see sections above for Oracle
and Linux 7.x users), make that change for this entry. In most cases (users of RedHat 8.0+)
this will not be necessary.
Realize that the default Apache connector starting with Tomcat 4.x is JK2, not JK.
You will need to comment out the Connector on port 8009 with the className of
Then uncomment the Connector element right below it on port 8009 that has a className of
The element you will want exposed (uncommented) is:
-- Define an AJP 1.3 Connector on port 8009 -->
port="8009" minProcessors="5" maxProcessors="75"
c) After any
d) Locate and change any reference of “localhost” to the value of “ServerName” set in
$APACHE_HOME/conf/httpd.conf file. This will typically be the name of the server
Create “jk” directory
Create the following directory under $CATALINA_HOME/conf :
Create “auto” directory
Create the following directory under $CATALINA_HOME/conf :
Create workers.properties files
In the “jk” directory you just created, create a file called “workers.properties”.
workers.tomcat_home=/u02/app/tomcat workers.java_home=$(JAVA_HOME) ps=/
Bounce the Tomcat Server
Check for and rename the created mod_jk.conf file
After starting the Tomcat server, you should have a generated mod_jk.conf file in the
$CATALINA_HOME/conf/auto directory. Now rename the file mod_jk.conf to
mod_jk_custom.conf and change any of the entries that you want Apache to hand off to the
% cd $CATALINA_HOME/conf/auto
% ls -l
-rw-r--r-- 1 oracle dba 589 Jun 2 21:17 mod_jk.conf
% cp mod_jk.conf mod_jk_custom.conf
Here is an example mod_jk_custom.conf file that changes both the “examples” and “development” web application. As you can see, by default, Tomcat says that all requests for a
particular web application should be handed to the Tomcat instance. (Remember that Tomcat can
also handle static contact like HTML and images). In out case, we ONLY want JSP and Servlets
to be processed by the Tomcat container while static content like HTML and images are being
served by the Apache web server.
########## Auto generated on Fri Dec 06 01:33:31 EST 2002##########
JkMount /examples/*.jsp ajp13 JkMount /examples/servlet/* ajp13 JkMount /tomcat-docs ajp13 JkMount /tomcat-docs/* ajp13 JkMount /ora ajp13 JkMount /ora/* ajp13 JkMount /manager ajp13 JkMount /manager/* ajp13
Edit the httpd.conf file
Add the following lines to the end of the file. This would include any of the Alias’s used to serve
up any static content in your web applications and the configured JkMount directives by
including the mod_jk_custom.conf file.
... # +-----------------------------------------------+ # | EXAMPLES | # +-----------------------------------------------+ # Create an Alias for examples Alias /examples "/u02/app/tomcat/webapps/examples" # Now allow access to this directory by setting # the required Apache directives.
NOTE: If you were not able to create the mod_jk.conf file, you can manually add the Tomcat
directives to your httpd.conf as follows:
a) Add the following to the LoadModule section:
LoadModule jk_module /u02/app/apache/modules/mod_jk.so
b) Add the following to the end of the httpd.conf file:
JkWorkersFile "/u02/app/tomcat/conf/jk/workers.properties" JkLogFile "/u02/app/tomcat/logs/mod_jk.log" JkLogLevel info
Start the Apache HTTP Server
% su -
% /u02/app/apache/bin/apachectl start
Testing the Configuration
Check the standalone Apache Configuration
Check the standalone Tomcat Servlet Container
This will use the HTTP Connector from the Tomcat container to answer the request.
Check the standalone Tomcat Servlet Examples
Check the Tomcat / Apache Integration
Check to see if Apache is serving the static content by using the “examples” web application
This test will confirm that within the “examples” web application, the Apache web server is
answering and handling requests for static content. (Content that is neither JSP or /servlet/*).
If everything is set up correctly, you should see something like the following: