You are on page 1of 21

CIS 5930-04 Spring 2001

Special Topic: Apache and Tomcat


http://aspen.csit.fsu.edu/it1spring01
Instructors: Geoffrey Fox , Bryan Carpenter
Computational Science and Information Technology
Florida State University

dbc@csit.fsu.edu

The Apache Project

The Apache Project is a collaborative software


development effort.

Its goal is to produce a robust, commercial-grade, free


HTTP server.

The project is run by volunteersthe Apache Group


communicating and planning through the Internet.

Organizational support is provided by the Apache


Software Foundation.

Home page:
http://apache.org

dbc@csit.fsu.edu

Foundation Myths

Long ago, when the Web was young, the most famous
Web server in the World was called the NCSA server.
It was developed by Rob McCool at the National Center
for Supercomputing Applications.
McCool left NCSA in 1994, and development of the
public-domain NCSA server temporarily faltered.
At that time, a group of eight powerful Webmasters had
developed their own extensions and bug-fixes for the
NCSA server.
The founding Webmastersbrought together by email
pooled their updates.
Apache came into being early in 1995. It was a series of
patches to the NCSA code.
A year later, Apache was the most popular Web server.
dbc@csit.fsu.edu
3

Apache and Tomcat

This lecture is mainly a how-to guide to installing the


Apache server and integrating it with the current
version of Tomcat.
This allows a site primarily served by Apache to
seamlessly make servlet and JSP content available.

dbc@csit.fsu.edu

Obtaining Apache for Linux

Go to httpd.apache.org and follow the download link.

Negotiate folders through to binaries/linux.


Or go directly to httpd.apache.org/dist/binaries/linux

At the time of writing, the relevant file was


apache_1.3.14-i686-whatever-linux2.tar.gz

dbc@csit.fsu.edu

Installing the Apache Server

Unpack the distribution:


gunzip -c apache_1.3.14-i686-whatever-linux2.tar.gz | tar xvf You can do this step anywhere, e.g. in the /tmp directory.

Go into the created apache_1.3.4 directory and run


./install-bindist.sh
I will assume you are logged in as root.
It should be straightforward to install as an ordinary user, but
you need to ensure the Apache home directory is set to
somewhere in your own home directory. Read the
INSTALL.bindist file.

dbc@csit.fsu.edu

The Installation Script

If successful, you will probably see a message something


like:
Installing binary distribution for platform i686-whatever-linux2
into directory /usr/local/apache ...
Ready.
+--------------------------------------------------------+
| You now have successfully installed the Apache 1.3.14 |
| HTTP server. To verify that Apache actually works
|
| correctly you should first check the (initially
|
| created or preserved) configuration files:
|
|
|
|
/usr/local/apache/conf/httpd.conf
|
|
| You should then be able to immediately fire up
|
| Apache the first time by running:
|
|
|
|
/usr/local/apache/bin/apachectl start
|
|
| Thanks for using Apache.
The Apache Group
|
|
http://www.apache.org/ |
+--------------------------------------------------------+

dbc@csit.fsu.edu

Customize the Configuration File

If you wish, edit the file


/usr/local/apache/conf/httpd.conf

The most likely changes you will need to make at this


stage are to the document root.
For example I changed the lines:
to
and
to

DocumentRoot /usr/local/apache/htdocs
DocumentRoot /home/httpd/html
<Directory /usr/local/apache/htdocs>
<Directory /home/httpd/html>

If you are not installing as root, you will also need to


change the line Port 80 to specify a port above 1024.
dbc@csit.fsu.edu

Starting and Stopping the Server

As the installation script said, you can start the httpd


server program by the command:
/usr/local/apache/bin/apachectl start

Logically enough, you can stop it by:


/usr/local/apache/bin/apachectl stop

dbc@csit.fsu.edu

Tomcat vs. Apache

The Apache Web server

is faster than Tomcat when it comes to static pages,


is more configurable than Tomcat,
is more robust than Tomcat, and
it supports CGI scripts, Server API modules, Perl, PHP, etc.

Hence for real world sites, Apache would generally be a


better choice than Tomcat, except that. . .
In itself, Apache doesnt support Servlets or JavaServer Pages!

dbc@csit.fsu.edu

10

Integrating Apache and Tomcat

The solution, of course, is to allow the two Web servers


to work together.
The Apache server will be the principal server, dealing
with static documents.
Or dynamic documents generated by any of the other
technologies mentioned in the previous slide.

Apache will forward requests for Servlets or JavaServer


Pages to Tomcat.
The approach we describe here is what was called the
out-of-process servlet container the lectures on
Servlets.

dbc@csit.fsu.edu

11

Out-of-Process Servlet Container

Servlet
Request
Browser

80

Apache

Servlet
Request

AJP

HTTP

Client

Tomcat

dbc@csit.fsu.edu

8007

Server

12

The Adapter

For Apache to communicate with Tomcat, and forward


requests as necessary, it needs some extra softwarean
adapter.
An adapter will be implemented as an Apache module.
An Apache module is a piece of code that can be optionally
linked in to (or left out of) the main server code.
Non-standard, plug-in, modules will typically be shared-object
libraries (DLLs under Windows).
These live in a directory called /usr/local/apache/libexec.

