Before integrating Resin with Apache, it is valuable to configure Resin as a
standalone server, especially with more
complicated setups such as those involving virtual hosts. Doing so isolates
the steps and makes troubleshooting easier.
Many users find that the performance, flexibility, and features of Resin
make Resin a desirable replacement for Apache.
When used with Apache, Resin serves JSPs and Servlets and Apache serves
static content like html and images. Apache is a frontend server, it handles
the request from the browser. Resin's mod_caucho plugin integrates
with Apache, it dispatches requests for JSPs and Servlets to one or more
backend Resin servers.
mod_caucho queries the backend server to distinguish the URLs going to Resin
from the URLs handled by Apache. The backend server uses the
<servlet-mapping> directives to decide which URLs to send. Also, any *.war
file automatically gets all its URLs. Other URLs stay with Apache.
Resin needs Apache 1.3.x or greater and DSO support.
To configure Resin with Apache, you must follow the following steps:
Set up environment
Restart Apache and start the backend Resin server
You need a version of Apache with DSO support enabled. Apache has
full documentation at their website.
To check if your apache has DSO support, you can check for
mod_so.c in your your httpd
unix> /usr/local/apache/bin/httpd -l
Many distributions, e.g. Red Hat Linux, will have Apache preinstalled.
However, because the standard distribution has files all over the
place, some people prefer to recompile Apache from scratch.
Once you untar Apache, build it like:
unix> ./configure --prefix=/usr/local/apache --enable-module=so
unix> make install
Solaris versions of Apache may need additional flags, otherwise
you'll get some linking errors when trying to load Resin. You may need
to refer to the Apache documentation if you get linking errors. Here's an
example configuration on Solaris:
To compile and install mod_caucho on Unix, you'll need to run
Resin's configure and then make. This step will create
mod_caucho.so and put it in the Apache module directory. Usually,
mod_caucho.so will end up in /usr/local/apache/libexec/mod_caucho.so.
If you know where your apxs executable is, you can use --with-apxs.
apxs is a little Perl script that the Apache configuration
makes. It lets modules like Resin know how all the Apache directories
are configured. It is generally in /usr/local/apache/bin/apxs or
/usr/sbin/apxs. It's usually easiest to use --with-apxs so you don't
need to worry where all the Apache directories are.
unix> ./configure --with-apxs=/usr/local/apache/bin/apxs
Even if you don't know where apxs is, the configure script
can often find it:
unix> ./configure --with-apxs
As an alternative to --with-apxs, if you've compiled Apache yourself,
or if you have a simple configuration, you can generally just point to
the Apache directory:
unix> ./configure --with-apache=/usr/local/apache
unix> make install
The previous --with-apxs or --with-apache should cover most
configurations. For some unusual configurations, you can have finer control
over each directory with the following arguments to ./configure.
In general, you should use --with-apache or --with-apxs, but the other
variables are there if you know what you're doing.
The Apache root directory.
Pointer to the Apache extension script
The Apache include directory
The Apache module directory
The Apache config file
If you don't already have Java installed, you'll need to download a
JDK and set some environment variables.
Here's a typical environment that you might put in ~/.profile or
# Java Location
# Resin location (optional). Usually Resin can figure this out.
# If you're using additional class libraries, you'll need to put them
# in the classpath.
The setup.exe program installs the mod_caucho.dll
plugin for any Apache it finds, and modifies the Apache httpd.conf file.
The httpd.conf file is also easily modified manually:
The resin.conf and the layout of your webapps should match the
layout that Apache expects. The mapping of urls to filesystem locations
should be consistent between Apache and the backend Resin server.
The default resin.conf looks in
for JSP files and
for servlets and java source files. To tell Resin
to use Apache's document area, you configure an explicit
web-app with the appropriate document-directory:
Now you need to start the backend Resin server. Starting Resin is the same
with Apache or standalone. See the httpd page
for a detailed description.
Resin 3.0.2-beta (built Mon Aug 4 09:26:44 PDT 2003)
Copyright(c) 1998-2003 Caucho Technology. All rights reserved.
Starting Resin on Mon, 04 Aug 2003 09:43:39 -0700 (PDT)
[09:43:40.664] Loaded Socket JNI library.
[09:43:40.664] http listening to *:8080
[09:43:40.664] ServletServer starting
[09:43:40.879] hmux listening to *:6802
[09:43:41.073] Host starting
[09:43:41.446] Application[http://localhost:8080/resin-doc] starting
[09:43:41.496] Application[http://localhost:8080] starting
Resin will print every port it's listening to. In the above example,
Resin has an http listener on port 8080 and an srun listener on port 6802
(using its custom `hmux' protocol). mod_caucho establishes connections to
Resin using port 6802, and a web browser can connect using port 8080. Usually
the 8080 port will be unused, because web browsers will make requests to Apache,
these requests get dispatched to Resin as needed by mod_caucho. A Resin
configured http listener on port 8080 is a useful debugging tool, it allows you
to bypass Apache and make a request straight to Resin.
The following snippet shows the <http> and <srun>
configuration for the above example.
The ResinConfigServer is used to tell mod_caucho how to contact
the backend Resin server. The backend Resin server tell's mod_caucho which urls
should be dispatched.
Specifies the Resin JVM at host:port as a configuration server.
caucho-status is optional and probably should be avoided in
a production site. It lets you ask the Caucho Apache module about it's
configuration, and the status of the backend server(s), valuable for
After any change to httpd.conf, restart Apache. Now browse
You can also dispatch to Resin directly from the httpd.conf. Instead of
relying on the ResinConfigServer directive to determine which url's to dispatch
to the backend server, Apache handler's are used to specify the url's to
mod_caucho recognizes cluster configurations for load balancing.
Requests are distributed to all machines in the cluster, all
requests in a session will go to the same host, and if one host goes down,
Resin will send the request to the next available machine.
Optional backup machines only receive requests if all of the primaries are
mod_caucho only needs to know about one of the backend servers. It will query
that backend server, and learn about all of the other members of the cluster.
ResinConfigServer 192.168.0.11 6802
mod_caucho keeps a local cache of the configuration information, so if the
backend server becomes unavailable then the cached configuration will be used
until the backend server becomes available again.
The httpd.conf file can also specify more than one backend server, when
mod_caucho checks for configuration updates, it will check each in turn, and
only if none of them are available will it use the local cached copy.