blob: 69fae9f5f4aacd7d314624f5e9098b8d013af02e [file] [log] [blame]
Hongqing Liufd5ee812014-05-10 16:32:51 +08001<html><head><META http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><title>Apache Tomcat 6.0 (6.0.39) - Proxy Support HOW-TO</title><meta name="author" content="Craig R. McClanahan"><style type="text/css" media="print">
2 .noPrint {display: none;}
3 td#mainBody {width: 100%;}
4 </style></head><body bgcolor="#ffffff" text="#000000" link="#525D76" alink="#525D76" vlink="#525D76"><table border="0" width="100%" cellspacing="0"><!--PAGE HEADER--><tr><td><!--PROJECT LOGO--><a href="http://tomcat.apache.org/"><img src="./images/tomcat.gif" align="right" alt="
5 The Apache Tomcat Servlet/JSP Container
6 " border="0"></a></td><td><h1><font face="arial,helvetica,sanserif">Apache Tomcat 6.0</font></h1><font face="arial,helvetica,sanserif">Version 6.0.39, Jan 27 2014</font></td><td><!--APACHE LOGO--><a href="http://www.apache.org/"><img src="./images/asf-logo.gif" align="right" alt="Apache Logo" border="0"></a></td></tr></table><table border="0" width="100%" cellspacing="4"><!--HEADER SEPARATOR--><tr><td colspan="2"><hr noshade="noshade" size="1"></td></tr><tr><!--LEFT SIDE NAVIGATION--><td width="20%" valign="top" nowrap="nowrap" class="noPrint"><p><strong>Links</strong></p><ul><li><a href="index.html">Docs Home</a></li><li><a href="http://wiki.apache.org/tomcat/FAQ">FAQ</a></li></ul><p><strong>User Guide</strong></p><ul><li><a href="introduction.html">1) Introduction</a></li><li><a href="setup.html">2) Setup</a></li><li><a href="appdev/index.html">3) First webapp</a></li><li><a href="deployer-howto.html">4) Deployer</a></li><li><a href="manager-howto.html">5) Manager</a></li><li><a href="realm-howto.html">6) Realms and AAA</a></li><li><a href="security-manager-howto.html">7) Security Manager</a></li><li><a href="jndi-resources-howto.html">8) JNDI Resources</a></li><li><a href="jndi-datasource-examples-howto.html">9) JDBC DataSources</a></li><li><a href="class-loader-howto.html">10) Classloading</a></li><li><a href="jasper-howto.html">11) JSPs</a></li><li><a href="ssl-howto.html">12) SSL</a></li><li><a href="ssi-howto.html">13) SSI</a></li><li><a href="cgi-howto.html">14) CGI</a></li><li><a href="proxy-howto.html">15) Proxy Support</a></li><li><a href="mbeans-descriptor-howto.html">16) MBean Descriptor</a></li><li><a href="default-servlet.html">17) Default Servlet</a></li><li><a href="cluster-howto.html">18) Clustering</a></li><li><a href="balancer-howto.html">19) Load Balancer</a></li><li><a href="connectors.html">20) Connectors</a></li><li><a href="monitoring.html">21) Monitoring and Management</a></li><li><a href="logging.html">22) Logging</a></li><li><a href="apr.html">23) APR/Native</a></li><li><a href="virtual-hosting-howto.html">24) Virtual Hosting</a></li><li><a href="aio.html">25) Advanced IO</a></li><li><a href="extras.html">26) Additional Components</a></li><li><a href="maven-jars.html">27) Mavenized</a></li></ul><p><strong>Reference</strong></p><ul><li><a href="RELEASE-NOTES.txt">Release Notes</a></li><li><a href="config/index.html">Configuration</a></li><li><a href="api/index.html">Javadocs</a></li><li><a href="http://tomcat.apache.org/connectors-doc/">JK 1.2 Documentation</a></li></ul><p><strong>Apache Tomcat Development</strong></p><ul><li><a href="building.html">Building</a></li><li><a href="changelog.html">Changelog</a></li><li><a href="http://wiki.apache.org/tomcat/TomcatVersions">Status</a></li><li><a href="developers.html">Developers</a></li><li><a href="architecture/index.html">Architecture</a></li><li><a href="funcspecs/index.html">Functional Specs.</a></li></ul></td><!--RIGHT SIDE MAIN BODY--><td width="80%" valign="top" align="left" id="mainBody"><h1>Apache Tomcat 6.0</h1><h2>Proxy Support HOW-TO</h2><table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Table of Contents"><!--()--></a><a name="Table_of_Contents"><strong>Table of Contents</strong></a></font></td></tr><tr><td><blockquote>
7<ul><li><a href="#Introduction">Introduction</a></li><li><a href="#Apache_1.3_Proxy_Support">Apache 1.3 Proxy Support</a></li><li><a href="#Apache_2.0_Proxy_Support">Apache 2.0 Proxy Support</a></li></ul>
8</blockquote></td></tr></table><table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Introduction"><strong>Introduction</strong></a></font></td></tr><tr><td><blockquote>
9
10<p>Using standard configurations of Tomcat, web applications can ask for
11the server name and port number to which the request was directed for
12processing. When Tomcat is running standalone with the
13<a href="config/http.html">HTTP/1.1 Connector</a>, it will generally
14report the server name specified in the request, and the port number on
15which the <strong>Connector</strong> is listening. The servlet API
16calls of interest, for this purpose, are:</p>
17<ul>
18<li><code>ServletRequest.getServerName()</code>: Returns the host name of the server to which the request was sent.</li>
19<li><code>ServletRequest.getServerPort()</code>: Returns the host name of the server to which the request was sent.</li>
20<li><code>ServletRequest.getLocalName()</code>: Returns the host name of the Internet Protocol (IP) interface on which the request was received.</li>
21<li><code>ServletRequest.getLocalPort()</code>: Returns the Internet Protocol (IP) port number of the interface on which the request was received.</li>
22</ul>
23
24<p>When you are running behind a proxy server (or a web server that is
25configured to behave like a proxy server), you will sometimes prefer to
26manage the values returned by these calls. In particular, you will
27generally want the port number to reflect that specified in the original
28request, not the one on which the <strong>Connector</strong> itself is
29listening. You can use the <code>proxyName</code> and <code>proxyPort</code>
30attributes on the <code>&lt;Connector&gt;</code> element to configure
31these values.</p>
32
33<p>Proxy support can take many forms. The following sections describe
34proxy configurations for several common cases.</p>
35
36</blockquote></td></tr></table><table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Apache 1.3 Proxy Support"><!--()--></a><a name="Apache_1.3_Proxy_Support"><strong>Apache 1.3 Proxy Support</strong></a></font></td></tr><tr><td><blockquote>
37
38<p>Apache 1.3 supports an optional module (<code>mod_proxy</code>) that
39configures the web server to act as a proxy server. This can be used to
40forward requests for a particular web application to a Tomcat 6 instance,
41without having to configure a web connector such as <code>mod_jk</code>.
42To accomplish this, you need to perform the following tasks:</p>
43<ol>
44<li>Configure your copy of Apache so that it includes the
45 <code>mod_proxy</code> module. If you are building from source,
46 the easiest way to do this is to include the
47 <code>--enable-module=proxy</code> directive on the
48 <code>./configure</code> command line.</li>
49<li>If not already added for you, make sure that you are loading the
50 <code>mod_proxy</code> module at Apache startup time, by using the
51 following directives in your <code>httpd.conf</code> file:
52<div align="left"><table cellspacing="4" cellpadding="0" border="0"><tr><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr><tr><td bgcolor="#023264" width="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#ffffff" height="1"><pre>
53LoadModule proxy_module {path-to-modules}/mod_proxy.so
54AddModule mod_proxy.c
55</pre></td><td bgcolor="#023264" width="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr><tr><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr></table></div></li>
56<li>Include two directives in your <code>httpd.conf</code> file for
57 each web application that you wish to forward to Tomcat 6. For
58 example, to forward an application at context path <code>/myapp</code>:
59<div align="left"><table cellspacing="4" cellpadding="0" border="0"><tr><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr><tr><td bgcolor="#023264" width="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#ffffff" height="1"><pre>
60ProxyPass /myapp http://localhost:8081/myapp
61ProxyPassReverse /myapp http://localhost:8081/myapp
62</pre></td><td bgcolor="#023264" width="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr><tr><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr></table></div>
63 which tells Apache to forward URLs of the form
64 <code>http://localhost/myapp/*</code> to the Tomcat 6 connector
65 listening on port 8081.</li>
66<li>Configure your copy of Tomcat 6 to include a special
67 <code>&lt;Connector&gt;</code> element, with appropriate
68 proxy settings, for example:
69<div align="left"><table cellspacing="4" cellpadding="0" border="0"><tr><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr><tr><td bgcolor="#023264" width="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#ffffff" height="1"><pre>
70&lt;Connector port="8081" ...
71 proxyName="www.mycompany.com"
72 proxyPort="80"/&gt;
73</pre></td><td bgcolor="#023264" width="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr><tr><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td><td bgcolor="#023264" width="1" height="1"><img src="./images/void.gif" alt="" width="1" height="1" vspace="0" hspace="0" border="0"></td></tr></table></div>
74 which will cause servlets inside this web application to think that
75 all proxied requests were directed to <code>www.mycompany.com</code>
76 on port 80.</li>
77<li>It is legal to omit the <code>proxyName</code> attribute from the
78 <code>&lt;Connector&gt;</code> element. If you do so, the value
79 returned by <code>request.getServerName()</code> will by the host
80 name on which Tomcat is running. In the example above, it would be
81 <code>localhost</code>.</li>
82<li>If you also have a <code>&lt;Connector&gt;</code> listening on port
83 8080 (nested within the same <a href="config/service.html">Service</a>
84 element), the requests to either port will share the same set of
85 virtual hosts and web applications.</li>
86<li>You might wish to use the IP filtering features of your operating
87 system to restrict connections to port 8081 (in this example) to
88 be allowed <strong>only</strong> from the server that is running
89 Apache.</li>
90<li>Alternatively, you can set up a series of web applications that are
91 only available via proxying, as follows:
92 <ul>
93 <li>Configure another <code>&lt;Service&gt;</code> that contains
94 only a <code>&lt;Connector&gt;</code> for the proxy port.</li>
95 <li>Configure appropriate <a href="config/engine.html">Engine</a>,
96 <a href="config/host.html">Host</a>, and
97 <a href="config/context.html">Context</a> elements for the virtual hosts
98 and web applications accessible via proxying.</li>
99 <li>Optionally, protect port 8081 with IP filters as described
100 earlier.</li>
101 </ul></li>
102<li>When requests are proxied by Apache, the web server will be recording
103 these requests in its access log. Therefore, you will generally want to
104 disable any access logging performed by Tomcat itself.</li>
105</ol>
106
107<p>When requests are proxied in this manner, <strong>all</strong> requests
108for the configured web applications will be processed by Tomcat (including
109requests for static content). You can improve performance by using the
110<code>mod_jk</code> web connector instead of <code>mod_proxy</code>.
111<code>mod_jk</code> can be configured so that the web server serves static
112content that is not processed by filters or security constraints defined
113within the web application's deployment descriptor
114(<code>/WEB-INF/web.xml</code>).</p>
115
116</blockquote></td></tr></table><table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Apache 2.0 Proxy Support"><!--()--></a><a name="Apache_2.0_Proxy_Support"><strong>Apache 2.0 Proxy Support</strong></a></font></td></tr><tr><td><blockquote>
117The same instructions hold true as for 1.3. (Except in Apache 2.0,
118you may omit <code>AddModule mod_proxy.c</code>)
119</blockquote></td></tr></table></td></tr><!--FOOTER SEPARATOR--><tr><td colspan="2"><hr noshade="noshade" size="1"></td></tr><!--PAGE FOOTER--><tr><td colspan="2"><div align="center"><font color="#525D76" size="-1"><em>
120 Copyright &copy; 1999-2014, Apache Software Foundation
121 </em></font></div></td></tr></table></body></html>