Apache modules generally have names of the form


mod_XXXX
For example, mod_perl.

There are two Tomcat adapter modules in common use:


mod_jserv and mod_jk.

dbc@csit.fsu.edu

13

mod_jk

mod_jk is a new Tomcat-Apache plug-in that handles


communication between Tomcat and Apache.
It replaces the older mod_jserv.

For more information, see the file doc/mod_jk-howto.html


in the Tomcat release, which is also online at
jakarta.apache.org/tomcat/jakarta-tomcat/src/doc/mod_jk-howto.html

For now the only way to obtain the mod_jk library for
Linux seems to be to build it yourself. The sources are
included in the source release of Tomcat.

dbc@csit.fsu.edu

14

Obtaining mod_jk for Linux

Go to jakarta.apache.org and follow the Source Code


link.

Get the release build of Tomcat (currently 3.2). At the


time of writing, the relevant file is
jakarta-tomcat-3.2-src.tar.gz

Unpack the distribution:


gunzip -c jakarta-tomcat-3.2-src.tar.gz | tar xvf You can do this anywhere, e.g. in /tmp.
I do not particularly recommend you try to rebuild the Tomcat
server itself from this release: it is much easier just to download
the compiled, binary version of the server, as described in the
lectures on Servlets.

dbc@csit.fsu.edu

15

Building mod_jk

Go to the directory
jakarta-tomcat-3.2-src/src/native/apache1.3

If necessary, edit the definition of the macro APXS in


Makefile.linux so that it refers to the apxs command in
the Apache release, probably /usr/local/apache/bin/apxs.
Build the library:
make -f Makefile.linux

Install the plug-in in the Apache libexec/ directory, e.g.:


cp mod_jk.so /usr/local/apache/libexec

dbc@csit.fsu.edu

16

Updating the Apache Configuration

In the first instance (until you need to do something


clever) this is very easy, because whenever the Tomcat
server is run, it generates a self-describing include file.
This file contains a series of Apache configuration-file commands.

The include file is in


jakarta-tomcat-X.X/conf/mod_jk.conf-auto

In my case I added the line


include /home/users/dbc/jakarta-tomcat-3.2/conf/mod_jk.conf-auto

to the end of the file /usr/local/apache/conf/httpd.conf.

dbc@csit.fsu.edu

17

Fragment of the File mod_jk.conf-auto


#########################################################
# Auto configuration for the /dbc context starts.
#########################################################
# The following line makes apache aware of the location of the /dbc context
Alias /dbc "/home/users/dbc/jakarta-tomcat-3.2/webapps/dbc"
<Directory "/home/users/dbc/jakarta-tomcat-3.2/webapps/dbc">
Options Indexes FollowSymLinks
</Directory>
# The following line mounts all JSP files and the /servlet/ uri to tomcat
JkMount /dbc/servlet/* ajp12
JkMount /dbc/*.jsp ajp12
# The following line prohibits users from directly accessing WEB-INF
<Location "/dbc/WEB-INF/">
AllowOverride None
deny from all
</Location>
# The following line prohibits users from directly accessing META-INF
<Location "/dbc/META-INF/">
AllowOverride None
deny from all
</Location>

dbc@csit.fsu.edu

18

Remarks

Recall these are commands that Tomcat generates to


configure Apache.
As the first comments indicates, these commands relate
to the servlet context called dbc/.
The Alias command causes Apache to generally look in
the Tomcat document directory for URLs with paths that
start /dbc.
This is needed for static documents in the Tomcat directory.

The first JkMount command causes URLs with paths


that match the pattern /dbc/servlet/* to be redirected to
the AJP module (hence the Tomcat server).
The second JkMount command causes URLs with paths
that match the pattern /dbc/*.jsp to be similarly
redirected Tomcat server.
dbc@csit.fsu.edu
19

Configuring Workers

In Tomcat 3.2, the generated include file, jakarta-tomcatX.X/conf/mod_jk.conf-auto has a reference to the file
workers.properties in the same directory. You will probably
have to manually edit this file.
Enclosed comments are fairly self-explanatory. If necessary
change the Java home directory and the path-component
separator (to / rather than \ for Linux).
You may also need to choose one or the other of ajp12 and
ajp13, and comment out references to the other.
I went with ajp12. ajp13 is supposed to be an improved protocol, but I
know and love ajp12.

Set the port number for your AJP connector, as specified in


server.xml.
See jakarta-tomcat-X.X/doc/Tomcat-Workers-HowTo.html.

dbc@csit.fsu.edu

20

Start the Apache Server. . .

In principle, we are done. Restart the Apache server.


With the default configuration, URLs with paths in
Tomcat servlet contexts that start /servlet or end with
.jsp are redirected to Tomcat.
Note Apache will directly serve static .html pages, even if they
are in the Tomcat document directory.
Because Apache (unlike Tomcat) runs as user nobody by
default, such files now need to be world readable.

(Apparently) things continue to work across multiple


restarts of Tomcat, even without restarting Apache.
We note however that, according to the FAQ, this is not the case
with AJP13. . .

dbc@csit.fsu.edu

21

You might also like