I just got through setting up Tomcat5.5, Apache2, and mod_jk on a RedHat Enterprise AS4.4 machine at work. In the past, I have done this by compiling each component separately and fingling with config files until it all worked. But I wanted to stick with RedHat-approved RPM’s from the RedHat network to ease updates and patch management, and to allow the organization to have support options.
I had a lot of trouble finding any documentation on how to do this anywhere, so I thought I’d throw it out here for anyone in a similar situation in search of help.
The following are my notes, sprinkled with a little help I got from a RedHat support tech.
First, I had to enable the following channel within the RedHat Network for this system:
–Red Hat Application Server v. 2 (AS v. 4 for i386)
If you don’t have a RHEL license for updating your system, you will need one.
Once those channels were enabled, I installed the following packages using up2date at the command line:
# up2date tomcat5
# up2date tomcat5-webapps
# up2date tomcat5-admin-webapps
# up2date mod_jk-ap20
With the packages installed, I set out to configure a virtual host to pass requests to Tomcat as needed by using the mod_jk connector. The following steps explain how to do this for a web site called example.com using IP address 123.123.123.123. Substitute your domain and IP accordingly.
Step 1. – Add mod_jk to Apache
In /etc/httpd/conf/httpd.conf add this:
LoadModule jk_module modules/mod_jk.so
<ifmodule mod_jk.c>
JkWorkersFile "/etc/httpd/conf/workers.properties"
JkLogFile "/etc/httpd/logs/mod_jk.log"
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
</ifmodule>
That loads the module into Apache, tells apache where the worker is that will handle jsp/servlets, and tells Apache where to record log entries for mod_jk.
Step 2. – create a new file called /etc/httpd/conf/workers.properties and add this to it:
[channel.socket:example.com:8009]
port=8009
host=example.com
[uri:example.com/*.jsp]
worker=ajp13:example.com:8009
Step 3. Create a virtual host in /etc/httpd/conf/httpd.conf like so:
<virtualhost 123.123.123.123:80>
ServerAdmin webmaster@example.com
ServerName www.example.com
DocumentRoot /var/www/html
JkMount /*.jsp ajp13
JkMount /servlet/* ajp13
# Deny direct access to WEB-INF
</virtualhost>
Step 4. Set up Tomcat5 by adding this to /etc/tomcat5/server.xml just before the very last </Engine> tag at the bottom of the document:
<host name="example" appBase="/var/www/html" unpackWARs="true" autoDeploy="true">
<context path="" docBase="" debug="0" reloadable="true"/>
<alias>www.example.com</alias>
<valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="web1_access_log." suffix=".txt" pattern="common" resolveHosts="false"/>
</host>
Still with me? We are almost done.
Step 6. Create a sample jsp file called /var/www/html/test.jsp and add this to it:
Time: < %= new java.util.Date() %>
Step 7. Start up the services
# apachectl start
# service tomcat5 start
Step 8. Try it!
Browse to http://www.example.com/test.jsp
If all went well, you should see the system’s current date and time when you load the web page. Congrats. Hope it works for you!