diff options
Diffstat (limited to 'rubbos/app/tomcat-connectors-1.2.32-src/docs/webserver_howto/printer')
3 files changed, 2289 insertions, 0 deletions
diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/docs/webserver_howto/printer/apache.html b/rubbos/app/tomcat-connectors-1.2.32-src/docs/webserver_howto/printer/apache.html new file mode 100644 index 00000000..ab972c65 --- /dev/null +++ b/rubbos/app/tomcat-connectors-1.2.32-src/docs/webserver_howto/printer/apache.html @@ -0,0 +1,1123 @@ +<html><head><META http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><title>The Apache Tomcat Connector - Webserver HowTo - Apache HTTP Server HowTo</title><meta name="author" value="Henri Gomez"><meta name="email" value="hgomez@apache.org"><meta name="author" value="Gal Shachor"><meta name="email" value="shachor@il.ibm.com"><link href="../../style.css" type="text/css" rel="stylesheet"></head><body bgcolor="#ffffff" text="#000000" link="#525D76" alink="#525D76" vlink="#525D76"><table border="0" width="100%" cellspacing="4"><!--PAGE HEADER--><tr><td colspan="2"><!--TOMCAT LOGO--><a href="http://tomcat.apache.org/"><img src="../../images/tomcat.gif" align="left" alt="Apache Tomcat" border="0"></a><!--APACHE LOGO--><a href="http://www.apache.org/"><img src="http://www.apache.org/images/asf-logo.gif" align="right" alt="Apache Logo" border="0"></a></td></tr><!--HEADER SEPARATOR--><tr><td colspan="2"><hr noshade size="1"></td></tr><tr><!--RIGHT SIDE MAIN BODY--><td width="80%" valign="top" align="left"><table border="0" width="100%" cellspacing="4"><tr><td align="left" valign="top"><h1>The Apache Tomcat Connector - Webserver HowTo</h1><h2>Apache HTTP Server HowTo</h2></td><td align="right" valign="top" nowrap="true"><img src="../../images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr></table><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Introduction"><strong>Introduction</strong></a></font></td></tr><tr><td><blockquote> +<p> +This document explains how to connect Tomcat to the popular open source web server, Apache httpd. +There is actually three versions of Apache HTTP Server, 1.3, 2.0 and 2.2 and all can be used with mod_jk, +the Tomcat redirector module. +</p> + +<p> +It is recommended that you also read the +<a href="../../generic_howto/workers.html">Workers HowTo</a> document +to learn how to setup the working entities between your web server and Tomcat Engines. +For more detailed configuration information consult the Reference Guide for +<a href="../../reference/worker.html">workers.properties</a>, +<a href="../../reference/uriworkermap.html">uriworkermap</a> +and <a href="../../reference/apache.html">Apache</a>. +</p> + +<p><b>Waring: If Apache HTTP Server and Tomcat are configured to serve content from +the same filing system location then care must be taken to ensure that httpd is +not able to serve inappropriate content such as the contents of the WEB-INF +directory or JSP source code.</b> This could occur if the httpd DocumentRoot +overlaps with a Tomcat Host's appBase or the docBase of any Context. It could +also occur when using the httpd Alias directive with a Tomcat Host's appBase or +the docBase of any Context. +</p> + +<p> +This document was originally part of <b>Tomcat: A Minimalistic User's Guide</b> written by Gal Shachor, +but has been split off for organisational reasons. +</p> + +<table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td bgcolor="#828DA6"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Document Conventions and Assumptions"><strong>Document Conventions and Assumptions</strong></a></font></td></tr><tr><td><blockquote> +<p> +${tomcat_home} is the root directory of tomcat. +Your Tomcat installation should have the following subdirectories: + +<ul> +<li> +${tomcat_home}\conf - Where you can place various configuration files +</li> +<li> +${tomcat_home}\webapps - Containing example applications +</li> +<li> +${tomcat_home}\bin - Where you place web server plugins +</li> +</ul> +</p> +<p> +In all the examples in this document ${tomcat_home} will be <b>/var/tomcat3</b>. +A <a href="../../generic_howto/workers.html">worker</a> is defined to be a tomcat process that accepts work from the Apache server. +</p> +</blockquote></td></tr></table> + +<table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td bgcolor="#828DA6"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Supported Configuration"><strong>Supported Configuration</strong></a></font></td></tr><tr><td><blockquote> +<p> +The mod_jk module was developed and tested on: +<ul> +<li> +Linux, FreeBSD, AIX, HP-UX, MacOS X, Solaris and should works on major Unixes platforms +supporting Apache 1.3 and/or 2.0/2.2 +</li> +<li> +WinNT4.0-i386 SP4/SP5/SP6a (should be able to work with other service packs), Win2K and WinXP and Win98 +</li> +<li> +Cygwin (until you have an apache server and autoconf/automake support tools) +</li> +<li> +Netware +</li> +<li> +i5/OS V5R4 (System I) with Apache HTTP Server 2.0.58. Be sure to have the latest Apache PTF installed. +</li> +<li> +Tomcat 3.2.x, Tomcat 3.3.x, Tomcat 4.0.x, Tomcat 4.1.x, Tomcat 5.0.x, Tomcat 5.5.x and Tomcat 6. +</li> +</ul> +</p> + +<p> +The redirector uses <b>ajp12</b> and <b>ajp13</b> to send requests to the Tomcat containers. There is also an option to use Tomcat in process, +more about the in-process mode can be found in the in process howto. +</p> +</blockquote></td></tr></table> + +<table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td bgcolor="#828DA6"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Who support ajp protocols ?"><strong>Who support ajp protocols ?</strong></a></font></td></tr><tr><td><blockquote> +<p> +The ajp12 protocol is only available in Tomcat 3.2.x and 3.3.x. +</p> + +<p> +The <b>ajp12</b> has been <b>deprecated</b> with Tomcat 3.3.x and you should use instead +<b>ajp13</b> which is the only ajp protocol known by Tomcat 4.x, 5 and 5.5 and Tomcat 6. +</p> + +<p> +Of course Tomcat 3.2.x and 3.3.x also support ajp13 protocol. +</p> + +<p> +Others servlet engines such as <b>jetty</b> have support for ajp13 protocol +</p> + +</blockquote></td></tr></table> + +<table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td bgcolor="#828DA6"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="How does it work ?"><strong>How does it work ?</strong></a></font></td></tr><tr><td><blockquote> +<p> +In a nutshell a web server is waiting for client HTTP requests. +When these requests arrive the server does whatever is needed to serve the +requests by providing the necessary content. +</p> + +<p> +Adding a servlet container may somewhat change this behaviour. +Now the web server needs also to perform the following: +</p> + +<ul> +<li> +Load the servlet container adaptor library and initialise it (prior to serving requests). +</li> +<li> +When a request arrives, it needs to check and see if a certain request belongs to a servlet, +if so it needs to let the adaptor take the request and handle it. +</li> +</ul> + +<p> +The adaptor on the other hand needs to know what requests it is going to serve, +usually based on some pattern in the request URL, and to where to direct these requests. +</p> + +<p> +Things are even more complex when the user wants to set a configuration that uses virtual hosts, +or when they want multiple developers to work on the same web server +but on different servlet container JVMs. +We will cover these two cases in the advanced sections. +</p> + +</blockquote></td></tr></table> + +</blockquote></td></tr></table><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Obtaining mod_jk"><strong>Obtaining mod_jk</strong></a></font></td></tr><tr><td><blockquote> +<p> +mod_jk can be obtained in two formats - binary and source. +Depending on the platform you are running your web server on, a binary version of mod_jk may be available. +</p> + +<p> +It is recommended to use the binary version if one is available. +If the binary is not available, follow the instructions for building mod_jk from source. +The mod_jk source can be downloaded from a mirror +<a href="http://tomcat.apache.org/download-connectors.cgi"> +here</a> +</p> + +<p> +The binaries for mod_jk are now available for several platforms. +The binaries are located in subdirectories by platform. +</p> + +<p> +For some platforms, such as Windows, this is the typical way of obtaining mod_jk +since most Windows systems do not have C compilers. +</p> + +<p> +For others, the binary distribution of mod_jk offers simpler installation. +</p> + +<p> +For example JK 1.2.x can be downloaded from a mirror +<a href="http://tomcat.apache.org/download-connectors.cgi"> +here</a> (look for JK 1.2 Binary Releases). The "JK 1.2 Binary Releases" link contains binary version for a variety of +operating systems for both Apache 1.3 and Apache 2. +</p> + +</blockquote></td></tr></table><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Installation"><strong>Installation</strong></a></font></td></tr><tr><td><blockquote> +<p> +mod_jk requires two entities: + +<ul> +<li> +<b>mod_jk.xxx</b> - The Apache HTTP Server module, depending on your operating system, it will be mod_jk.so, mod_jk.nlm or +or MOD_JK.SRVPGM (see the build section). +</li> +<li> +<b>workers.properties</b> - A file that describes the host(s) and port(s) used by the workers (Tomcat processes). +A sample workers.properties can be found under the conf directory in the source download. +</li> +</ul> +</p> + +<p> +Also as with other Apache HTTP Server modules, mod_jk should be first installed on the modules directory of your +Apache webserver, ie : /usr/lib/apache and you should update your <b>httpd.conf</b> file. +</p> + + +<table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td bgcolor="#828DA6"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Disabling old mod_jserv"><strong>Disabling old mod_jserv</strong></a></font></td></tr><tr><td><blockquote> +<p> +If you've previously configured Apache to use <b>mod_jserv</b>, remove any <b>ApJServMount</b> directives +from your httpd.conf. +</p> + +<p>If you're including <b>tomcat-apache.conf</b> or <b>tomcat.conf</b>, you'll want to remove them as well - +they are specific to <b>mod_jserv</b>. +</p> + +<p> +The mod_jserv configuration directives are not compatible with mod_jk ! +</p> +</blockquote></td></tr></table> + +<table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td bgcolor="#828DA6"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Using Tomcat auto-configure"><strong>Using Tomcat auto-configure</strong></a></font></td></tr><tr><td><blockquote> +<p> +The auto-configure works only for a single Tomcat running on the same machine where Apache HTTP Server is running. +The simplest way to configure Apache HTTP Server to use mod_jk is to turn on the Apache HTTP Server auto-configure setting +in Tomcat and put the following include directive at the end of your Apache httpd.conf file +(make sure you replace $TOMCAT_HOME with the correct path for your Tomcat installation: +</p> + +<div class="example"><pre> + #To be added at the end of your httpd.conf + Include $TOMCAT_HOME/conf/jk/mod_jk.conf-auto +</pre></div> + +<p> +Note: this file may also be generated as $TOMCAT_HOME/conf/auto/mod_jk.conf +</p> + +<p> +This will tell Apache HTTP Server to use directives in the <b>mod_jk.conf-auto</b> file in +the Apache configuration. This file is created by enabling the Apache +auto-configuration by creating your workers.properties file at +$TOMCAT_HOME/conf/jk/workers.properties and adding the listener to the Engine +element in the server.xml file as per the following example. +<b>Please note that this example is specific to Tomcat 5.x, unlike other sections of this document + which also apply to previous Tomcat branches.</b> +</p> +<div class="example"><pre> + ... + <Engine ...> + ... + <Listener className="org.apache.jk.config.ApacheConfig" modJk="/path/to/mod_jk.so" /> + ... + </Engine> + ... +</pre></div> + +<p> +Then restart Tomcat and mod_jk.conf should be generated. For more information on +this topic, please refer to the API documentation at the +<a href="http://tomcat.apache.org/tomcat-5.5-doc/catalina/docs/api/org/apache/jk/config/ApacheConfig.html"> +Tomcat docs website</a>. +</p> + +</blockquote></td></tr></table> + +<table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td bgcolor="#828DA6"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Custom mod_jk configuration"><strong>Custom mod_jk configuration</strong></a></font></td></tr><tr><td><blockquote> +<p> +You should use custom configuration when : +</p> +<ul> +<li> +You couldn't use <b>mod_jk.conf-auto</b> since Tomcat engine isn't on the same machine that your Apache web server, +ie when you have an Apache in front of a Tomcat Farm. +</li> +<li> +Another case for custom configuration is when your Apache is in front of many different Tomcat engines, +each one having it's own configuration, a general case in ISP hosting +</li> +<li> +Also all Apache webmaster will retain custom configuration to be able to tune the settings +to their real needs. +</li> +</ul> + +</blockquote></td></tr></table> + +<table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td bgcolor="#828DA6"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Simple configuration example"><strong>Simple configuration example</strong></a></font></td></tr><tr><td><blockquote> +<p> +Here is a simple configuration: +</p> + +<div class="example"><pre> + # Load mod_jk module + LoadModule jk_module libexec/mod_jk.so + # Declare the module for <IfModule directive> (remove this line on Apache 2.0.x) + AddModule mod_jk.c + # Where to find workers.properties + JkWorkersFile /etc/httpd/conf/workers.properties + # Where to put jk shared memory + JkShmFile /var/log/httpd/mod_jk.shm + # Where to put jk logs + JkLogFile /var/log/httpd/mod_jk.log + # Set the jk log level [debug/error/info] + JkLogLevel info + # Select the timestamp log format + JkLogStampFormat "[%a %b %d %H:%M:%S %Y] " + # Send servlet for context /examples to worker named worker1 + JkMount /examples/servlet/* worker1 + # Send JSPs for context /examples to worker named worker1 + JkMount /examples/*.jsp worker1 +</pre></div> + +</blockquote></td></tr></table> +</blockquote></td></tr></table><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="mod_jk Directives"><strong>mod_jk Directives</strong></a></font></td></tr><tr><td><blockquote> +<p> +We'll discuss here the mod_jk directives and details behind them +</p> + +<table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td bgcolor="#828DA6"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Define workers"><strong>Define workers</strong></a></font></td></tr><tr><td><blockquote> +<p> +<b>JkWorkersFile</b> specify the location where mod_jk will find the workers definitions. + +<div class="example"><pre> + JkWorkersFile /etc/httpd/conf/workers.properties +</pre></div> + +<br> +<br> +</p> +</blockquote></td></tr></table> + +<table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td bgcolor="#828DA6"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Logging"><strong>Logging</strong></a></font></td></tr><tr><td><blockquote> +<p> +<b>JkLogFile</b> specify the location where mod_jk is going to place its log file. +</p> + +<div class="example"><pre> + JkLogFile /var/log/httpd/mod_jk.log +</pre></div> + +<p> +Since JK 1.2.3 for Apache 2.0/2.2 and JK 1.2.16 for Apache 1.3 this can also +be used for piped logging: +</p> + +<div class="example"><pre> + JkLogFile "|/usr/bin/rotatelogs /var/log/httpd/mod_jk.log 86400" +</pre></div> + +<p> +<b>JkLogLevel</b> +set the log level between : +</p> + +<ul> +<li> +<b>info</b> log will contains standard mod_jk activity (default). +</li> +<li> +<b>error</b> log will contains also error reports. +</li> +<li> +<b>debug</b> log will contains all information on mod_jk activity +</li> +</ul> + +<div class="example"><pre> + JkLogLevel info +</pre></div> + +<p> +<b class="code">info</b> should be your default selection for normal operations. +<br> +<br> +</p> + +<p> +<b>JkLogStampFormat</b> will configure the date/time format found on mod_jk logfile. +Using the strftime() format string it's set by default to <b>"[%a %b %d %H:%M:%S %Y]"</b> +</p> + +<div class="example"><pre> + JkLogStampFormat "[%a %b %d %H:%M:%S %Y] " +</pre></div> + +<p> +<br> +<br> +</p> + +<p> +<b>JkRequestLogFormat</b> will configure the format of mod_jk individual request logging. +Request logging is configured and enabled on a per virtual host basis. +To enable request logging for a virtual host just add a JkRequestLogFormat config. +The syntax of the format string is similar to the Apache LogFormat command, +here is a list of the available request log format options: +</p> + +<p> +<table> + <tr><th>Options</th><th>Description</th></tr> + <tr><td>%b</td><td>Bytes sent, excluding HTTP headers (CLF format)</td></tr> + <tr><td>%B</td><td>Bytes sent, excluding HTTP headers</td></tr> + <tr><td>%H</td><td>The request protocol</td></tr> + <tr><td>%m</td><td>The request method</td></tr> + <tr><td>%p</td><td>The canonical Port of the server serving the request</td></tr> + <tr><td>%q</td><td>The query string (prepended with a ? if a query string exists, otherwise an empty string)</td></tr> + <tr><td>%r</td><td>First line of request</td></tr> + <tr><td>%s</td><td>Request HTTP status code</td></tr> + <tr><td>%T</td><td>Request duration, elapsed time to handle request in seconds '.' micro seconds</td></tr> + <tr><td>%U</td><td>The URL path requested, not including any query string.</td></tr> + <tr><td>%v</td><td>The canonical ServerName of the server serving the request</td></tr> + <tr><td>%V</td><td>The server name according to the UseCanonicalName setting</td></tr> + <tr><td>%w</td><td>Tomcat worker name</td></tr> + <tr><td>%R</td><td>Session route name (available with 1.2.19 and up)</td></tr> +</table> + +<div class="example"><pre> + JkRequestLogFormat "%w %V %T" +</pre></div> + +<br> +<br> +</p> + +</blockquote></td></tr></table> + +<table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td bgcolor="#828DA6"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Forwarding"><strong>Forwarding</strong></a></font></td></tr><tr><td><blockquote> +<p> +The directive JkOptions allow you to set many forwarding options which will enable (+) +or disable (-) following option. Without any leading signs, options will be enabled. +<br> +<br> +</p> + +<p> +The four following options <b>+ForwardURIxxx</b> are mutually exclusive. +Exactly one of them is required, a negative sign prefix is not allowed with them. +The default value is "ForwardURIProxy" since version 1.2.24. +It was "ForwardURICompatUnparsed" in version 1.2.23 and +"ForwardURICompat" until version 1.2.22. +You can turn the default off by switching on one of the other two options. +You should leave this at it's default value, unless you have a very good +reason to change it. +<br> +<br> +</p> + +<p> +All options are inherited from the global server to virtual hosts. +Options that support enabling (plus options) and disabling (minus options), +are inherited in the following way: +<br> +<br> +options(vhost) = plus_options(global) - minus_options(global) + plus_options(vhost) - minus_options(vhost) +<br> +<br> +</p> + +<p> +Using JkOptions <b>ForwardURIProxy</b>, the forwarded URI +will be partially reencoded after processing inside Apache httpd and +before forwarding to Tomcat. This will be compatible with local +URL manipulation by mod_rewrite and with URL encoded session ids. + +<div class="example"><pre> + JkOptions +ForwardURIProxy +</pre></div> + +<br> +<br> +</p> + +<p> +Using JkOptions <b>ForwardURICompatUnparsed</b>, the forwarded URI +will be unparsed. It's spec compliant and secure. +It will always forward the original request URI, so rewriting +URIs with mod_rewrite and then forwarding the rewritten URI +will not work. + +<div class="example"><pre> + JkOptions +ForwardURICompatUnparsed +</pre></div> + +<br> +<br> +</p> +<p> +Using JkOptions <b>ForwardURICompat</b>, the forwarded URI will +be decoded by Apache httpd. Encoded characters will be decoded and +explicit path components like ".." will already be resolved. +This is less spec compliant and is <b>not safe</b> if you are using +prefix JkMount. This option will allow to rewrite URIs with +mod_rewrite before forwarding. + +<div class="example"><pre> + JkOptions +ForwardURICompat +</pre></div> + +<br> +<br> +</p> +<p> +Using JkOptions <b>ForwardURIEscaped</b>, the forwarded URI will +be the encoded form of the URI used by ForwardURICompat. +Explicit path components like ".." will already be resolved. +This will not work in combination with URL encoded session IDs, +but it will allow to rewrite URIs with mod_rewrite before forwarding. + +<div class="example"><pre> + JkOptions +ForwardURIEscaped +</pre></div> + +<br> +<br> +</p> + +<p> +JkOptions <b>RejectUnsafeURI</b> will block all +URLs, which contain percent signs '%' or backslashes '\' +after decoding. +<br> +<br> +</p> +<p> +Most web apps do not use such URLs. Using the option RejectUnsafeURI, you +can block several well known URL encoding attacks. By default, this option +is not set. +</p> +<p> +You can also realise such a check with mod_rewrite, which is more powerful +but also slightly more complicated. + +<div class="example"><pre> + JkOptions +RejectUnsafeURI +</pre></div> + +<br> +<br> +</p> + +<p> +JkOptions <b>ForwardDirectories</b> is used in conjunction with <b>DirectoryIndex</b> +directive of Apache web server. As such mod_dir should be available to Apache, +statically or dynamically (DSO) +<br> +<br> +</p> + +<p> +When DirectoryIndex is configured, Apache will create sub-requests for +each of the local-url's specified in the directive, to determine if there is a +local file that matches (this is done by stat-ing the file). +</p> + +<p> +If ForwardDirectories is set to false (default) and Apache doesn't find any +files that match, Apache will serve the content of the directory (if directive +Options specifies Indexes for that directory) or a <b class="code">403 Forbidden</b> response (if +directive Options doesn't specify Indexes for that directory). +</p> + +<p> +If ForwarDirectories is set to true and Apache doesn't find any files that +match, the request will be forwarded to Tomcat for resolution. This is used in +cases when Apache cannot see the index files on the file system for various +reasons: Tomcat is running on a different machine, the JSP file has been +precompiled etc. +</p> + +<p>Note that locally visible files will take precedence over the +ones visible only to Tomcat (i.e. if Apache can see the file, that's the one +that's going to get served). This is important if there is more then one type of +file that Tomcat normally serves - for instance Velocity pages and JSP pages. + +<div class="example"><pre> + JkOptions +ForwardDirectories +</pre></div> +<br> +<br> +</p> + +<p> +JkOptions <b>ForwardLocalAddress</b>, you ask mod_jk to send the local address, +of the Apache web server instead remote client address. This can be used by +Tomcat remote address valve for allowing connections only from registered Apache +web servers. + +<div class="example"><pre> + JkOptions +ForwardLocalAddress +</pre></div> + +<br> +<br> +</p> + +<p> +JkOptions <b>FlushPackets</b>, you ask mod_jk to flush Apache's connection +buffer after each AJP packet chunk received from Tomcat. This option can have +a strong performance penalty for Apache and Tomcat as writes are performed +more often than would normally be required (ie: at the end of each +response). + +<div class="example"><pre> + JkOptions +FlushPackets +</pre></div> + +<br> +<br> +</p> + +<p> +JkOptions <b>FlushHeader</b>, you ask mod_jk to flush Apache's connection +buffer after the response headers have been received from Tomcat. + +<div class="example"><pre> + JkOptions +FlushHeader +</pre></div> + +<br> +<br> +</p> + +<p> +JkOptions <b>DisableReuse</b>, you ask mod_jk to close connections immediately +after their use. Normally mod_jk uses persistent connections and pools idle +connections to reuse them, when new requests have to be sent to Tomcat. +</p> + +<p> +Using this option will have a strong performance penalty for Apache and Tomcat. +Use this only as a last resort in case of unfixable network problems. +If a firewall between Apache and Tomcat silently kills idle connections, +try to use the worker attribute socket_keepalive in combination with an appropriate +TCP keepalive value in your OS. + +<div class="example"><pre> + JkOptions +DisableReuse +</pre></div> + +<br> +<br> +</p> + +<p> +JkOptions <b>ForwardKeySize</b>, you ask mod_jk, when using ajp13, to forward also the SSL Key Size as +required by Servlet API 2.3. +This flag shouldn't be set when servlet engine is Tomcat 3.2.x (off by default). + +<div class="example"><pre> + JkOptions +ForwardKeySize +</pre></div> + +<br> +<br> +</p> + +<p> +JkOptions <b>ForwardSSLCertChain</b>, you ask mod_jk, when using ajp13, +to forward SSL certificate chain (off by default). +Mod_jk only passes the <b class="code">SSL_CLIENT_CERT</b> to the AJP connector. This is not a +problem with self-signed certificates or certificates directly signed by the +root CA certificate. However, there's a large number of certificates signed by +an intermediate CA certificate, where this is a significant problem: A servlet +will not have the possibility to validate the client certificate on its own. The +bug would be fixed by passing on the <b class="code">SSL_CLIENT_CERT_CHAIN</b> to Tomcat via the AJP connector. +<br> +This directive exists only since version 1.2.22. +<div class="example"><pre> + JkOptions +ForwardSSLCertChain +</pre></div> + +<br> +<br> +</p> + +<p> +The directive <b>JkEnvVar</b> allows you to forward environment variables +from Apache server to Tomcat engine. +You can add a default value as a second parameter to the directive. +If the default value is not given explicitly, the variable +will only be send, if it is set during runtime. +<br> +The variables can be retrieved on the Tomcat side as request attributes +via request.getAttribute(attributeName). +Note that the variables send via JkEnvVar will not be listed +in request.getAttributeNames(). +<br> +<br> +The variables are inherited from the global server to virtual hosts. + +<div class="example"><pre> + JkEnvVar SSL_CLIENT_V_START undefined +</pre></div> +<br> +<br> +</p> + +</blockquote></td></tr></table> + +<table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td bgcolor="#828DA6"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Assigning URLs to Tomcat"><strong>Assigning URLs to Tomcat</strong></a></font></td></tr><tr><td><blockquote> +<p> +If you have created a custom or local version of mod_jk.conf-local as noted above, +you can change settings such as the workers or URL prefix. +</p> + +<p> +<b>JkMount</b> directive assign specific URLs to Tomcat. +In general the structure of a JkMount directive is: +</p> + +<div class="example"><pre> JkMount [URL prefix] [Worker name]</pre></div> + +<div class="example"><pre> + # send all requests ending in .jsp to worker1 + JkMount /*.jsp worker1 + # send all requests ending /servlet to worker1 + JkMount /*/servlet/ worker1 + # send all requests jsp requests to files located in /otherworker will go worker2 + JkMount /otherworker/*.jsp worker2 +</pre></div> + +<p> +You can use the JkMount directive at the top level or inside <VirtualHost> sections of your httpd.conf file. +</p> +</blockquote></td></tr></table> + +<table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td bgcolor="#828DA6"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Configuring Apache to serve static web application files"><strong>Configuring Apache to serve static web application files</strong></a></font></td></tr><tr><td><blockquote> +<p> +If the Tomcat Host appBase (webapps) directory is accessible by the Apache web server, +Apache can be configured to serve web application context directory static files instead +of passing the request to Tomcat. +</p> + +<p> +Caution: For security reasons is is strongly recommended that JkMount is used to +pass all requests to Tomcat by default and JkUnMount is used to explicitly +exclude static content to be served by httpd. It should also be noted that +content served by httpd will bypass any security constraints defined in the +application's web.xml. +</p> + +<p>Use Apache's <b>Alias</b> directive to map a single web application context directory into Apache's +document space for a VirtualHost: +</p> + +<div class="example"><pre> + # Static files in the examples webapp are served by apache + Alias /examples /vat/tomcat3/webapps/examples + # All requests go to worker1 by default + JkMount /* worker1 + # Serve html, jpg and gif using httpd + JkUnMount /*.html worker1 + JkUnMount /*.jpg worker1 + JkUnMount /*.gif worker1 +</pre></div> + +<p> +Starting with mod_jk 1.2.6 for Apache 2.0/2.2 and 1.2.19 for Apache 1.3, it's possible to exclude some URL/URI from +jk processing by setting the env var <b>no-jk</b>, for example with the SetEnvIf Directive. +</p> + +<p> +You could use <b>no-jk</b> env var to fix problem with mod_alias or mod_userdir +directive when jk and alias/userdir URLs matches. +</p> + +<div class="example"><pre> + # All URL goes to tomcat except the one containing /home + <VirtualHost *:80> + ServerName testxxx.mysys + DocumentRoot /www/testxxx/htdocs + + # Use SetEnvIf to st no-jk when /home/ is encountered + SetEnvIf Request_URI "/home/*" no-jk + + # Now /home will goes to /home/dataxxx/ + Alias /home /home/dataxxx/ + + <Directory "/home/dataxxx"> + Options Indexes MultiViews + AllowOverride None + Order allow,deny + Allow from all + </Directory> + + JkMount /* myssys-xxx + + </VirtualHost> +</pre></div> + + +<p> +Use the mod_jk <b>JkAutoAlias</b> directive to map all web application context directories +into Apache's document space. +</p> + +<p> +Attempts to access the WEB-INF or META-INF directories within a web application context +or a Web Archive *.war within the Tomcat Host appBase (webapps) directory will fail with an +<b class="code">HTTP 403, Access Forbidden</b> +</p> + +<div class="example"><pre> + # Static files in all Tomcat webapp context directories are served by apache + JkAutoAlias /var/tomcat3/webapps + + # All requests go to worker1 by default + JkMount /* ajp13 + # Serve html, jpg and gif using httpd + JkUnMount /*.html ajp13 + JkUnMount /*.jpg ajp13 + JkUnMount /*.gif ajp13 +</pre></div> + +<p> +If you encoded all your URLs to contain the session id +(<b class="code">;jsessionid=...</b>), and you later decide, you want to +move part of the content to Apache httpd, you can tell +mod_jk to strip off all session ids from URLs for +those requests, that do not get forwarded via mod_jk. +</p> + +<p> +You enable this feature by setting JkStripSession to On. +It can be enabled individually for virtual servers. The default +value is Off. +</p> + +</blockquote></td></tr></table> +</blockquote></td></tr></table><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Building mod_jk on Unix"><strong>Building mod_jk on Unix</strong></a></font></td></tr><tr><td><blockquote> +<p> +The mod_jk build use the widely used configure system. +</p> +<table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td bgcolor="#828DA6"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Prepare your mod_jk configure from subversion"><strong>Prepare your mod_jk configure from subversion</strong></a></font></td></tr><tr><td><blockquote> +In case you get source from subversion, ie without an existing configure script, +you should have autoconf for configuration and installation. +<p> +To create tomcat-connectors's autoconf script, you will need libtool +1.5.2, automake 1.10 and autoconf 2.59 or newer. The use of more recent +versions is encouraged, e.g. for reliable detection of the features of +recent version of operating systems. +</p><p> +Those tools will not be required if you are just using a package downloaded from apache.org, +they are only required for developers. +</p> +<p> +To create the configure script just type : + +<p class="screen"><div align="left"><table width="80%" border="1" cellspacing="0" cellpadding="2" bgcolor="#000000"><tr><td bgcolor="#000000" align="left"><code><nobr><em class="screen">[user@host] ~ $ </em><b class="screen">./buildconf.sh</b></nobr></code><br></td></tr></table></div></p> +</p> +</blockquote></td></tr></table> + +<table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td bgcolor="#828DA6"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Using configure to build mod_jk"><strong>Using configure to build mod_jk</strong></a></font></td></tr><tr><td><blockquote> +<p>Here's how to use configure to prepare mod_jk for building, just type: +<div class="example"><pre> +./configure [autoconf arguments] [tomcat-connectors arguments] +</pre></div> +</p> + +<p> +You could set <b>CFLAGS</b> and <b>LDFLAGS</b> to add some platform specifics: +</p> + +<p class="screen"><div align="left"><table width="80%" border="1" cellspacing="0" cellpadding="2" bgcolor="#000000"><tr><td bgcolor="#000000" align="left"><code><nobr><em class="screen">[user@host] ~ $ </em><b class="screen">LDFLAGS=-lc ./configure -with-apxs=/home2/local/apache/bin/apxs</b></nobr></code><br></td></tr></table></div></p> + +<p> +If you want to build mod_jk for different version of Apache httpd, like 1.3, 2.0 and 2.2, +you need to go through the full build process for each of them. +Please note, that httpd 2.0 and 2.2 modules are <b>not</b> compatible. The mod_jk directory +used is "apache-2.0" in both cases, but you need to compile separately. +<ul> +<li> +use configure and indicate the correct Apache httpd apxs location (--with-apxs) +</li> +<li> +use make +</li> +<li> +copy the resulting mod_jk.so binary from the apache-1.3 or apache-2.0 subdirectory +to the Apache httpd modules location. +</li> +<li> +make clean (to remove all previously compiled object files) +</li> +<li> +Start over with the apxs location for your next Apache httpd version. +</li> +</ul> + +</p> +</blockquote></td></tr></table> + +<table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td bgcolor="#828DA6"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="configure arguments"><strong>configure arguments</strong></a></font></td></tr><tr><td><blockquote> +<p> +<table> + <tr valign="top"><th>Apache related parameters</th><th></th></tr> + <tr valign="top"> + <td>--with-apxs[=FILE]</td> + <td>FILE is the location of the apxs tool. Default is finding apxs in PATH. +It builds a shared Apache module. It detects automatically the Apache version. +(2.0/2.2 and 1.3)</td> + </tr> + <tr valign="top"><td>--with-apache=DIR</td> + <td>DIR is the path where apache sources are located. +The apache sources should have been configured before configuring mod_jk. +DIR is something like: /home/apache/apache_1.3.19 +It builds a static Apache module.</td> + </tr> + <tr valign="top"><td>--enable-EAPI</td> + <td>This parameter is needed when using Apache-1.3 and mod_ssl, otherwise you will get the error message: +"this module might crash under EAPI!" when loading mod_jk.so in httpd. +Not needed when --with-apxs has been used</td> +</tr> + <tr valign="top"><td>--enable-prefork</td> + <td> +In case you build mod_jk for a multi-threaded Apache httpd 2.0/2.2 MPM (Multi-Processing Module), +some areas of mod_jk code need to be synchronised to make it thread-safe. +Because configure can not easily detect, whether your are using a multi-threaded MPM, +mod_jk by default is always build thread-safe for Apache httpd 2.0/2.2. +If you are sure, that your MPM is not multi-threaded, you can use "--enable-prefork" +to force the removal of the synchronisation code (thus increasing performance a bit). +For instance, the prefork MPM is not multi-threaded. For Apache httpd 1.3 +this flag will be set automatically.</td> +</tr> + <tr valign="top"><td>--disable-trace</td> + <td> +When using log level "trace", mod_jk traces a lot of function calls with +"enter" and "exit" log messages. Even if the log level is not "trace", +comparing the log levels to decide about logging has some performance +impact.<br> +If you use "--disable-trace", then the trace log code doesn't get compiled +into the module binary and you might save some cycles during execution.<br> +Even with "--disable-trace" logging debug messages with debug log level +will still be possible.</td> +</tr> + <tr valign="top"><td>--enable-api-compatibility</td> + <td> +Only use httpd API functions available in all httpd production releases +of the chosen major httpd release branch. This improves binary +compatibility of module builds with httpd releases older than the release +against mod_jk is build (only between minor httpd versions).</td> +</tr> + <tr valign="top"><td>--enable-flock</td> + <td> +In case the operating system supports flock system call use this flag to enable this +faster locks that are implemented as system call instead emulated by GNU C library.<br> +However those locks does not work on NFS mounted volumes, so you can use +"--enable-flock" during compile time to force the flocks() calls.</td> +</tr> + +</table> +<br> +<table> + <tr valign="top"><th>DEPRECATED: JNI related parameters</th><th></th></tr> + <tr valign="top"><td>--enable-jni</td> + <td>Build the JNI worker and so the build process will require +some information about your Java Environment</td> + </tr> + <tr valign="top"><td>--with-java-home=DIR</td> + <td>DIR is the patch to the JDK root directory. Something like: /opt/java/jdk12</td> + </tr> + <tr valign="top"><td>--with-os-type=SUBDIR</td><td>SUBDIR is the os-type subdirectory, + configure should guess it correctly.</td> + </tr> + <tr valign="top"><td>--with-arch-type=SUBDIR</td><td>SUBDIR is the arch subdirectory, + configure should guess it correctly.</td> + </tr> + <tr valign="top"><td>--with-java-platform=VAL</td><td>VAL is the Java platform 1 is 1.1.x and 2 is for 1.2 and higher, + configure should guess it correctly.</td> + </tr> +</table> +</p> +<p><font color="#ff0000">The JNI option has been deprecated. It will likely not work. Do not use it.</font></p> +</blockquote></td></tr></table> + +<table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td bgcolor="#828DA6"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Examples of configure use"><strong>Examples of configure use</strong></a></font></td></tr><tr><td><blockquote> + +<p class="screen"><div align="left"><table width="80%" border="1" cellspacing="0" cellpadding="2" bgcolor="#000000"><tr><td bgcolor="#000000" align="left"><div class="screen">Apache 1.3 and 2.0/2.2 build</div><code><nobr><em class="screen">[user@host] ~ $ </em><b class="screen">./configure --with-apxs=/usr/sbin/apxs</b></nobr></code><br><code><nobr><em class="screen">[user@host] ~ $ </em><b class="screen">make</b></nobr></code><br><code><nobr><em class="screen">[user@host] ~ $ </em><b class="screen">cp ./apache-1.3/mod_jk.so /usr/lib/apache</b></nobr></code><br><code><nobr><em class="screen">[user@host] ~ $ </em><b class="screen">make clean</b></nobr></code><br><code><nobr><em class="screen">[user@host] ~ $ </em><b class="screen">./configure --with-apxs=/usr/sbin/apxs2</b></nobr></code><br><code><nobr><em class="screen">[user@host] ~ $ </em><b class="screen">make</b></nobr></code><br><code><nobr><em class="screen">[user@host] ~ $ </em><b class="screen">cp ./apache-2.0/mod_jk.so /usr/lib/apache2</b></nobr></code><br></td></tr></table></div></p> + +<p class="screen"><div align="left"><table width="80%" border="1" cellspacing="0" cellpadding="2" bgcolor="#000000"><tr><td bgcolor="#000000" align="left"><div class="screen">Apache 2.0/2.2 build with JNI support</div><code><nobr><em class="screen">[user@host] ~ $ </em><b class="screen">./configure --with-apxs2=/opt/apache2/bin/apxs \</b></nobr></code><br><code><nobr><em class="screen"> </em><b class="screen">--with-java-home=${JAVA_HOME} --with-java-platform=2 \</b></nobr></code><br><code><nobr><em class="screen"> </em><b class="screen">--enable-jni</b></nobr></code><br></td></tr></table></div></p> +<p><font color="#ff0000">The JNI option has been deprecated. It will likely not work. Do not use it.</font></p> +</blockquote></td></tr></table> + +</blockquote></td></tr></table><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Building mod_jk for Apache on Windows NT/2K/XP"><strong>Building mod_jk for Apache on Windows NT/2K/XP</strong></a></font></td></tr><tr><td><blockquote> +<p> +The module was developed using Visual C++ version 6.0, so having this environment is a prerequisite +if you want to perform a custom build. +</p> +<p> +The steps that you need to take are: +</p> +<ul> +<li> +Change directory to the apache 1.3 or apache 2.0 source directory depending on your version of Apache. +</li> +<li> +If you want to build mod_jk for Apache 1.3, set an <b>APACHE1_HOME</b> environment variable which points +to where your Apache 1.3 is installed. +A mod_jk module for Apache 2.0 build will require <b>APACHE2_HOME</b> environment variable to be set. +</li> +<li> +Copy mod_jk.so to Apache's modules directory. +</li> +</ul> +<p> +An example on how to build mod_jk for Apache 1.3: +</p> +<p class="screen"><div align="left"><table width="80%" border="1" cellspacing="0" cellpadding="2" bgcolor="#000000"><tr><td bgcolor="#000000" align="left"><div class="screen">Set location for Apache 1.3 sources</div><code><nobr><em class="screen">c:\></em><b class="screen">set APACHE1_HOME=c:\apache13</b></nobr></code><br><div class="screen">Change directory to the mod_jk module for Apache 1.3</div><code><nobr><em class="screen">c:\></em><b class="screen">cd c:\home\apache\jk\native\apache-1.3</b></nobr></code><br><div class="screen">Build the sources using MSDEV</div><code><nobr><em class="screen">c:\></em><b class="screen">MSDEV mod_jk.dsp /MAKE ALL</b></nobr></code><br><div class="screen">Copy the dll to your apache modules directory</div><code><nobr><em class="screen">c:\></em><b class="screen">cp release\mod_jk.so c:\apache13\modules\</b></nobr></code><br></td></tr></table></div></p> + +<p> +An example on how to build mod_jk for Apache 2.0: +</p> +<p class="screen"><div align="left"><table width="80%" border="1" cellspacing="0" cellpadding="2" bgcolor="#000000"><tr><td bgcolor="#000000" align="left"><div class="screen">Set location for Apache 2.0 sources</div><code><nobr><em class="screen">c:\></em><b class="screen">set APACHE2_HOME=c:\apache20</b></nobr></code><br><div class="screen">Change directory to the mod_jk module for Apache 2.0</div><code><nobr><em class="screen">c:\></em><b class="screen">cd c:\home\apache\jk\native\apache-2.0</b></nobr></code><br><div class="screen">Build the sources using MSDEV</div><code><nobr><em class="screen">c:\></em><b class="screen">MSDEV mod_jk.dsp /MAKE ALL</b></nobr></code><br><div class="screen">Copy the dll to your apache modules directory</div><code><nobr><em class="screen">c:\></em><b class="screen">cp release\mod_jk.so c:\apache20\modules\</b></nobr></code><br></td></tr></table></div></p> + +<p> +If msdev is not in your path, enter the full path to msdev.exe. +Also, ApacheCore.lib is expected to exist in the <b>${APACHEX_HOME}\src\CoreD</b> and +<b>${APACHEX_HOME}\src\CoreR</b> directories before linking will succeed. +You will need to build enough of the Apache source to create these libraries. +This will build both release and debug versions of the redirector plug-in (mod_jk). +An alternative will be to open mod_jk.dsp in msdev and build it using the build menu. +</p> +</blockquote></td></tr></table><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Building mod_jk for Apache on System I - i5/OS (OS400)"><strong>Building mod_jk for Apache on System I - i5/OS (OS400)</strong></a></font></td></tr><tr><td><blockquote> +<p> +Since OS400 V4R5, System I (AS/400) has used Apache 2.0 as their primary web server, +replacing the old IBM webserver. +It's now possible to build mod_jk on System I thanks to the help of the IBM +Rochester Labs which has provided information and patches to adapt mod_jk to i5/OS. +</p> +<p> +You should have at least Apache 2.0.58 (product 5722DG1), a C Compiler and IFS. +Apache 2.0.58 is provided with the most recent set of PTFs for the iSeries Apache +server, which can be found at <a href="http://www.ibm.com/servers/eserver/iseries/software/http/"> +http://www.ibm.com/servers/eserver/iseries/software/http/</a> +</p> +<p> +The all latest Apache 2 for i5/OS V5R3 (or V5R4) is now 2.0.58 (as of 2007/04/17). +Be sure to have the latest PTFs loaded if you want to make use of jk 1.2.15 and higher. +NB: The latest mod_jk known to work on i5/OS V5R3 was 1.2.19. +</p> +<p> +New in i5/OS V5R4, UTF is required, also for Apache modules, as such Apache modules do not require +translations to/from EBCDIC but works should be done to port mod_jk 1.2.23 (and higher) to V5R4. + +From the V5R4 Infocenter : + +As of i5/OS(tm) V5R4, modules must be recompiled with a UTF locale. This creates an environment where locale-dependent C runtime functions assume +that string data is encoded in UTF-8. Any hardcoded constants can be encoded in UTF-8 by adding a #pragma convert(1208) statement in the module. +Additionally, input data from the client will no longer be converted to EBCDIC but will be passed as-is. +Output data sent from the module is not converted either so it must be encoded in ASCII or UTF8 as required. +APR and HTTP APIs as of V5R4, expect data in UTF-8. Note that several APIs have additional functions that allow a CCSID to be set to +indicate the encoding of the parameters being passed. Conversion functions between UTF-8 and EBCDIC have been added. +Be sure to review APIs used by your module to be aware of current changes. + +</p> +<p> +To configure mod_jk on System I use the CL source provided with the mod_jk source. +</p> +<ul> +<li> +Get the latest mod_jk source and untar it on a Windows or Unix boxes +</li> +<li> +Create a directory in IFS, ie /home/apache +</li> +<li> +Send the whole jk source directory to System I directory via FTP. +</li> +<li> +Then go to the System I command line : +</li> +</ul> +<p class="screen"><div align="left"><table width="80%" border="1" cellspacing="0" cellpadding="2" bgcolor="#000000"><tr><td bgcolor="#000000" align="left"><div class="screen">Create mod_jk library</div><code><nobr><em class="screen">===></em><b class="screen">CRTLIB MOD_JK TEXT(‘Apache mod'jk tomcat connector module')</b></nobr></code><br><div class="screen">Create service program source file</div><code><nobr><em class="screen">===></em><b class="screen">CRTSRCPF MOD_JK/QSRVSRC TEXT(‘Service program source file’)</b></nobr></code><br><div class="screen">Create the CL build program source file</div><code><nobr><em class="screen">===></em><b class="screen">CRTSRCPF FILE(MOD_JK/QCLSRC) TEXT(‘Build program source file’)</b></nobr></code><br><div class="screen">Edit the service program source file</div><code><nobr><em class="screen">===></em><b class="screen">STRSEU MOD_JK/QSRVSRC MOD_JK</b></nobr></code><br></td></tr></table></div></p> +<p> +In the edited file, specify that only jk_module should be exported : +<p class="screen"><div align="left"><table width="80%" border="1" cellspacing="0" cellpadding="2" bgcolor="#000000"><tr><td bgcolor="#000000" align="left"><div class="screen"> Columns . . : 1 71 Edit MOD_JK/QSRVSRC </div><div class="screen"> SEU==> MOD_JK </div><div class="screen"> *************** Beginning of data ************************************* </div><div class="screen">0001.00 STRPGMEXP PGMLVL(*CURRENT) </div><div class="screen">0002.00 EXPORT SYMBOL("jk_module") </div><div class="screen">0003.00 ENDPGMEXP </div><div class="screen"> ****************** End of data **************************************** </div></td></tr></table></div></p> +</p> +<p> +You could start to build all the modules of mod_jk (cases for V5R4 or previous releases): +</p> +<p class="screen"><div align="left"><table width="80%" border="1" cellspacing="0" cellpadding="2" bgcolor="#000000"><tr><td bgcolor="#000000" align="left"><div class="screen">Copy the CL build program source for i5/OS before V5R4 from IFS</div><code><nobr><em class="screen">===></em><b class="screen">CPYFRMSTMF FROMSTMF('/home/apache/jk/native/apache-2.0/bldjk.qclsrc') +</b></nobr></code><br><div class="screen">TOMBR('/QSYS.LIB/MOD_JK.LIB/QCLSRC.FILE/BLDJK.MBR') MBROPT(*REPLACE)</div><div class="screen">Build the CL build program</div><code><nobr><em class="screen">===></em><b class="screen">CRTCLPGM PGM(MOD_JK/BLDJK) SRCFILE(MOD_JK/QCLSRC) TEXT('Apache mod_jk build program')</b></nobr></code><br><div class="screen">Launch the build</div><code><nobr><em class="screen">===></em><b class="screen">CALL MOD_JK/BLDJK</b></nobr></code><br><div class="screen">If the build if successfull, copy the new mod_jk module</div><code><nobr><em class="screen">===></em><b class="screen">CRTDUPOBJ OBJ(MOD_JK) FROMLIB(MOD_JK) OBJTYPE(*SRVPGM) TOLIB(QHTTPSVR) NEWOBJ(MOD_JK)</b></nobr></code><br></td></tr></table></div></p> +<p class="screen"><div align="left"><table width="80%" border="1" cellspacing="0" cellpadding="2" bgcolor="#000000"><tr><td bgcolor="#000000" align="left"><div class="screen">Copy the CL build program source for i5/OS V5R4 from IFS</div><code><nobr><em class="screen">===></em><b class="screen">CPYFRMSTMF FROMSTMF('/home/apache/jk/native/apache-2.0/bldjk54.qclsrc') +</b></nobr></code><br><div class="screen">TOMBR('/QSYS.LIB/MOD_JK.LIB/QCLSRC.FILE/BLDJK54.MBR') MBROPT(*REPLACE)</div><div class="screen">Build the CL build program for i5/OS V5R4</div><code><nobr><em class="screen">===></em><b class="screen">CRTCLPGM PGM(MOD_JK/BLDJK54) SRCFILE(MOD_JK/QCLSRC) TEXT('Apache mod_jk build program') TGTRLS(*CURRENT)</b></nobr></code><br><div class="screen">Launch the build for i5/OS V5R4</div><code><nobr><em class="screen">===></em><b class="screen">CALL MOD_JK/BLDJK54</b></nobr></code><br><div class="screen">If the build if successfull, copy the new mod_jk module</div><code><nobr><em class="screen">===></em><b class="screen">CRTDUPOBJ OBJ(MOD_JK) FROMLIB(MOD_JK) OBJTYPE(*SRVPGM) TOLIB(QHTTPSVR) NEWOBJ(MOD_JK)</b></nobr></code><br></td></tr></table></div></p> +<p> +Next, you should restart your Apache 2.0 instance and enjoy this piece of OpenSource on System I. +</p> +<p class="screen"><div align="left"><table width="80%" border="1" cellspacing="0" cellpadding="2" bgcolor="#000000"><tr><td bgcolor="#000000" align="left"><div class="screen">ENDTCPSVR SERVER(*HTTP) HTTPSVR(MYSERVER)</div><div class="screen">STRTCPSVR SERVER(*HTTP) HTTPSVR(MYSERVER)</div></td></tr></table></div></p> +</blockquote></td></tr></table><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Building mod_jk for Apache on MacOS/X"><strong>Building mod_jk for Apache on MacOS/X</strong></a></font></td></tr><tr><td><blockquote> +<p> +Mac OS X (10.2.x) build notes : +</p> +<p> +Assuming that you are root : +</p> +<p class="screen"><div align="left"><table width="80%" border="1" cellspacing="0" cellpadding="2" bgcolor="#000000"><tr><td bgcolor="#000000" align="left"><div class="screen">For Apache 1.3:</div><code><nobr><em class="screen">[user@host] ~ $ </em><b class="screen">./configure --with-apxs=/usr/sbin/apxs</b></nobr></code><br><code><nobr><em class="screen">[user@host] ~ $ </em><b class="screen">cd apache-1.3</b></nobr></code><br><code><nobr><em class="screen">[user@host] ~ $ </em><b class="screen">make -f Makefile.apxs</b></nobr></code><br><code><nobr><em class="screen">[user@host] ~ $ </em><b class="screen">cp mod_jk.so /etc/libexec/httpd</b></nobr></code><br><div class="screen">For Apache 2.0:</div><code><nobr><em class="screen">[user@host] ~ $ </em><b class="screen">./configure --with-apxs=/usr/local/apache2/bin/apxs</b></nobr></code><br><div class="screen">(you should point to the directory where you installed Apache 2.0)</div><code><nobr><em class="screen">[user@host] ~ $ </em><b class="screen">cd apache-2.0</b></nobr></code><br><code><nobr><em class="screen">[user@host] ~ $ </em><b class="screen">make -f Makefile.apxs install</b></nobr></code><br></td></tr></table></div></p> +</blockquote></td></tr></table><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Getting mod_jk linked statically with Apache"><strong>Getting mod_jk linked statically with Apache</strong></a></font></td></tr><tr><td><blockquote> +<p> +mod_jk allows to install mod_jk in the Apache source tree to get a statically +linked mod_jk. Having mod_jk in the httpd executable brings some performance +improvements. The configure option --with-apache prepare mod_jk to install it +in the Apache source tree. +The option --with-apache works both for Apache-1.3 and Apache-2.0. +The examples below show how to get mod_jk in the httpd process. +</p> + +<table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td bgcolor="#828DA6"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Installation in Apache-2.0"><strong>Installation in Apache-2.0</strong></a></font></td></tr><tr><td><blockquote> +<p class="screen"><div align="left"><table width="80%" border="1" cellspacing="0" cellpadding="2" bgcolor="#000000"><tr><td bgcolor="#000000" align="left"><div class="screen"> /home/apache20/httpd-2.0.43 is the directory where the httpd-2.0 sources +are located. </div><code><nobr><em class="screen">[user@host] ~ $ </em><b class="screen">./configure --with-apache=/home/apache20/httpd-2.0.43</b></nobr></code><br><code><nobr><em class="screen">[user@host] ~ $ </em><b class="screen">make</b></nobr></code><br><div class="screen">Install the mod_jk library and other files in +/home/apache20/httpd-2.0.43/modules: </div><code><nobr><em class="screen">[user@host] ~ $ </em><b class="screen">make install</b></nobr></code><br><div class="screen"> It is not possible to configure Apache directly because the config.m4 of mod_jk must +be added to the configure of httpd-2.0. </div><code><nobr><em class="screen">[user@host] ~ $ </em><b class="screen">cd /home/apache20/httpd-2.0.43</b></nobr></code><br><code><nobr><em class="screen">[user@host] ~ $ </em><b class="screen">sh buildconf</b></nobr></code><br><code><nobr><em class="screen">[user@host] ~ $ </em><b class="screen">configure ... --with-mod_jk</b></nobr></code><br><code><nobr><em class="screen">[user@host] ~ $ </em><b class="screen">make</b></nobr></code><br><code><nobr><em class="screen">[user@host] ~ $ </em><b class="screen">make install</b></nobr></code><br></td></tr></table></div></p> +<p> +The enable-jk=share and enable-jk=static are not supported. --with-mod_jk only +allow static linking of mod_jk. +</p> +</blockquote></td></tr></table> + +<table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td bgcolor="#828DA6"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Installation in Apache-1.3"><strong>Installation in Apache-1.3</strong></a></font></td></tr><tr><td><blockquote> +<p class="screen"><div align="left"><table width="80%" border="1" cellspacing="0" cellpadding="2" bgcolor="#000000"><tr><td bgcolor="#000000" align="left"><div class="screen"> /home/apache/apache_1.3.27 is the directory where the apache-1.3 sources +are located. </div><code><nobr><em class="screen">[user@host] ~ $ </em><b class="screen">./configure --with-apache=/home/apache/apache_1.3.27</b></nobr></code><br><code><nobr><em class="screen">[user@host] ~ $ </em><b class="screen">make</b></nobr></code><br><div class="screen">Install the libjk library, mod_jk.c, includes and other files in +/home/apache/apache_1.3.27/src/modules/jk: </div><code><nobr><em class="screen">[user@host] ~ $ </em><b class="screen">make install</b></nobr></code><br><div class="screen"> Configure in the Apache sources: </div><code><nobr><em class="screen">[user@host] ~ $ </em><b class="screen">cd /home/apache/apache_1.3.27</b></nobr></code><br><code><nobr><em class="screen">[user@host] ~ $ </em><b class="screen">configure ... --enable-module=dir --disable-shared=dir \</b></nobr></code><br><code><nobr><em class="screen"> </em><b class="screen"> --activate-module=src/modules/jk/libjk.a \</b></nobr></code><br><code><nobr><em class="screen"> </em><b class="screen"> --disable-shared=jk</b></nobr></code><br><code><nobr><em class="screen">[user@host] ~ $ </em><b class="screen">make</b></nobr></code><br><code><nobr><em class="screen">[user@host] ~ $ </em><b class="screen">make install</b></nobr></code><br></td></tr></table></div></p> +<p> +The --enable-shared=jk is also working and builds a dso file. +</p> +<p class="screen"><div align="left"><table width="80%" border="1" cellspacing="0" cellpadding="2" bgcolor="#000000"><tr><td bgcolor="#000000" align="left"><div class="screen"> Just change the configure in the Apache sources: </div><code><nobr><em class="screen">[user@host] ~ $ </em><b class="screen">configure ... --enable-module=dir --enable-shared=dir \</b></nobr></code><br><code><nobr><em class="screen"> </em><b class="screen"> --activate-module=src/modules/jk/libjk.a \</b></nobr></code><br><code><nobr><em class="screen"> </em><b class="screen"> --enable-shared=jk</b></nobr></code><br></td></tr></table></div></p> +</blockquote></td></tr></table> + +</blockquote></td></tr></table></td></tr><!--FOOTER SEPARATOR--><tr><td colspan="2"><hr noshade size="1"></td></tr><!--PAGE FOOTER--><tr><td colspan="2"><div align="center"><font color="#525D76" size="-1"><em> + Copyright © 1999-2011, Apache Software Foundation + </em></font></div></td></tr></table></body></html>
\ No newline at end of file diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/docs/webserver_howto/printer/iis.html b/rubbos/app/tomcat-connectors-1.2.32-src/docs/webserver_howto/printer/iis.html new file mode 100644 index 00000000..498b71f0 --- /dev/null +++ b/rubbos/app/tomcat-connectors-1.2.32-src/docs/webserver_howto/printer/iis.html @@ -0,0 +1,684 @@ +<html><head><META http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><title>The Apache Tomcat Connector - Webserver HowTo - IIS HowTo</title><meta name="author" value="Henri Gomez"><meta name="email" value="hgomez@apache.org"><meta name="author" value="Gal Shachor"><meta name="email" value="shachor@il.ibm.com"><meta name="author" value="Yoav Shapira"><meta name="email" value="yoavs@apache.org"><link href="../../style.css" type="text/css" rel="stylesheet"></head><body bgcolor="#ffffff" text="#000000" link="#525D76" alink="#525D76" vlink="#525D76"><table border="0" width="100%" cellspacing="4"><!--PAGE HEADER--><tr><td colspan="2"><!--TOMCAT LOGO--><a href="http://tomcat.apache.org/"><img src="../../images/tomcat.gif" align="left" alt="Apache Tomcat" border="0"></a><!--APACHE LOGO--><a href="http://www.apache.org/"><img src="http://www.apache.org/images/asf-logo.gif" align="right" alt="Apache Logo" border="0"></a></td></tr><!--HEADER SEPARATOR--><tr><td colspan="2"><hr noshade size="1"></td></tr><tr><!--RIGHT SIDE MAIN BODY--><td width="80%" valign="top" align="left"><table border="0" width="100%" cellspacing="4"><tr><td align="left" valign="top"><h1>The Apache Tomcat Connector - Webserver HowTo</h1><h2>IIS HowTo</h2></td><td align="right" valign="top" nowrap="true"><img src="../../images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr></table><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Introduction"><strong>Introduction</strong></a></font></td></tr><tr><td><blockquote> +<p> +This document explains how to set up IIS to cooperate with Tomcat. +</p> + +<p> +Normally IIS can not execute Servlets and Java Server Pages (JSPs), +configuring IIS to use the JK ISAPI redirector plugin will let IIS send servlet and +JSP requests to Tomcat (and this way, serve them to clients). +</p> + +<p> +It is recommended that you also read the +<a href="../../generic_howto/workers.html">Workers HowTo</a> document +to learn how to setup the working entities between your web server and Tomcat Engines. +For more detailed configuration information consult the Reference Guide for +<a href="../../reference/workers.html">workers.properties</a>, +<a href="../../reference/uriworkermap.html">uriworkermap</a> +and <a href="../../reference/iis.html">IIS</a>. +</p> + + +<table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td bgcolor="#828DA6"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Document Conventions and Assumptions"><strong>Document Conventions and Assumptions</strong></a></font></td></tr><tr><td><blockquote> +<p> +${tomcat_home} is the root directory of tomcat. +Your Tomcat installation should have the following subdirectories: + +<ul> +<li> +${tomcat_home}\conf - Where you can place various configuration files +</li> +<li> +${tomcat_home}\webapps - Containing example applications +</li> +<li> +${tomcat_home}\bin - Where you place web server plugins +</li> +</ul> +</p> +<p> +In all the examples in this document ${tomcat_home} will be <b>c:\tomcat</b>. +A worker is defined to be a tomcat process that accepts work from the IIS server. +</p> +</blockquote></td></tr></table> + + +<table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td bgcolor="#828DA6"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Supported Configuration"><strong>Supported Configuration</strong></a></font></td></tr><tr><td><blockquote> +<p> +The IIS-Tomcat redirector was developed and tested on: +<ul> +<li> +WinNT4.0-i386 SP4/SP5/SP6a (should be able to work with other service packs), Win2K and WinXP and Win98 +</li> +<li> +IIS4.0 and PWS4.0 (numerous people have working IIS 5 and IIS 6 configurations) +</li> +<li> +Tomcat 3.2 and later, Tomcat 4.x, Tomcat 5 and 5.5 and Tomcat 6 +</li> +</ul> +</p> + +<p> +The redirector uses <b>ajp12</b> and <b>ajp13</b> to send requests to the Tomcat containers. There is also an option to use Tomcat in process, +more about the in-process mode can be found in the in process howto. +</p> +</blockquote></td></tr></table> + +<table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td bgcolor="#828DA6"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="IIS 5 and 6 Notes"><strong>IIS 5 and 6 Notes</strong></a></font></td></tr><tr><td><blockquote> +<p> +There are extra steps you need to take for configuring Tomcat with IIS 5 and 6. Please see the appropriate links from +<a href="http://wiki.apache.org/tomcat/Tomcat/Links">Tomcat Useful Links</a>. +</p> +</blockquote></td></tr></table> + +<table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td bgcolor="#828DA6"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="IIS 7 notes"><strong>IIS 7 notes</strong></a></font></td></tr><tr><td><blockquote> +<p> +There is a known bug in IIS that may result in incomplete log messages. See <a href="https://issues.apache.org/bugzilla/show_bug.cgi?id=45769">bug 45769</a> +for further details. +</p> +</blockquote></td></tr></table> + +<table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td bgcolor="#828DA6"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Who support ajp protocols ?"><strong>Who support ajp protocols ?</strong></a></font></td></tr><tr><td><blockquote> +<p> +The ajp12 protocol is only available in Tomcat 3.2.x and 3.3.x. +</p> + +<p> +The <b>ajp12</b> has been <b>deprecated</b> with Tomcat 3.3.x and you should use instead +<b>ajp13</b> which is the only ajp protocol known by Tomcat 4.x, 5 and 5.5 and Tomcat 6. +</p> + +<p> +Of course Tomcat 3.2.x and 3.3.x also support ajp13 protocol. +</p> + +<p> +Others servlet engines such as <b>jetty</b> have support for ajp13 protocol +</p> + +</blockquote></td></tr></table> + +<table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td bgcolor="#828DA6"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="How does it work ?"><strong>How does it work ?</strong></a></font></td></tr><tr><td><blockquote> +<p> +<ol> +<li> +The IIS-Tomcat redirector is an IIS plugin (filter + extension), IIS load the redirector plugin and calls its +filter function for each in-coming request. +</li> +<li> +The filter then tests the request URL against a list of URI-paths held inside uriworkermap.properties, +If the current request matches one of the entries in the list of URI-paths, +the filter transfers the request to the extension. +</li> +<li> +The extension collects the request parameters and forwards them to the appropriate worker using the defined +protocol like <b>ajp13</b>. +</li> +<li> +The extension collects the response from the worker and returns it to the browser. +</li> +</ol> +</p> +</blockquote></td></tr></table> + +</blockquote></td></tr></table><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Installation"><strong>Installation</strong></a></font></td></tr><tr><td><blockquote> +<p> +A pre-built version of the ISAPI redirector server plugin, isapi_redirect.dll, is available under +the win32/i386 directory of tomcat-connectors distribution. +For those using Netscape as your browser, try downloading a zip version of the file, if available. +There can be problems using Netscape to download DLL files. + +You can also build a copy locally from the source present in tomcat-connectors distribution. + +The Tomcat redirector requires three entities: + +<ul> +<li> +<b>isapi_redirect.dll</b> - The IIS server plugin, either obtain a pre-built DLL or build it yourself (see the build section). +</li> +<li> +<b><a href="../../reference/workers.html">workers.properties</a></b> - A file that describes the host(s) and port(s) used by the workers (Tomcat processes). +A sample workers.properties can be found under the conf directory. +</li> +<li> +<b><a href="../../reference/uriworkermap.html">uriworkermap.properties</a></b> - A file that maps URL-Path patterns to workers. +A sample uriworkermap.properties can be found under the conf directory as well. +</li> +</ul> +</p> + +<p> +The installation includes the following parts: + +<ul> +<li> +Configuring the ISAPI redirector with a default /examples context and checking that you can serve servlets with IIS. +</li> +<li> +Adding more contexts to the configuration. +</li> +</ul> +</p> + +</blockquote></td></tr></table><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Configuring the ISAPI Redirector"><strong>Configuring the ISAPI Redirector</strong></a></font></td></tr><tr><td><blockquote> +<p> +In this document I will assume that isapi_redirect.dll is placed in +<b>c:\tomcat\bin\win32\i386\isapi_redirect.dll</b> and +that the properties files which you created are in <b>c:\tomcat\conf</b>. +</p> +<p> +<ol> +<li> +In the registry, create a new registry key named +<b>"HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Jakarta Isapi Redirector\1.0"</b> +</li> +<li> +Add a string value with the name <b>extension_uri</b> and a value of <b>/jakarta/isapi_redirect.dll</b> +</li> +<li> +Add a string value with the name <b>log_file</b> and a value pointing to where you want your +log file to be (for example <b>c:\tomcat\logs\isapi.log</b>). +</li> +<li> +Add a string value with the name <b>log_level</b> and a value for your log level +(can be debug, info, error or emerg). +</li> +<li> +Add a string value with the name <b>worker_file</b> and a value which is the full path +to your workers.properties file (for example <b>c:\tomcat\conf\workers.properties</b>) +</li> +<li> +Add a string value with the name <b>worker_mount_file</b> and a value which is the full path +to your uriworkermap.properties file (for example <b>c:\tomcat\conf\uriworkermap.properties</b>) +</li> +<li> +Using the IIS management console, add a new virtual directory to your IIS/PWS web site. +The name of the virtual directory must be jakarta. +Its physical path should be the directory where you placed isapi_redirect.dll +(in our example it is c:\tomcat\bin\win32\i386). +While creating this new virtual directory assign it with execute access. +</li> +<li> +Using the IIS management console, add isapi_redirect.dll as a filter in your IIS/PWS web site. +The name of the filter should reflect its task (I use the name tomcat), +its executable must be our c:\tomcat\bin\win32\i386\isapi_redirect.dll. +For PWS, you'll need to use regedit and add/edit the <b>"Filter DLLs"</b> key under +<b>HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\W3SVC\Parameters</b>. +This key contains a "," separated list of dlls (full paths) - +you need to insert the full path to isapi_redirect.dll. +</li> +<li> +If you're using IIS 6.0 you must also do the following: +<br> +Using the IIS management console, add the Jakarta Isapi Redirector to the Web +Service Extensions. +<ol> +<li>Right-click on Web Service Extensions and choose Add a new Web Service +Extension.</li> +<li>Enter tomcat for the Extension Name.</li> +<li>Add the isapi_redirect.dll to the required files.</li> +<li>Check the Set extension status to Allowed.</li> +<li>Click on OK.</li> +</ol> +</li> +<li> +Restart IIS (stop + start the IIS service), make sure that the tomcat filter is marked with a green up-pointing arrow. +Under Win98 you may need to <b>cd WINDOWS\SYSTEM\inetsrv</b> and type PWS /stop +( the DLL and log files are locked - even if you click the stop button, +PWS will still keep the DLLs in memory. ). Type pws to start it again. +</li> +</ol> +</p> +<p> +That's all, you should now start Tomcat and ask IIS to serve you the /examples context. +Try <a href="http://localhost/examples/jsp/index.html">http://localhost/examples/jsp/index.html</a> for example and +execute some of the JSP examples. +</p> +<p> +If this does not work successfully, refer to the Troubleshooting section below for help on correcting the problem. +</p> + +<table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td bgcolor="#828DA6"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Adding additional Contexts"><strong>Adding additional Contexts</strong></a></font></td></tr><tr><td><blockquote> +<p> +The examples context is useful for verifying your installation, +but you will also need to add your own contexts. Adding a new context requires two operations: +</p> +<p> +<ol> +<li> +Adding the context to Tomcat (I am not going to talk about this). +</li> +<li> +Adding the context to the ISAPI redirector. +</li> +</ol> +</p> +<p> +Adding a context to the ISAPI redirector is simple, all you need to do is to edit +your uriworkermap.properties and to add a line that looks like: +</p> + +<div class="example"><pre> + /context/*=worker_name +</pre></div> + +<p> +Workers and their name are defined in workers.properties, by default workers.properties comes +with a single pre-configured worker named <b>"defworker"</b> so you can use it. +As an example, if you want to add a context named "shop", the line that you should add to +uriworkermap.properties will be: +</p> + +<div class="example"><pre> + /shop/*=defworker +</pre></div> + +After saving uriworkermap.properties restart IIS and it will serve the new context. +<p> +The above should be all you need for IIS to pass through to Tomcat any request for any URI which corresponds +to a Tomcat context (webapp). +</p> +</blockquote></td></tr></table> + +<table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td bgcolor="#828DA6"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Advanced Context Configuration"><strong>Advanced Context Configuration</strong></a></font></td></tr><tr><td><blockquote> +<p> +If your webiste is very busy (more than 100 requests/second, or more than 100 simultaneous client connections), +it might sometimes be desirable to have IIS serve static content (html, gif, jpeg etc.) directly, +even if these files are part of a context served by Tomcat. Allowing IIS to serve such files directly may + avoid the small overhead consisting of passing the request to Tomcat via the redirector, and may free up + Tomcat somewhat, by using it only to process requests that only Tomcat can handle (e.g. requests to JSP pages and java servlets). +</p> +<p> +For example, consider the html and gif files in the examples context : you could serve these files directly +with IIS; there is no need to serve them from the Tomcat process. +</p> +<p><font color="#ff0000">However, you should be very careful when you implement the following configuration style, because by doing so you are +in fact providing a "back-door" to IIS, and allowing it to serve files out of a Tomcat context without Tomcat's knowledge, +thus bypassing any security +restrictions which Tomcat itself and the Tomcat context (webapp) may place on those files.</font></p> +<p> +Making IIS serve static files that are part of the Tomcat contexts requires the following: +<ol> +<li> +Configuring IIS to know about the Tomcat contexts +</li> +<li> +Configuring the redirector to leave the static files for IIS +</li> +</ol> +</p> + +<p> +Adding a Tomcat context to IIS requires the addition of a new IIS virtual directory that covers the Tomcat context. +For example adding a /example IIS virtual directory that covers the c:\tomcat\webapps\examples directory. +</p> + +<p> +Configuring the redirector is somewhat harder, you will need to specify the exact +URL-Path pattern(s) which you want Tomcat to handle (usually only JSP files and servlets). +This requires a change to the uriworkermap.properties : + +<div class="example"><pre> + For the examples context it requires to replace the following line + /examples/*=defworker + with the following two lines + /examples/*.jsp=defworker + /examples/servlet/*=defworker +</pre></div> +</p> + +<p> +As you can see the second configuration is more explicit, it actually instruct the redirector +to redirect only requests to resources under /examples/servlet/ and resources under /examples/ +whose name ends with .jsp. +</p> + +<p> +You can even be more explicit and provide lines such as: + +<div class="example"><pre> + /example/servletname=defworker +</pre></div> +</p> + +<p> +that instructs the redirector to redirect all requests whose URL-path matches the leading string "/example/servletname" +to the worker named defworker. +</p> + +</blockquote></td></tr></table> + +<table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td bgcolor="#828DA6"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Protecting the content of your Tomcat contexts"><strong>Protecting the content of your Tomcat contexts</strong></a></font></td></tr><tr><td><blockquote> +<p>Once again, be aware that by allowing IIS to access the content of your Tomcat context directly, you are +potentially bypassing Tomcat's protection of that content. You should thus make sure to protect this content +at the IIS level if needed, by using the corresponding IIS management console functions. +</p> +<p> +In particular, each servlet application (context) has a special directory named WEB-INF, +which contains sensitive configuration data and Java classes, and which should always be kept hidden from web users. +Using the IIS management console it is possible to protect the WEB-INF directory from user access, but considering that +this is a general requirement, and considering that it is easy to forget to implement this protection +at the IIS level, the redirector plugin does it automatically for you, and it will reject any request +which contains WEB-INF in its URL-path. +</p> +</blockquote></td></tr></table> + +<table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td bgcolor="#828DA6"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Advanced Worker Configuration"><strong>Advanced Worker Configuration</strong></a></font></td></tr><tr><td><blockquote> +<p> +Sometimes you may want to serve different contexts with different Tomcat processes +(for example to spread the load among different machines). +To achieve such a goal you will need to define several workers and assign each context to its own worker. +</p> +<p> +Defining additional workers is done in the workers.properties file. This file includes two types of entries: +</p> + +<p> +<div class="example"><pre> + # An entry that lists all the workers defined + worker.list=worker1, worker2 + # Entries that define the host and port associated with each of these workers + worker.worker1.host=localhost + worker.worker1.port=8009 + worker.worker1.type=ajp13 + worker.worker2.host=otherhost + worker.worker2.port=8009 + worker.worker2.type=ajp13 +</pre></div> +</p> + +<p> +The above example defined two workers, now we can use these workers to serve two different contexts +each with its own worker: +<div class="example"><pre> + example uriworkermap.properties fragment + /examples/*=worker1 + /webpages/*=worker2 +</pre></div> +</p> + +<p> +As you can see the <b>examples</b> context is served by <b>worker1</b> while the +<b>webpages</b> context is served by <b>worker2</b>. +</p> + +<p> +More information on using and configuring workers in the <a href="../../generic_howto/workers.html">Workers HowTo</a> +and in the <a href="../../reference/workers.html">worker.properties configuration reference</a>. +</p> + +</blockquote></td></tr></table> + +</blockquote></td></tr></table><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Building ISAPI redirector"><strong>Building ISAPI redirector</strong></a></font></td></tr><tr><td><blockquote> +<p> +The redirector was developed using Visual C++ Ver.6.0, so having this environment is a prerequisite if you want +to perform a custom build. You should also have the IIS developer SDK. + +The steps that you need to take are: +<ul> +<li> +Change directory to the isapi plugins source directory. +</li> +<li> +Make the source with MSDEV +</li> +</ul> +<p class="screen"><div align="left"><table width="80%" border="1" cellspacing="0" cellpadding="2" bgcolor="#000000"><tr><td bgcolor="#000000" align="left"><div class="screen">Change directory to the isapi plugins source directory</div><code><nobr><em class="screen">c:\></em><b class="screen">cd c:\home\apache\jk\iis</b></nobr></code><br><div class="screen">Build the sources using MSDEV</div><code><nobr><em class="screen">c:\></em><b class="screen">MSDEV isapi.dsp /MAKE ALL</b></nobr></code><br></td></tr></table></div></p> +</p> +<p> +If msdev is not in your path, enter the full path to msdev.exe. +This will build both release and debug versions of the redirector plugin. +An alternative will be to open the isapi workspace file (isapi.dsw) in msdev and +build it using the build menu. +</p> +</blockquote></td></tr></table><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Troubleshooting"><strong>Troubleshooting</strong></a></font></td></tr><tr><td><blockquote> +<p> +It is easy to have the ISAPI redirector not work the first time you try to install it. +</p> +<p> +If this happens to you, here are some steps to follow to try to correct the problem. +</p> +<p> +These steps aren't guaranteed to cover all possible problems, +but they should help find the typical mistakes. +</p> +<p> +If you make any corrections during these steps, restart the IIS service as described above in the last step +of the installation, then retry the step. +</p> + +<p>To enable error tracking, make sure web site activity is being logged. +For PWS 4.0 make sure "Save Web Site Activity Log" is checked in the Advanced Options of the Personal Web Manager. +</p> + +<p> +Note: These steps assume your <b>worker_mount_file</b> setting points to an unmodified copy of the +<b>uriworkermap.properties</b> file.<br> +Results may be misleading if <b>worker_mount_file</b> points to a modified <b>uriworkermap.properties</b> +or the <b>uriworkermap.properties-auto</b> file.<br> +It is also assumed that the <b>"/examples" context</b> works correctly if you access Tomcat directly. +</p> + +<table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td bgcolor="#828DA6"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Win98"><strong>Win98</strong></a></font></td></tr><tr><td><blockquote> +<p> +Start the IIS service and Tomcat. +</p> +<p> +Check for the presence of the ISAPI redirector log file you specified in the log_file setting. +If not found, verify the following: +</p> +<ul> +<li> +Check the "Filter DLLs" setting in the "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\W3SVC\Parameters" +key and make sure the path is correct. +</li> +<li> +Check the spelling of the "HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Jakarta Isapi Redirector\1.0" key. +Case isn't important, but an incorrect letter will prevent the isapi_redirect.dll from finding its registry settings. +</li> +<li> +Check the log_file setting for typos, name and data. Also insure the directory in which the log file will appear already exists. +</li> +If the above are set correctly, the ISAPI redirector should be able to create the log file. +</ul> +<p> +Invoke the URL <a href="http://localhost/examples/jsp/index.html">http://localhost/examples/jsp/index.html</a> +in your browser. +Case is important in Tomcat. The characters following "localhost" in the URL must be lower case. +If the page fails to appear, stop the IIS service (required to view the IIS log file). +Then examine the last line in the IIS log file in found in SYSTEM/LogFiles/W3SVC1 : +</p> +<p> +If the last line contains: +</p> +<div class="example"><pre> + GET "/examples/jsp/index.html HTTP/1.1" 404 +</pre></div> +<p> +then the ISAPI redirector is not recognising that it should be handling requests for the "/examples" context. +Check the following: +</p> +<ul> +<li> +Check the extension_uri name for typos. +</li> +<li> +Check the worker_file setting for typos, name and data. +</li> +<li> +Check the worker_mount_file setting typos, name and data. +</li> +If these are set correctly, the ISAPI redirector should recognise that it should handle requests for the "/examples" context. +</ul> + +<p>If the last line contains something like: +</p> + +<div class="example"><pre> + GET "/jakarta/isapi_redirect.dll HTTP1.1" +</pre></div> + +<p> +then the ISAPI redirector is recognising that it should handle the request, +but is not successful at getting Tomcat to service the request. +</p> + +<p> +You should check the HTTP error code following GET "/..." : +</p> + +<div class="example"><pre> + Error 404 + GET "/..." 404 +</pre></div> + +<ul> +<li> +Make sure you entered the URL correctly. +</li> +<li> +Make sure the virtual directory created was called "jakarta". +It should display in Personal Web Manager as "/jakarta" (without the quotes). +</li> +<li> +Make sure the extension_uri data begins with "/jakarta/" (without the quotes). +</li> +</ul> + +<div class="example"><pre> + Error 500 + GET "/..." 500 +</pre></div> + +<ul> +<li> +Make sure that "isapi_redirect.dll" follows "/jakarta/" in the extension_uri setting. +</li> +<li> +Check the workers.properties file and make sure the port setting for worker.ajp12.port is the same as the port specified in the server.xml for the "Apache AJP12 support". +</li> +</ul> + +<div class="example"><pre> + Error 200 or 403 + GET "/..." 200 + GET "/..." 403 +</pre></div> + +<ul> +<li> +Make sure you have checked Execute Access +for the jakarta virtual directory in the Advanced Options of the Personal Web Manager. +</li> +</ul> + +<p> +If the above settings are correct, the index.html page should appear in your browser. +You should also be able to click the Execute links to execute the JSP examples. +</p> + +</blockquote></td></tr></table> + +<table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td bgcolor="#828DA6"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="WinNT/Win2K/WinXP"><strong>WinNT/Win2K/WinXP</strong></a></font></td></tr><tr><td><blockquote> +<p> +Start the World Wide Web Publishing Service and Tomcat. +</p> +<p> +Check for the presence of the ISAPI redirector log file you specified in the log_file setting. +If not found, check the following: +</p> +<ul> +<li> +Check the "executable" you set for the filter in the IIS Management Console and make sure the path is correct. +</li> +<li>Check the spelling of the "HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Jakarta Isapi Redirector\1.0" key. +Case isn't important, but an incorrect letter will prevent the isapi_redirect.dll from finding its registry settings. +</li> +<li> +Check the log_file setting for typos, name and data. Also insure the directory in which the log file will appear already exists. +</li> +If the above are set correctly, the ISAPI redirector should be able to create the log file. +</ul> + +<p> +Check the tomcat filter you added and make sure its status shows a green upward-pointing arrow. +If not, check the following: +</p> +<ul> +<li> +Check the worker_file setting for typos, name and data. +</li> +<li> +Check the worker_mount_file setting typos, name and data. +</li> +If the above are set correctly, the green upward-pointing arrow should appear, even if the other settings are wrong. +</ul> + +<p> +Invoke the URL <a href="http://localhost/examples/jsp/index.html">http://localhost/examples/jsp/index.html</a> +in your browser. Case is important in Tomcat. The characters following "localhost" in the URL must be lower case. +If the page fails to appear, examine the last line in the IIS server log file in found in SYSTEM32/LogFiles/W3SVC1. +</p> + +<p> +The last line should contain something like: GET "/jakarta/isapi_redirect.dll HTTP1.1", +which indicates the ISAPI redirector is recognising that it should handle the request. +</p> + +<p> +You should check the HTTP error code following GET "/..." : +</p> + +<div class="example"><pre> + Error 404 + GET "/..." 404 +</pre></div> + +<ul> +<li> +Make sure you entered the URL correctly. +</li> +</ul> + +<div class="example"><pre> + Error 500 + GET "/..." 500 +</pre></div> + +<ul> +<li> +Make sure the virtual directory created was called "jakarta". +</li> +<li> +Make sure that the extension_uri setting is correct. +</li> +<li> +Check the workers.properties file and make sure the port setting for worker.ajp12.port is the same as the port specified in the server.xml for the "Apache AJP12 support". +</li> +</ul> + +<div class="example"><pre> + Error 200 or 403 + GET "/..." 200 + GET "/..." 403 +</pre></div> + +<ul> +<li> +Make sure you have checked Execute Access for the jakarta virtual directory in the +Advanced Options of the Personal Web Manager. +</li> +</ul> + +<p> +If the above settings are correct, the index.html page should appear in your browser. +You should also be able to click the Execute links to execute the JSP examples. +</p> +</blockquote></td></tr></table> + + +</blockquote></td></tr></table></td></tr><!--FOOTER SEPARATOR--><tr><td colspan="2"><hr noshade size="1"></td></tr><!--PAGE FOOTER--><tr><td colspan="2"><div align="center"><font color="#525D76" size="-1"><em> + Copyright © 1999-2011, Apache Software Foundation + </em></font></div></td></tr></table></body></html>
\ No newline at end of file diff --git a/rubbos/app/tomcat-connectors-1.2.32-src/docs/webserver_howto/printer/nes.html b/rubbos/app/tomcat-connectors-1.2.32-src/docs/webserver_howto/printer/nes.html new file mode 100644 index 00000000..efb8f5a5 --- /dev/null +++ b/rubbos/app/tomcat-connectors-1.2.32-src/docs/webserver_howto/printer/nes.html @@ -0,0 +1,482 @@ +<html><head><META http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><title>The Apache Tomcat Connector - Webserver HowTo - SunOne -- Netscape/iPlanet HowTo</title><meta name="author" value="Henri Gomez"><meta name="email" value="hgomez@apache.org"><meta name="author" value="Jim Jagielski"><meta name="email" value="jim@apache.org"><meta name="author" value="Gal Shachor"><meta name="email" value="shachor@il.ibm.com"><meta name="author" value="Mladen Turk"><meta name="email" value="mturk@apache.org"><link href="../../style.css" type="text/css" rel="stylesheet"></head><body bgcolor="#ffffff" text="#000000" link="#525D76" alink="#525D76" vlink="#525D76"><table border="0" width="100%" cellspacing="4"><!--PAGE HEADER--><tr><td colspan="2"><!--TOMCAT LOGO--><a href="http://tomcat.apache.org/"><img src="../../images/tomcat.gif" align="left" alt="Apache Tomcat" border="0"></a><!--APACHE LOGO--><a href="http://www.apache.org/"><img src="http://www.apache.org/images/asf-logo.gif" align="right" alt="Apache Logo" border="0"></a></td></tr><!--HEADER SEPARATOR--><tr><td colspan="2"><hr noshade size="1"></td></tr><tr><!--RIGHT SIDE MAIN BODY--><td width="80%" valign="top" align="left"><table border="0" width="100%" cellspacing="4"><tr><td align="left" valign="top"><h1>The Apache Tomcat Connector - Webserver HowTo</h1><h2>SunOne -- Netscape/iPlanet HowTo</h2></td><td align="right" valign="top" nowrap="true"><img src="../../images/void.gif" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr></table><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Introduction"><strong>Introduction</strong></a></font></td></tr><tr><td><blockquote> +<p> +This document explains how to set up Sun ONE Web Server previously known as +Netscape web servers to cooperate with Tomcat. +</p> + +<p> +Normally the Sun ONE Web Servers come with their own Servlet engine, +but you can also configure them to send servlet and JSP requests to Tomcat +using the NSAPI redirector plugin. +</p> + +<p> +It is recommended that you also read the <a href="../../generic_howto/workers.html">Workers HowTo</a> document +to learn how to setup the working entities between your web server and Tomcat Engines. +</p> + + +<table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td bgcolor="#828DA6"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Document Conventions and Assumptions"><strong>Document Conventions and Assumptions</strong></a></font></td></tr><tr><td><blockquote> +<p> +${tomcat_home} is the root directory of tomcat. +Your Tomcat installation should have the following subdirectories: + +<ul> +<li> +${tomcat_home}\conf - Where you can place various configuration files +</li> +<li> +${tomcat_home}\webapps - Containing example applications +</li> +<li> +${tomcat_home}\bin - Where you place web server plugins +</li> +</ul> +</p> +<p> +In all the examples in this document ${tomcat_home} will be <b>c:\tomcat</b>. +A worker is defined to be a tomcat process that accepts work from the Sun ONE Web Server. +</p> +</blockquote></td></tr></table> + + +<table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td bgcolor="#828DA6"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Supported Configuration"><strong>Supported Configuration</strong></a></font></td></tr><tr><td><blockquote> +<p> +The NSAPI-Tomcat redirector was developed and tested on: +<ul> +<li> +WINNT 2000/XP/2003 (should be able to work with other service packs) and some Unixes +</li> +<li> +Sun ONE Web Server 6.1 +</li> +<li> +Tomcat 4.1.x , Tomcat 5.0.x and Tomcat 5.5.x +</li> +</ul> +</p> + +<p> +The redirector uses <b>ajp12</b> and <b>ajp13</b> to send requests to the Tomcat containers. +There is also an option to use Tomcat in process, +more about the in-process mode can be found in the in process howto. +</p> +</blockquote></td></tr></table> + +<table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td bgcolor="#828DA6"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Who support ajp protocols ?"><strong>Who support ajp protocols ?</strong></a></font></td></tr><tr><td><blockquote> +<p> +The ajp12 protocol is only available in Tomcat 3.2.x and 3.3.x. +</p> + +<p> +The <b>ajp12</b> has been <b>deprecated</b> with Tomcat 3.3.x and you should use instead +<b>ajp13</b> which is the only ajp protocol known by Tomcat 4.0.x, 4.1.x, 5.0.x, 5.5.x and 6. +</p> + +<p> +Of course Tomcat 3.2.x and 3.3.x also support ajp13 protocol. +</p> + +<p> +Others servlet engines such as <b>jetty</b> have support for ajp13 protocol +</p> + +</blockquote></td></tr></table> + + +<table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td bgcolor="#828DA6"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="How does it work ?"><strong>How does it work ?</strong></a></font></td></tr><tr><td><blockquote> +<p> +<ol> +<li> +The NSAPI-Tomcat redirector is an Netscape service step plugin, +Netscape load the redirector plugin and calls its service handler +function for request that are assigned to the "servlet" configuration object. +</li> +<li> +For each in-coming request Netscape will execute the set of NameTrans directives +that we added to obj.conf, the assign-name function will check if it's from +parameter matches the request URL. +</li> +<li> +If a match is found, assign-name will assign the servlet object name to the request. +This will cause Netscape to send the request to the servlet configuration object. +</li> +<li> +Netscape will execute our jk_service extension. The extension collects the +request parameters and forwards them to the appropriate worker using the ajp13 protocol +(the worker="defworker" parameter in jk_service inform it that the worker for this request is named <b>defworker</b>). +the workers properties files, <b>workers.properties</b>, will indicate that defworker use ajp13 protocol. +</li> +<li> +The extension collects the response from the worker and returns it to the browser. +</li> +</ol> +</p> +</blockquote></td></tr></table> + +</blockquote></td></tr></table><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Installation"><strong>Installation</strong></a></font></td></tr><tr><td><blockquote> +<p> +A pre-built version of the NSAPI redirector, nsapi_redirect.dll, may be available under +the win32/i386 directory of tomcat-connectors distribution. +For those using Netscape as your browser, try downloading a zip version of the file, if available. + +You can also build a copy locally from the source present in tomcat-connectors distribution. + + +The Tomcat redirector requires two entities: +<ul> +<li> +nsapi_redirect.dll (Windows) -or- nsapi_redirector.so (Unix) - The NSAPI server plugin, either obtain a pre-built DLL/so or build it yourself +(see the build section). +</li> +<li> +workers.properties - A file that describes the host(s) and port(s) used by the workers (Tomcat processes). +A sample workers.properties can be found under the conf directory. +</li> +</ul> + +The installation includes the following parts: + +<ul> +<li> +Configuring the NSAPI redirector with a default /examples context and checking that you can serve servlets +with Netscape. +</li> +<li> +Adding more contexts to the configuration. +</li> +</ul> + +</p> +</blockquote></td></tr></table><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Configuring the NSAPI Redirector"><strong>Configuring the NSAPI Redirector</strong></a></font></td></tr><tr><td><blockquote> +<p> +In this document we'll assume that nsapi_redirect.dll is placed in +<b>c:\jk\lib\nsapi_redirect.dll</b>, the properties file is in<b>c:\jk\conf</b> +and you created a log directory <b>c:\jk\logs</b> +</p> + +<ul> +<li> +If the built in servlet support is working disable it. +</li> +<li> +Add the redirector plugin into the Netscape server configuration. +Edit your server <b>magnus.conf</b> and add the following lines: +</li> +</ul> + +<div class="example"><pre> + + Init fn="load-modules" funcs="jk_init,jk_service" shlib="c:/jk/lib/nsapi_redirect.dll" shlib_flags="(global|now)" + Init fn="jk_init" worker_file="c:/jk/conf/workers.properties" log_level="debug" log_file="c:/jk/logs/nsapi.log" shm_file="c:/jk/logs/jk_shm" +</pre></div> +<ul> +<li> +Edit your server <b>obj.conf</b> and add the following lines: +</li> +</ul> +<div class="example"><pre> + + + In the default object NameTrans section + <Object name="default"> + + NameTrans fn="assign-name" from="/servlets-examples(|/*)" name="jknsapi" + NameTrans fn="assign-name" from="/jsp-examples(|/*)" name="jknsapi" + .... + </Object> + + Create a new configuration object by adding the following lines to the end of the obj.conf file + + <Object name="jknsapi"> + ObjectType fn=force-type type=text/plain + Service fn="jk_service" method="*" worker="worker1" + </Object> +</pre></div> + +<ul> +<li> +Edit your worker definition file <b>workers.properties</b>. You should at least choose a connection pool size: +</li> +</ul> + +<div class="example"><pre> + #An entry that lists all the workers defined. For example: + worker.list=worker1 + + # Entries that define the host and port associated with these workers. + worker.worker1.host=localhost + worker.worker1.port=8009 + worker.worker1.type=ajp13 + worker.worker1.connection_pool_size=50 +</pre></div> + +<ul> +<li> +Restart Web Server (stop and start the server) +</li> +</ul> + +<p> +That's all, now you should start tomcat and ask for http://server:port/servlets-examples/ +</p> +<p><font color="#ff0000"> +The file <b>obj.conf</b> seems to be sensitive to leading white space in lines, especially in +the <b>Object</b> element. Make sure you have no leading white space (no indentation) +on any line of this file. +</font></p> + +<table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td bgcolor="#828DA6"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Adding additional Contexts"><strong>Adding additional Contexts</strong></a></font></td></tr><tr><td><blockquote> +<p> +The examples context is useful for verifying your installation, but you will also need to add your own contexts. +Adding a new context requires two operations: +</p> +<ul> +<li> +Adding the context to Tomcat (I am not going to talk about this). +</li> +<li> +Assigning the NSAPI redirector to handle this context. +</li> +</ul> + +<p> +Assigning the NSAPI redirector to handle this context is simple, +all you need to do is to edit <b>obj.conf</b> and add a NameTrans line that looks like: +</p> + +<div class="example"><pre> + NameTrans fn="assign-name" from="/<context name>/*" name="jknsapi" +</pre></div> + +<p> +After saving <b>obj.conf</b> restart Netscape and it will serve the new context. +</p> +</blockquote></td></tr></table> + +<table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td bgcolor="#828DA6"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Advanced Context Configuration"><strong>Advanced Context Configuration</strong></a></font></td></tr><tr><td><blockquote> +<p> +Sometimes it is better to have Netscape serve the static pages (html, gif, jpeg etc.) +even if these files are part of a context served by Tomcat. For example, consider the html and gif files in the examples context, there is no need to serve them from the Tomcat process, Netscape will suffice. +</p> +<p> +Making Netscape serve static files that are part of the Tomcat contexts requires the following: +</p> +<ul> +<li> +Configuring Netscape to know about the Tomcat contexts +</li> +<li> +Make sure that the WEB-INF directory is protected from access. +</li> +<li> +Configuring Netscape to assign the NSAPI redirector only specific requests that requires JSP/Servlet handling. +</li> +</ul> + +<p> +Adding a Tomcat context to Netscape requires the addition of a new Netscape virtual directory +that covers the Tomcat context. +</p> + +<p> +For example, adding a /example Netscape virtual directory that +covers the <b>c:\tomcat\webapps\examples</b> directory. +</p> + +<p> +To add a new virtual directory add the following line to your <b>obj.conf</b>: +</p> + +<div class="example"><pre> + NameTrans fn=pfx2dir from=/examples dir="c:/tomcat/webapps/examples" +</pre></div> + +<p> +WEB-INF protection requires some explanation; Each servlet application (context) has a special directory named <b>WEB-INF</b>, +this directory contains sensitive configurations data and Java classes and must be kept hidden from web users. +WEB-INF can be protected by adding the following line to the PathCheck section in the default configuration object: +</p> + +<div class="example"><pre> + PathCheck fn="deny-existence" path="*/WEB-INF/*" + + This line instructs the Netscape server to reject any request with a URL that contain the path /WEB-INF/. +</pre></div> + +<p> +Configuring Netscape to assign the NSAPI redirector only specific requests is somewhat harder, +you will need to specify the exact URL-Path pattern(s) that you want Tomcat to handle +(usually only JSP files and servlets). +</p> + +<p> +This requires a change to NameTrans portion of <b>obj.conf</b>. +</p> + +<div class="example"><pre> + For the examples context it requires to replace the following line: + + NameTrans fn="assign-name" from="/examples/*" name="jknsapi" + + with the following two lines: + + NameTrans fn="assign-name" from="/examples/jsp/*.jsp" name="jknsapi" + NameTrans fn="assign-name" from="/examples/servlet/*" name="jknsapi" +</pre></div> + +<p> +As you can see the second configuration is more explicit, it actually instructs +Netscape to assign the redirector with only requests to resources under +<b>/examples/servlet/</b> and resources under <b>/examples/</b> whose name ends with <b>.jsp</b>. +</p> + +<p> +You can be even more explicit and provide lines such as: +</p> + +<div class="example"><pre> + NameTrans fn="assign-name" from="/examples/servletname" name="jknsapi" + + Instructs Netscape to assign the redirector request whose URL-Path equals /example/servletname +</pre></div> + +</blockquote></td></tr></table> + +<table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td bgcolor="#828DA6"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Advanced Worker Configuration"><strong>Advanced Worker Configuration</strong></a></font></td></tr><tr><td><blockquote> +<p> +Sometimes you want to serve different contexts with different Tomcat processes +(for example to spread the load among different machines). +To achieve such goal you will need to define several workers and assign each context with its own worker. +</p> + +<p> +Defining workers is done in <b>workers.properties</b>, this file includes two types of entries: +</p> + +<div class="example"><pre> + #An entry that lists all the workers defined. For example: + worker.list=worker1,worker2 + + # Entries that define the host and port associated with these workers. + worker.worker1.host=localhost + worker.worker1.port=8009 + worker.worker1.type=ajp13 + + worker.worker2.host=otherhost + worker.worker2.port=8009 + worker.worker2.type=ajp13 +</pre></div> + +<p> +The above examples defined two workers, now we can use these workers to serve two different +contexts each with it's own worker. +Submitting requests to different workers is accomplished by using multiple Service directives +in the servlet configuration Object, each with a different path pattern parameter. +</p> + +<p> +For example, if we want to submit the <b>/examples</b> context to the worker named <b>worker1</b> and the +<b>/webpages</b> context to the worker named <b>worker2</b> we should use the following configuration: +</p> + +<div class="example"><pre> + <Object name="jknsapi"> + ObjectType fn=force-type type=text/plain + Service fn="jk_service" worker="worker1" path="/examples/*" + Service fn="jk_service" worker="worker2" path="/webpages/*" + Service fn="jk_service" worker="worker1" + </Object> +</pre></div> + +<p> +More informations on using and configuring workers in the <a href="../../generic_howto/workers.html">Workers HowTo</a> +and in the <a href="../../reference/workers.html">worker.properties configuration reference</a>. + +</p> +</blockquote></td></tr></table> + +</blockquote></td></tr></table><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Building NSAPI DLL redirector for Windows"><strong>Building NSAPI DLL redirector for Windows</strong></a></font></td></tr><tr><td><blockquote> +<p> +The redirector was developed using Visual C++ Ver.6.0, so having this environment is a prereq if you want +to perform a custom build. You should also have NES developer SDK + +The steps that you need to take are: +<ul> +<li> +Change directory to the nsapi plugins source directory. +</li> +<li> +Edit <b>nsapi.dsp</b> and update the include and library path to reflect your own Netscape server installation +(search for a <b>/I compiler</b> option and <b>/libpath</b> linker option) +</li> +<li> +Make the source with MSDEV +</li> +</ul> +<screendos> +<notedos>Change directory to the nsapi plugins source directory</notedos> +<code><nobr><em class="screen">c:\></em><b class="screen">cd c:\home\apache\jk\nsapi</b></nobr></code><br> +<notedos>Build the sources using MSDEV</notedos> +<code><nobr><em class="screen">c:\></em><b class="screen">MSDEV nsapi.dsp /MAKE ALL</b></nobr></code><br> +</screendos> +</p> +<p> +If msdev is not in your path, enter the full path to msdev.exe. +This will build both release and debug versions of the redirector plugin. +An alternative will be to open the nsapi workspace file (nsapi.dsw) in msdev and +build it using the build menu. +</p> +</blockquote></td></tr></table><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Building NSAPI so plugin redirector for Unix"><strong>Building NSAPI so plugin redirector for Unix</strong></a></font></td></tr><tr><td><blockquote> +<p> +The redirector requires either gcc (Linux) or gcc or the Sun cc compiler (Solaris). + +The steps that you need to take are: +<ul> +<li> +Change directory to the nsapi plugins source directory (src/native). +</li> +<li> +configure for Netscape/iPlanet/SunONE webserver. +</li> +<li> +Change directory to the nsapi netscape directory (./netstape). +</li> +<li> +Set environment variables JAVA_HOME resp. SUITSPOT_HOME to the location of your Java installation +resp. Netscape server installation. Depending on the web server version, you must add the subdirectory +"plugins" to SUITSPOT_HOME. +The variable is correct, if the file $SUITSPOT_HOME/include/nsapi.h exists. +</li> +<li> +Edit <b>Makefile.solaris</b> resp. <b>Makefile.linux</b> and update the variables according to your needs. +In the Solaris Makefile, you need to switch the commented lines in order to use the Sun compiler cc +instead of GNU gcc. +</li> +<li> +Make the source with gmake. +</li> +</ul> +<screendos> +<notedos>Change directory to the nsapi plugins source directory</notedos> +<code><nobr><em class="screen">c:\></em><b class="screen">cd /usr/local/src/tomcat-connectors-xxx-src/native</b></nobr></code><br> +<notedos>configure for Netscape/iPlanet/SunONE webserver</notedos> +<code><nobr><em class="screen">c:\></em><b class="screen">./configure --enable-netscape</b></nobr></code><br> +<notedos>Change directory to the nsapi netscape directory</notedos> +<code><nobr><em class="screen">c:\></em><b class="screen">cd netscape</b></nobr></code><br> +<notedos>Set JAVA_HOME (ksh example)</notedos> +<code><nobr><em class="screen">c:\></em><b class="screen">export JAVA_HOME=/path/to/my/java</b></nobr></code><br> +<notedos>Set SUITSPOT_HOME (ksh example)</notedos> +<code><nobr><em class="screen">c:\></em><b class="screen">export SUITSPOT_HOME=/path/to/my/netscape/server</b></nobr></code><br> +<notedos>Edit the Makefile</notedos> +<code><nobr><em class="screen">c:\></em><b class="screen">vi Makefile.solaris</b></nobr></code><br> +<notedos>Make the source with gmake</notedos> +<code><nobr><em class="screen">c:\></em><b class="screen">gmake -f Makefile.solaris</b></nobr></code><br> +</screendos> +</p> +<p> +After the build, you will have the required nsapi_redirector.so plugin. +</p> +</blockquote></td></tr></table></td></tr><!--FOOTER SEPARATOR--><tr><td colspan="2"><hr noshade size="1"></td></tr><!--PAGE FOOTER--><tr><td colspan="2"><div align="center"><font color="#525D76" size="-1"><em> + Copyright © 1999-2011, Apache Software Foundation + </em></font></div></td></tr></table></body></html>
\ No newline at end of file |