实现有价值的IT服务
全部博文(709)
分类: 系统运维
2006-04-12 21:44:34
Many users find that the performance, flexibility, and features of Resin make Resin a desirable replacement for Apache. Resin, for example, serves static content as fast or faster than Apache. Unless specific features of Apache are required, consider running Resin as the primary web server.
If you have not yet done so, follow the instructions and get a working installation with Resin as the only web server. This is especially true with more complicated setups such as those involving virtual hosts. Doing so isolates the steps and makes troubleshooting easier.
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 directives to decide which URLs to send. Any *.war file automatically causes Resin to gets all URLs with the corresponding prefix. 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:
You need a version of Apache with DSO support enabled. Apache has full documentation at [] To check if your apache has DSO support, you can check for mod_so.c in your httpd binary:
unix> /usr/local/apache/bin/httpd.exe -l Compiled-in modules: ... mod_so.c ...
Many Unix installations 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 unix> make install
Solaris versions of Apache may need additional flags, otherwise there are 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:
unix> ./configure --prefix=/usr/local/apache \ --enable-rule=SHARED_CORE \ --enable-rule=SHARED_CHAIN \ --enable-module=so \ --enable-module=most \ --enable-shared=max
To compile and install mod_caucho on Unix, you'll need to run Resin's . 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 so you don't need to worry where all the Apache directories are.
unix> ./configure --with-apxs=/usr/local/apache/bin/apxs unix> make
Even if you don't know where apxs is, the configure script can often find it:
unix> ./configure --with-apxs unix> make
As an alternative to --with-apxs, if you've compiled Apache yourself, or if you have a simple configuration, you can generally use to point to the Apache directory:
unix> ./configure --with-apache=/usr/local/apache unix> make 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.
=dir | The Apache root directory. |
=apxs | Pointer to the Apache extension script |
=dir | The Apache include directory |
=dir | The Apache module directory |
=/path/httpd.conf | 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 /etc/profile
# Java Location JAVA_HOME=//jdk1.4 export JAVA_HOME # Resin location (optional). Usually Resin can figure this out. RESIN_HOME=/ /resin-pro-3.0.2 export RESIN_HOME # If you're using additional class libraries, you'll need to put them # in the classpath. CLASSPATH ==
The mod_caucho.dll plugin is included in the Resin distribution. The program installs the mod_caucho.dll plugin for any Apache it finds, and modifies the Apache httpd.conf file.
The communication between mod_caucho and the backend Resin server takes place using an port.
The for the backend server contains an srun to enable the port. The default resin.conf has an srun listener on port 6802.
... ... ...
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 resin-pro-3.0.x/webapps/ROOT for JSP files and resin-pro-3.0.x/webapps/ROOT/WEB-INF/classes for servlets and java source files. To tell Resin to use Apache's document area, configure an explicit 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 page for a detailed description.
unix> bin/httpd.sh win> httpd.exe
Resin-pro-3.0.x (built Fri, 03 Feb 2006 09:47:48 EST) Copyright(c) 1998-2006 Caucho Technology. All rights reserved. Starting Resin on Mon, 13 Feb 2006 20:16:19 -0500 (EST) [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 starting [09:43:41.496] Application 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 and configuration for the above example.
...
Create a test file '/usr/local/apache/htdocs/test.jsp'
2 + 2 = <%= 2 + 2 %>
Browse again. You should now get
2 + 2 = 4
The installation process above automatically changes the httpd.conf file. You can also configure the httpd.conf file manually, or modify the default configuration created by the installation process.
Unix:
LoadModule caucho_module libexec/mod_caucho.so ResinConfigServer localhost 6802SetHandler caucho-status
Windows:
LoadModule caucho_module/resin-pro-3.0.x/libexec/apache-2.0/mod_caucho.dll ResinConfigServer localhost 6802 SetHandler caucho-status
The 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.
Apache Command | Meaning |
---|---|
ResinConfigServer host port | Specifies the Resin JVM at host:port as a configuration server. |
mod_caucho discovers its configuration by contacting the ResinConfigServer specified in the httpd.conf or resin.ini. The ResinConfigServer can be any Resin server. When a user requests a URL, mod_caucho uses the configuration it has determined from the ResinConfigServer to determine whether Resin or Apache should handle the request. That decision is based on the configuration in the ResinConfigServer's resin.conf.
After reading the configuration from the backend Resin instance, mod_caucho keeps a local cahce of the information on disk. If the backend server becomes unavailable, mod_caucho uses the last known configuration until the backend server is again available to provide the configuration information.
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 debugging.
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 dispatch.
CauchoHost 127.0.0.1 6802SetHandler caucho-request
Apache Command | Meaning |
---|---|
CauchoHost host port | Alternative to ResinConfigServer, adds the Resin JVM with an srun port at host:port as a backend server. |
CauchoBackup host port | Alternative to ResinConfigServer, adds the Resin JVM with an srun port at host:port as a backup backend server. |
Apache Handler | Meaning |
---|---|
caucho-status | Handler to display /caucho-status |
caucho-request | Dispatch a request to Resin |
Requests dispatched directly from the Apache httpd.conf will not appear in /caucho-status.
The topic describes virtual hosts in detail. If you're using a single JVM, you only need to configure the resin.conf.
LoadModule caucho_module libexec/mod_caucho.so ResinConfigServer 192.168.0.1 6802SetHandler caucho-status
gryffindor.com ...slytherin.com ...
There are two special servlet-names which only affect the plugins: plugin_match and plugin_ignore.
plugin_match will direct a request to Resin. The servlet engine itself will ignore the plugin_match directive. You can use plugin_match to direct an entire subtree to Resin, e.g. to workaround the regexp limitation, but allow Resin's other servlet-mapping directives to control which servlets are used.
plugin_ignore keeps the request at on the web server. So you could create a directory /static where all documents, including JSPs are served by the web server.
If you want a different JVM for each virtual host, your httpd.conf can specify a different srun port for each host.
ServerName gryffindor.com ServerAlias ResinConfigServer 192.168.0.1 6802 ServerName slytherin.com ServerAlias ResinConfigServer 192.168.0.1 6803
> ... > ...
$ bin/httpd.sh -pid gryffindor.pid -conf conf/gryffindor.conf start $ bin/httpd.sh -pid slytherin.pid -conf conf/slytherin.conf start ... $ bin/httpd.sh -pid gryffindor.pid stop
The section provides an introduction to the concepts of load balancing.
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 down.
...
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.
ResinConfigServer 192.168.0.11 6802 ResinConfigServer 192.168.0.12 6802
Manual dispatching in httpd.conf can also specify the backend hosts and the backend backup hosts, as an alternative to using ResinConfigServer.
CauchoHost 192.168.0.11 6802 CauchoBackup 192.168.0.11 6803 CauchoHost 192.168.0.12 6802 CauchoBackup 192.168.0.12 6803SetHandler caucho-request
ResinConfigServer 192.168.0.11 6802 ResinConfigServer 192.168.0.12 6802
Debug logging output from mod_caucho is created with the --enable-debug option to ./configure. It causes a large amount of information to be dumped to /tmp/log, probably not suitable for a production environment,
./configure --enable-debug --with-apache=...