<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE document [
  <!ENTITY project SYSTEM "project.xml">
]>
<document url="quick.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>Quick Start HowTo</title>
<author email="hgomez@apache.org">Henri Gomez</author>
<date>$Date$</date>
</properties>
<body>
<section name="Introduction">
<p>
  This document describes the configuration files used by JK on the
  Web Server side for the 'impatients':
    <ul>
    <li>
    <b>workers.properties</b> is a mandatory file used by the webserver and which
    is the same for all JK implementations (Apache/IIS/NES).
    </li>
    <li>
    <b>web server</b> add-ons to be set on the webserver side. 
    </li>
    </ul>
</p>
<p>        
  We'll give here minimum servers configuration and an example <b>workers.properties</b> 
  to be able to install and check quickly your configuration.
</p>
</section>

<section name="Minimum workers.properties">
<p>
    Here is a minimum <b>workers.properties</b>, using just ajp13 to connect your Apache webserver
    to the Tomcat engine, complete documentation is available in <a href="workers.html">Workers HowTo</a>. 
</p>
<p>
<source>

  # Define 1 real worker using ajp13
  worker.list=worker1
  # Set properties for worker1 (ajp13)
  worker.worker1.type=ajp13
  worker.worker1.host=localhost
  worker.worker1.port=8009

</source>
</p>
</section>

<section name="Minimum Apache web server configuration">
<p>
   Here is a minimun informations about Apache configuration, a 
   complete documentation is available in <a href="apache.html">Apache HowTo</a>.
</p>
<p>
	You should first have <b>mod_jk.so</b> (unix) or <b>mod_jk.dll</b> (Windows) installed
	in your Apache module directory (see your Apache documentation to locate it).
</p>
<p>
	Usual locations for modules directory on Unix:
	<ul>
	<li>/usr/lib/apache/</li>
	<li>/usr/lib/apache2/</li>
	<li>/usr/local/apache/libexec/</li>
	</ul>
</p>
<p>
	Usual locations for modules directory on Windows :
	<ul>
	<li>C:\Program Files\Apache Group\Apache\modules\</li>
	<li>C:\Program Files\Apache Group\Apache2\modules\</li>
	</ul>
</p>
<p>
	You'll find a link to prebuilt binaries
        <a href="http://tomcat.apache.org/download-connectors.cgi/">here</a>
</p>
<p>
    Here is the minimum which should be set in <b>httpd.conf</b> directly or 
    included from another file:
</p>    
<p>
	Usual locations for configuration directory on Unix:
	<ul>
	<li>/etc/httpd/conf/</li>
	<li>/etc/httpd2/conf/</li>
	<li>/usr/local/apache/conf/</li>
	</ul>
</p>
<p>
	Usual locations for configuration directory on Windows :
	<ul>
	<li>C:\Program Files\Apache Group\Apache\conf\</li>
	<li>C:\Program Files\Apache Group\Apache2\conf\</li>
	</ul>
</p>
<p>
<source>

  # Load mod_jk module
  # Update this path to match your modules location
  LoadModule    jk_module  libexec/mod_jk.so
  # Declare the module for &lt;IfModule directive&gt; (remove this line on Apache 2.x)
  AddModule     mod_jk.c
  # Where to find workers.properties
  # Update this path to match your conf directory location (put workers.properties next to httpd.conf)
  JkWorkersFile /etc/httpd/conf/workers.properties
  # Where to put jk shared memory
  # Update this path to match your local state directory or logs directory
  JkShmFile     /var/log/httpd/mod_jk.shm
  # Where to put jk logs
  # Update this path to match your logs directory location (put mod_jk.log next to access_log)
  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 everything for context /examples to worker named worker1 (ajp13)
  JkMount  /examples/* worker1

</source>
</p>
</section>

<section name="Minimum IIS web server configuration">
<p>
	A complete documentation is available in <a href="iis.html">IIS HowTo</a>.
</p>
<todo>
More informations to be added!
</todo>
</section>

<section name="Minimum NES/iPlanet web server configuration">
<p>
	A complete documentation is available in <a href="nes.html">Netscape/iPlanet HowTo</a>.
<todo>
More informations to be added?
</todo>
</p>
</section>


<section name="Test your configuration">
<p>
	(Re)start the web server and browse to the <a href="http://localhost/examples/">http://localhost/examples/</a>
</p>

</section>
</body>
</document>
