<?xml version="1.0" encoding="UTF-8"?>
<!--
  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.
-->
<!DOCTYPE document [
  <!ENTITY project SYSTEM "project.xml">
]>
<document url="virtual-hosting-howto.html">

    &project;

  <properties>
    <title>Virtual Hosting and Tomcat</title>
  </properties>

<body>

<section name="Table of Contents">
<toc/>
</section>

  <section name="Assumptions">
    <p>
      For the sake of this how-to, assume you have a development host with two
      host names, <code>ren</code> and <code>stimpy</code>. Let's also assume
      one instance of Tomcat running, so <code>$CATALINA_HOME</code> refers to
      wherever it's installed, perhaps <code>/usr/local/tomcat</code>.
    </p>
    <p>
      Also, this how-to uses Unix-style path separators and commands; if you're
      on Windows modify accordingly.
    </p>
  </section>

  <section name="server.xml">
    <p>
      At the simplest, edit the <a href="config/engine.html">Engine</a> portion
      of your <code>server.xml</code> file to look like this:
    </p>
    <source><![CDATA[<Engine name="Catalina" defaultHost="ren">
    <Host name="ren"    appBase="renapps"/>
    <Host name="stimpy" appBase="stimpyapps"/>
</Engine>]]></source>
    <p>
      Note that the directory structures under the appBase for each host should
      not overlap each other.
    </p>
    <p>
      Consult the configuration documentation for other attributes of the
      <a href="config/engine.html">Engine</a> and <a href="config/host.html">
      Host</a> elements.
    </p>
  </section>

  <section name="Webapps Directory">
    <p>
      Create directories for each of the virtual hosts:
    </p>
    <source>mkdir $CATALINA_HOME/renapps
mkdir $CATALINA_HOME/stimpyapps</source>
  </section>

  <section name="Configuring Your Contexts">
    <subsection name="General">
      <p>Contexts are normally located underneath the appBase directory. For
       example, to deploy the <code>foobar</code> context as a war file in
       the <code>ren</code> host, use
       <code>$CATALINA_HOME/renapps/foobar.war</code>. Note that the
       default or ROOT context for <code>ren</code> would be deployed as
       <code>$CATALINA_HOME/renapps/ROOT.war</code> (WAR) or
       <code>$CATALINA_HOME/renapps/ROOT</code> (directory).
      </p>
      <p><strong>NOTE: The <code>docBase</code> for a context should never be
        the same as the <code>appBase</code> for a host.</strong>
      </p>
    </subsection>
    <subsection name="context.xml - approach #1">
      <p>
        Within your Context, create a <code>META-INF</code> directory and then
        place your Context definition in it in a file named
        <code>context.xml</code>. i.e.
        <code>$CATALINA_HOME/renapps/ROOT/META-INF/context.xml</code>
        This makes deployment easier, particularly if you're distributing a WAR
        file.
      </p>
    </subsection>
    <subsection name="context.xml - approach #2">
      <p>
        Create a structure under <code>$CATALINA_HOME/conf/Catalina</code>
        corresponding to your virtual hosts, e.g.:
      </p>
      <source>mkdir $CATALINA_HOME/conf/Catalina/ren
mkdir $CATALINA_HOME/conf/Catalina/stimpy</source>
      <p>
        Note that the ending directory name "Catalina" represents the
        <code>name</code> attribute of the
        <a href="config/engine.html">Engine</a> element as shown above.
      </p>
      <p>
        Now, for your default webapps, add:
      </p>
      <source>$CATALINA_HOME/conf/Catalina/ren/ROOT.xml
$CATALINA_HOME/conf/Catalina/stimpy/ROOT.xml</source>
      <p>
        If you want to use the Tomcat manager webapp for each host, you'll also
        need to add it here:
      </p>
      <source>cd $CATALINA_HOME/conf/Catalina
cp localhost/manager.xml ren/
cp localhost/manager.xml stimpy/</source>
    </subsection>
    <subsection name="Further Information">
      <p>
        Consult the configuration documentation for other attributes of the
        <a href="config/context.html">Context</a> element.
      </p>
    </subsection>
  </section>
</body>
</document>
