blob: cebd9237e5155acb790d789fff31f9aec8547066 [file] [log] [blame]
Cheng Tang07b30872014-04-27 16:37:18 +08001<html><head><META http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><title>Apache Tomcat 7 (7.0.42) - 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><style type="text/css">
5 code {background-color:rgb(224,255,255);padding:0 0.1em;}
6 code.attributeName, code.propertyName {background-color:transparent;}
7 </style><style type="text/css">
8 .wrapped-source code { display: block; background-color: transparent; }
9 .wrapped-source div { margin: 0 0 0 1.25em; }
10 .wrapped-source p { margin: 0 0 0 1.25em; text-indent: -1.25em; }
11 </style><style type="text/css">
12 p.notice {
13 border: 1px solid rgb(255, 0, 0);
14 background-color: rgb(238, 238, 238);
15 color: rgb(0, 51, 102);
16 padding: 0.5em;
17 margin: 1em 2em 1em 1em;
18 }
19 </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="
20 The Apache Tomcat Servlet/JSP Container
21 " border="0"></a></td><td><h1><font face="arial,helvetica,sanserif">Apache Tomcat 7</font></h1><font face="arial,helvetica,sanserif">Version 7.0.42, Jul 2 2013</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 size="1"></td></tr><tr><!--LEFT SIDE NAVIGATION--><td width="20%" valign="top" 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><li><a href="#comments_section">User Comments</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><li><a href="security-howto.html">28) Security Considerations</a></li><li><a href="windows-service-howto.html">29) Windows Service</a></li><li><a href="windows-auth-howto.html">30) Windows Authentication</a></li><li><a href="jdbc-pool.html">31) Tomcat's JDBC Pool</a></li><li><a href="web-socket-howto.html">32) WebSocket</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">Tomcat Javadocs</a></li><li><a href="servletapi/index.html">Servlet Javadocs</a></li><li><a href="jspapi/index.html">JSP 2.2 Javadocs</a></li><li><a href="elapi/index.html">EL 2.2 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><li><a href="tribes/introduction.html">Tribes</a></li></ul></td><!--RIGHT SIDE MAIN BODY--><td width="80%" valign="top" align="left" id="mainBody"><h1>Proxy Support HOW-TO</h1><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>
22<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>
23</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>
24
25<p>Using standard configurations of Tomcat, web applications can ask for
26the server name and port number to which the request was directed for
27processing. When Tomcat is running standalone with the
28<a href="config/coyote.html">Coyote HTTP/1.1 Connector</a>, it will generally
29report the server name specified in the request, and the port number on
30which the <strong>Connector</strong> is listening. The servlet API
31calls of interest, for this purpose, are:</p>
32<ul>
33<li><code>ServletRequest.getServerName()</code>: Returns the host name of the server to which the request was sent.</li>
34<li><code>ServletRequest.getServerPort()</code>: Returns the host name of the server to which the request was sent.</li>
35<li><code>ServletRequest.getLocalName()</code>: Returns the host name of the Internet Protocol (IP) interface on which the request was received.</li>
36<li><code>ServletRequest.getLocalPort()</code>: Returns the Internet Protocol (IP) port number of the interface on which the request was received.</li>
37</ul>
38
39<p>When you are running behind a proxy server (or a web server that is
40configured to behave like a proxy server), you will sometimes prefer to
41manage the values returned by these calls. In particular, you will
42generally want the port number to reflect that specified in the original
43request, not the one on which the <strong>Connector</strong> itself is
44listening. You can use the <code>proxyName</code> and <code>proxyPort</code>
45attributes on the <code>&lt;Connector&gt;</code> element to configure
46these values.</p>
47
48<p>Proxy support can take many forms. The following sections describe
49proxy configurations for several common cases.</p>
50
51</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>
52
53<p>Apache 1.3 supports an optional module (<code>mod_proxy</code>) that
54configures the web server to act as a proxy server. This can be used to
55forward requests for a particular web application to a Tomcat instance,
56without having to configure a web connector such as <code>mod_jk</code>.
57To accomplish this, you need to perform the following tasks:</p>
58<ol>
59<li>Configure your copy of Apache so that it includes the
60 <code>mod_proxy</code> module. If you are building from source,
61 the easiest way to do this is to include the
62 <code>--enable-module=proxy</code> directive on the
63 <code>./configure</code> command line.</li>
64<li>If not already added for you, make sure that you are loading the
65 <code>mod_proxy</code> module at Apache startup time, by using the
66 following directives in your <code>httpd.conf</code> file:
67<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>
68LoadModule proxy_module {path-to-modules}/mod_proxy.so
69AddModule mod_proxy.c
70</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>
71<li>Include two directives in your <code>httpd.conf</code> file for
72 each web application that you wish to forward to Tomcat. For
73 example, to forward an application at context path <code>/myapp</code>:
74<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>
75ProxyPass /myapp http://localhost:8081/myapp
76ProxyPassReverse /myapp http://localhost:8081/myapp
77</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>
78 which tells Apache to forward URLs of the form
79 <code>http://localhost/myapp/*</code> to the Tomcat connector
80 listening on port 8081.</li>
81<li>Configure your copy of Tomcat to include a special
82 <code>&lt;Connector&gt;</code> element, with appropriate
83 proxy settings, for example:
84<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>
85&lt;Connector port="8081" ...
86 proxyName="www.mycompany.com"
87 proxyPort="80"/&gt;
88</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>
89 which will cause servlets inside this web application to think that
90 all proxied requests were directed to <code>www.mycompany.com</code>
91 on port 80.</li>
92<li>It is legal to omit the <code>proxyName</code> attribute from the
93 <code>&lt;Connector&gt;</code> element. If you do so, the value
94 returned by <code>request.getServerName()</code> will by the host
95 name on which Tomcat is running. In the example above, it would be
96 <code>localhost</code>.</li>
97<li>If you also have a <code>&lt;Connector&gt;</code> listening on port
98 8080 (nested within the same <a href="config/service.html">Service</a>
99 element), the requests to either port will share the same set of
100 virtual hosts and web applications.</li>
101<li>You might wish to use the IP filtering features of your operating
102 system to restrict connections to port 8081 (in this example) to
103 be allowed <strong>only</strong> from the server that is running
104 Apache.</li>
105<li>Alternatively, you can set up a series of web applications that are
106 only available via proxying, as follows:
107 <ul>
108 <li>Configure another <code>&lt;Service&gt;</code> that contains
109 only a <code>&lt;Connector&gt;</code> for the proxy port.</li>
110 <li>Configure appropriate <a href="config/engine.html">Engine</a>,
111 <a href="config/host.html">Host</a>, and
112 <a href="config/context.html">Context</a> elements for the virtual hosts
113 and web applications accessible via proxying.</li>
114 <li>Optionally, protect port 8081 with IP filters as described
115 earlier.</li>
116 </ul></li>
117<li>When requests are proxied by Apache, the web server will be recording
118 these requests in its access log. Therefore, you will generally want to
119 disable any access logging performed by Tomcat itself.</li>
120</ol>
121
122<p>When requests are proxied in this manner, <strong>all</strong> requests
123for the configured web applications will be processed by Tomcat (including
124requests for static content). You can improve performance by using the
125<code>mod_jk</code> web connector instead of <code>mod_proxy</code>.
126<code>mod_jk</code> can be configured so that the web server serves static
127content that is not processed by filters or security constraints defined
128within the web application's deployment descriptor
129(<code>/WEB-INF/web.xml</code>).</p>
130
131</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>
132The same instructions hold true as for 1.3. (Except in Apache 2.0,
133you may omit <code>AddModule mod_proxy.c</code>)
134</blockquote></td></tr></table></td></tr><tr class="noPrint"><td width="20%" valign="top" nowrap class="noPrint"></td><td width="80%" valign="top" align="left"><table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="comments_section" id="comments_section"><strong>Comments</strong></a></font></td></tr><tr><td><blockquote><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
135 on improving documentation for Apache Tomcat.<br><br>
136 If you have trouble and need help, read
137 <a href="http://tomcat.apache.org/findhelp.html">Find Help</a> page
138 and ask your question on the tomcat-users
139 <a href="http://tomcat.apache.org/lists.html">mailing list</a>.
140 Do not ask such questions here. This is not a Q&amp;A section.<br><br>
141 The Apache Comments System is explained <a href="/tomcat-7.0-doc/comments.html">here</a>.
142 Comments may be removed by our moderators if they are either
143 implemented or considered invalid/off-topic.</p><script type="text/javascript"><!--//--><![CDATA[//><!--
144 var comments_shortname = 'tomcat';
145 var comments_identifier = 'http://tomcat.apache.org/tomcat-7.0-doc/proxy-howto.html';
146 (function(w, d) {
147 if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
148 d.write('<div id="comments_thread"><\/div>');
149 var s = d.createElement('script');
150 s.type = 'text/javascript';
151 s.async = true;
152 s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
153 (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
154 }
155 else {
156 d.write('<div id="comments_thread"><strong>Comments are disabled for this page at the moment.<\/strong><\/div>');
157 }
158 })(window, document);
159 //--><!]]></script></blockquote></td></tr></table></td></tr><!--FOOTER SEPARATOR--><tr><td colspan="2"><hr noshade size="1"></td></tr><!--PAGE FOOTER--><tr><td colspan="2"><div align="center"><font color="#525D76" size="-1"><em>
160 Copyright &copy; 1999-2013, Apache Software Foundation
161 </em></font></div></td></tr></table></body></html>