summaryrefslogtreecommitdiffstats
path: root/rubbos/app/tomcat-connectors-1.2.32-src/xdocs/webserver_howto/nes.xml
blob: 6f86efde8747fc74cd93401ba78588d1c5ba418c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE document [
  <!ENTITY project SYSTEM "project.xml">
]>
<document url="nes.html">

  &project;
<copyright>
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
   this work for additional information regarding copyright ownership.
   The ASF licenses this file to You under the Apache License, Version 2.0
   (the "License"); you may not use this file except in compliance with
   the License.  You may obtain a copy of the License at
 
       http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
</copyright>
<properties>
<title>SunOne -- Netscape/iPlanet HowTo</title>
<author email="hgomez@apache.org">Henri Gomez</author>
<author email="jim@apache.org">Jim Jagielski</author>
<author email="shachor@il.ibm.com">Gal Shachor</author>
<author email="mturk@apache.org">Mladen Turk</author>
<date>$Date: 2009-04-07 23:11:25 +0200 (Tue, 07 Apr 2009) $</date>
</properties>
<body>
<section name="Introduction">
<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>


<subsection name="Document Conventions and Assumptions">
<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>
</subsection>


<subsection name="Supported Configuration">
<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>
</subsection>

<subsection name="Who support ajp protocols ?">
<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>

</subsection>


<subsection name="How does it work ?">
<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>
</subsection>

</section>

<section name="Installation">
<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>
</section>

<section name="Configuring the NSAPI Redirector">
<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>

<source>
  
  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"
</source>
<ul>
<li>
Edit your server <b>obj.conf</b> and add the following lines:
</li>
</ul>
<source>

  
  In the default object NameTrans section
  &lt;Object name="default"&gt;
      
  NameTrans fn="assign-name" from="/servlets-examples(|/*)" name="jknsapi" 
  NameTrans fn="assign-name" from="/jsp-examples(|/*)" name="jknsapi"
  ....
  &lt;/Object&gt;
  
  Create a new configuration object by adding the following lines to the end of the obj.conf file
  
  &lt;Object name="jknsapi"&gt;
  ObjectType fn=force-type type=text/plain
  Service fn="jk_service" method="*" worker="worker1"
  &lt;/Object&gt;
</source>

<ul>
<li>
Edit your worker definition file <b>workers.properties</b>. You should at least choose a connection pool size:
</li>
</ul>

<source>
  #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
</source>

<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>
<warn>
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.
</warn>

<subsection name="Adding additional Contexts">
<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>

<source>
  NameTrans fn="assign-name" from="/&lt;context name&gt;/*" name="jknsapi"
</source>

<p>
After saving <b>obj.conf</b> restart Netscape and it will serve the new context.
</p>
</subsection>

<subsection name="Advanced Context Configuration">
<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>

<source>
  NameTrans fn=pfx2dir from=/examples dir="c:/tomcat/webapps/examples"
</source>

<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>

<source>
  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/.
</source>

<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>

<source>
  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"
</source>

<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>

<source>
  NameTrans fn="assign-name" from="/examples/servletname" name="jknsapi"
  
  Instructs Netscape to assign the redirector request whose URL-Path equals /example/servletname
</source>

</subsection>

<subsection name="Advanced Worker Configuration">
<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>

<source>
  #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
</source>

<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>

<source>
  &lt;Object name="jknsapi"&gt;
  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"
  &lt;/Object&gt;
</source>

<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>
</subsection>

</section>

<section name="Building NSAPI DLL redirector for Windows">
<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>
<typedos>cd c:\home\apache\jk\nsapi</typedos>
<notedos>Build the sources using MSDEV</notedos>
<typedos>MSDEV nsapi.dsp /MAKE ALL</typedos>
</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>
</section>
<section name="Building NSAPI so plugin redirector for Unix">
<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
&quot;plugins&quot; 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>
<typedos>cd /usr/local/src/tomcat-connectors-xxx-src/native</typedos>
<notedos>configure for Netscape/iPlanet/SunONE webserver</notedos>
<typedos>./configure --enable-netscape</typedos>
<notedos>Change directory to the nsapi netscape directory</notedos>
<typedos>cd netscape</typedos>
<notedos>Set JAVA_HOME (ksh example)</notedos>
<typedos>export JAVA_HOME=/path/to/my/java</typedos>
<notedos>Set SUITSPOT_HOME (ksh example)</notedos>
<typedos>export SUITSPOT_HOME=/path/to/my/netscape/server</typedos>
<notedos>Edit the Makefile</notedos>
<typedos>vi Makefile.solaris</typedos>
<notedos>Make the source with gmake</notedos>
<typedos>gmake -f Makefile.solaris</typedos>
</screendos>
</p>
<p>
After the build, you will have the required nsapi_redirector.so plugin.
</p>
</section>
</body>
</document>