<?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="proxy-howto.html">

    &project;

    <properties>
        <author email="craigmcc@apache.org">Craig R. McClanahan</author>
        <title>Proxy Support HOW-TO</title>
    </properties>

<body>

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

<section name="Introduction">

<p>Using standard configurations of Tomcat, web applications can ask for
the server name and port number to which the request was directed for
processing.  When Tomcat is running standalone with the
<a href="config/http.html">HTTP/1.1 Connector</a>, it will generally
report the server name specified in the request, and the port number on
which the <strong>Connector</strong> is listening.  The servlet API
calls of interest, for this purpose, are:</p>
<ul>
<li><code>ServletRequest.getServerName()</code>: Returns the host name of the server to which the request was sent.</li>
<li><code>ServletRequest.getServerPort()</code>: Returns the port number of the server to which the request was sent.</li>
<li><code>ServletRequest.getLocalName()</code>: Returns the host name of the Internet Protocol (IP) interface on which the request was received.</li>
<li><code>ServletRequest.getLocalPort()</code>:  Returns the Internet Protocol (IP) port number of the interface on which the request was received.</li>
</ul>

<p>When you are running behind a proxy server (or a web server that is
configured to behave like a proxy server), you will sometimes prefer to
manage the values returned by these calls.  In particular, you will
generally want the port number to reflect that specified in the original
request, not the one on which the <strong>Connector</strong> itself is
listening.  You can use the <code>proxyName</code> and <code>proxyPort</code>
attributes on the <code>&lt;Connector&gt;</code> element to configure
these values.</p>

<p>Proxy support can take many forms.  The following sections describe
proxy configurations for several common cases.</p>

</section>

<section name="Apache 1.3 Proxy Support">

<p>Apache 1.3 supports an optional module (<code>mod_proxy</code>) that
configures the web server to act as a proxy server.  This can be used to
forward requests for a particular web application to a Tomcat instance,
without having to configure a web connector such as <code>mod_jk</code>.
To accomplish this, you need to perform the following tasks:</p>
<ol>
<li><p>Configure your copy of Apache so that it includes the
    <code>mod_proxy</code> module.  If you are building from source,
    the easiest way to do this is to include the
    <code>--enable-module=proxy</code> directive on the
    <code>./configure</code> command line.</p></li>
<li><p>If not already added for you, make sure that you are loading the
    <code>mod_proxy</code> module at Apache startup time, by using the
    following directives in your <code>httpd.conf</code> file:</p>
<source><![CDATA[LoadModule proxy_module  {path-to-modules}/mod_proxy.so
AddModule  mod_proxy.c]]></source></li>
<li><p>Include two directives in your <code>httpd.conf</code> file for
    each web application that you wish to forward to Tomcat.  For
    example, to forward an application at context path <code>/myapp</code>:</p>
<source><![CDATA[ProxyPass         /myapp  http://localhost:8081/myapp
ProxyPassReverse  /myapp  http://localhost:8081/myapp]]></source>
    <p>which tells Apache to forward URLs of the form
    <code>http://localhost/myapp/*</code> to the Tomcat connector
    listening on port 8081.</p></li>
<li><p>Configure your copy of Tomcat to include a special
    <code>&lt;Connector&gt;</code> element, with appropriate
    proxy settings, for example:</p>
<source><![CDATA[<Connector port="8081" ...
              proxyName="www.mycompany.com"
              proxyPort="80"/>]]></source>
    <p>which will cause servlets inside this web application to think that
    all proxied requests were directed to <code>www.mycompany.com</code>
    on port 80.</p></li>
<li><p>It is legal to omit the <code>proxyName</code> attribute from the
    <code>&lt;Connector&gt;</code> element.  If you do so, the value
    returned by <code>request.getServerName()</code> will by the host
    name on which Tomcat is running.  In the example above, it would be
    <code>localhost</code>.</p></li>
<li><p>If you also have a <code>&lt;Connector&gt;</code> listening on port
    8080 (nested within the same <a href="config/service.html">Service</a>
    element), the requests to either port will share the same set of
    virtual hosts and web applications.</p></li>
<li><p>You might wish to use the IP filtering features of your operating
    system to restrict connections to port 8081 (in this example) to
    be allowed <strong>only</strong> from the server that is running
    Apache.</p></li>
<li><p>Alternatively, you can set up a series of web applications that are
    only available via proxying, as follows:</p>
    <ul>
    <li>Configure another <code>&lt;Service&gt;</code> that contains
        only a <code>&lt;Connector&gt;</code> for the proxy port.</li>
    <li>Configure appropriate <a href="config/engine.html">Engine</a>,
        <a href="config/host.html">Host</a>, and
        <a href="config/context.html">Context</a> elements for the virtual hosts
        and web applications accessible via proxying.</li>
    <li>Optionally, protect port 8081 with IP filters as described
        earlier.</li>
    </ul></li>
<li><p>When requests are proxied by Apache, the web server will be recording
    these requests in its access log.  Therefore, you will generally want to
    disable any access logging performed by Tomcat itself.</p></li>
</ol>

<p>When requests are proxied in this manner, <strong>all</strong> requests
for the configured web applications will be processed by Tomcat (including
requests for static content).  You can improve performance by using the
<code>mod_jk</code> web connector instead of <code>mod_proxy</code>.
<code>mod_jk</code> can be configured so that the web server serves static
content that is not processed by filters or security constraints defined
within the web application's deployment descriptor
(<code>/WEB-INF/web.xml</code>).</p>

</section>

<section name="Apache 2.0 Proxy Support">
The same instructions hold true as for 1.3. (Except in Apache 2.0,
you may omit <code>AddModule  mod_proxy.c</code>)
</section>

</body>

</document>
