]> granicus.if.org Git - apache/blob - docs/manual/mod/mod_proxy.html.en
Fixes to XML. rebuild.
[apache] / docs / manual / mod / mod_proxy.html.en
1 <?xml version="1.0" encoding="ISO-8859-1"?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
4         XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
5               This file is generated from xml source: DO NOT EDIT
6         XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
7       -->
8 <title>mod_proxy - Apache HTTP Server</title>
9 <link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
10 <link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
11 <link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" />
12 <script src="../style/scripts/prettify.js" type="text/javascript">
13 </script>
14
15 <link href="../images/favicon.ico" rel="shortcut icon" /></head>
16 <body>
17 <div id="page-header">
18 <p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
19 <p class="apache">Apache HTTP Server Version 2.5</p>
20 <img alt="" src="../images/feather.gif" /></div>
21 <div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
22 <div id="path">
23 <a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="../">Version 2.5</a> &gt; <a href="./">Modules</a></div>
24 <div id="page-content">
25 <div id="preamble"><h1>Apache Module mod_proxy</h1>
26 <div class="toplang">
27 <p><span>Available Languages: </span><a href="../en/mod/mod_proxy.html" title="English">&nbsp;en&nbsp;</a> |
28 <a href="../fr/mod/mod_proxy.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
29 <a href="../ja/mod/mod_proxy.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a></p>
30 </div>
31 <table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Multi-protocol proxy/gateway server</td></tr>
32 <tr><th><a href="module-dict.html#Status">Status:</a></th><td>Extension</td></tr>
33 <tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>proxy_module</td></tr>
34 <tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_proxy.c</td></tr></table>
35 <h3>Summary</h3>
36
37     <div class="warning"><h3>Warning</h3>
38       <p>Do not enable proxying with <code class="directive"><a href="#proxyrequests">ProxyRequests</a></code> until you have <a href="#access">secured your server</a>. Open proxy servers are dangerous both to your
39       network and to the Internet at large.</p>
40     </div>
41
42     <p><code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> and related modules implement a
43     proxy/gateway for Apache HTTP Server, supporting a number of popular
44     protocols as well as several different load balancing algorithms.
45     Third-party modules can add support for additional protocols and
46     load balancing algorithms.</p>
47
48     <p>A set of modules must be loaded into the server to provide the
49     necessary features.  These modules can be included statically at
50     build time or dynamically via the
51     <code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code> directive).
52     The set must include:</p>
53
54     <ul>
55       <li><code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code>, which provides basic proxy
56       capabilities</li>
57
58       <li><code class="module"><a href="../mod/mod_proxy_balancer.html">mod_proxy_balancer</a></code> and one or more
59       balancer modules, if load balancing is required.  (See
60       <code class="module"><a href="../mod/mod_proxy_balancer.html">mod_proxy_balancer</a></code> for more information.)</li>
61
62       <li>one or more proxy scheme, or protocol, modules:
63
64         <table class="bordered">
65         <tr><th>Protocol</th><th>Module</th></tr>
66         <tr><td>AJP13 (Apache JServe Protocol version
67           1.3)</td><td><code class="module"><a href="../mod/mod_proxy_ajp.html">mod_proxy_ajp</a></code></td></tr>
68         <tr><td>CONNECT (for
69           SSL)</td><td><code class="module"><a href="../mod/mod_proxy_connect.html">mod_proxy_connect</a></code></td></tr>
70         <tr><td>FastCGI</td><td><code class="module"><a href="../mod/mod_proxy_fcgi.html">mod_proxy_fcgi</a></code></td></tr>
71         <tr><td>ftp</td><td><code class="module"><a href="../mod/mod_proxy_ftp.html">mod_proxy_ftp</a></code></td></tr>
72         <tr><td>HTTP/0.9, HTTP/1.0, and
73           HTTP/1.1</td><td><code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code></td></tr>
74         <tr><td>SCGI</td><td><code class="module"><a href="../mod/mod_proxy_scgi.html">mod_proxy_scgi</a></code></td></tr>
75         </table>
76       </li>
77     </ul>
78
79     <p>In addition, extended features are provided by other modules.
80     Caching is provided by <code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code> and related
81     modules.  The ability to contact remote servers using the SSL/TLS
82     protocol is provided by the <code>SSLProxy*</code> directives of
83     <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code>.  These additional modules will need
84     to be loaded and configured to take advantage of these features.</p>
85 </div>
86 <div id="quickview"><h3 class="directives">Directives</h3>
87 <ul id="toc">
88 <li><img alt="" src="../images/down.gif" /> <a href="#balancergrowth">BalancerGrowth</a></li>
89 <li><img alt="" src="../images/down.gif" /> <a href="#balancermember">BalancerMember</a></li>
90 <li><img alt="" src="../images/down.gif" /> <a href="#noproxy">NoProxy</a></li>
91 <li><img alt="" src="../images/down.gif" /> <a href="#proxy">&lt;Proxy&gt;</a></li>
92 <li><img alt="" src="../images/down.gif" /> <a href="#proxyaddheaders">ProxyAddHeaders</a></li>
93 <li><img alt="" src="../images/down.gif" /> <a href="#proxybadheader">ProxyBadHeader</a></li>
94 <li><img alt="" src="../images/down.gif" /> <a href="#proxyblock">ProxyBlock</a></li>
95 <li><img alt="" src="../images/down.gif" /> <a href="#proxydomain">ProxyDomain</a></li>
96 <li><img alt="" src="../images/down.gif" /> <a href="#proxyerroroverride">ProxyErrorOverride</a></li>
97 <li><img alt="" src="../images/down.gif" /> <a href="#proxyiobuffersize">ProxyIOBufferSize</a></li>
98 <li><img alt="" src="../images/down.gif" /> <a href="#proxymatch">&lt;ProxyMatch&gt;</a></li>
99 <li><img alt="" src="../images/down.gif" /> <a href="#proxymaxforwards">ProxyMaxForwards</a></li>
100 <li><img alt="" src="../images/down.gif" /> <a href="#proxypass">ProxyPass</a></li>
101 <li><img alt="" src="../images/down.gif" /> <a href="#proxypassinterpolateenv">ProxyPassInterpolateEnv</a></li>
102 <li><img alt="" src="../images/down.gif" /> <a href="#proxypassmatch">ProxyPassMatch</a></li>
103 <li><img alt="" src="../images/down.gif" /> <a href="#proxypassreverse">ProxyPassReverse</a></li>
104 <li><img alt="" src="../images/down.gif" /> <a href="#proxypassreversecookiedomain">ProxyPassReverseCookieDomain</a></li>
105 <li><img alt="" src="../images/down.gif" /> <a href="#proxypassreversecookiepath">ProxyPassReverseCookiePath</a></li>
106 <li><img alt="" src="../images/down.gif" /> <a href="#proxypreservehost">ProxyPreserveHost</a></li>
107 <li><img alt="" src="../images/down.gif" /> <a href="#proxyreceivebuffersize">ProxyReceiveBufferSize</a></li>
108 <li><img alt="" src="../images/down.gif" /> <a href="#proxyremote">ProxyRemote</a></li>
109 <li><img alt="" src="../images/down.gif" /> <a href="#proxyremotematch">ProxyRemoteMatch</a></li>
110 <li><img alt="" src="../images/down.gif" /> <a href="#proxyrequests">ProxyRequests</a></li>
111 <li><img alt="" src="../images/down.gif" /> <a href="#proxyset">ProxySet</a></li>
112 <li><img alt="" src="../images/down.gif" /> <a href="#proxysourceaddress">ProxySourceAddress</a></li>
113 <li><img alt="" src="../images/down.gif" /> <a href="#proxystatus">ProxyStatus</a></li>
114 <li><img alt="" src="../images/down.gif" /> <a href="#proxytimeout">ProxyTimeout</a></li>
115 <li><img alt="" src="../images/down.gif" /> <a href="#proxyvia">ProxyVia</a></li>
116 </ul>
117 <h3>Topics</h3>
118 <ul id="topics">
119 <li><img alt="" src="../images/down.gif" /> <a href="#forwardreverse">Forward Proxies and Reverse
120        Proxies/Gateways</a></li>
121 <li><img alt="" src="../images/down.gif" /> <a href="#examples">Basic Examples</a></li>
122 <li><img alt="" src="../images/down.gif" /> <a href="#workers">Workers</a></li>
123 <li><img alt="" src="../images/down.gif" /> <a href="#access">Controlling access to your proxy</a></li>
124 <li><img alt="" src="../images/down.gif" /> <a href="#startup">Slow Startup</a></li>
125 <li><img alt="" src="../images/down.gif" /> <a href="#intranet">Intranet Proxy</a></li>
126 <li><img alt="" src="../images/down.gif" /> <a href="#envsettings">Protocol Adjustments</a></li>
127 <li><img alt="" src="../images/down.gif" /> <a href="#request-bodies">Request Bodies</a></li>
128 <li><img alt="" src="../images/down.gif" /> <a href="#x-headers">Reverse Proxy Request Headers</a></li>
129 </ul><h3>See also</h3>
130 <ul class="seealso">
131 <li><code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code></li>
132 <li><code class="module"><a href="../mod/mod_proxy_ajp.html">mod_proxy_ajp</a></code></li>
133 <li><code class="module"><a href="../mod/mod_proxy_connect.html">mod_proxy_connect</a></code></li>
134 <li><code class="module"><a href="../mod/mod_proxy_fcgi.html">mod_proxy_fcgi</a></code></li>
135 <li><code class="module"><a href="../mod/mod_proxy_ftp.html">mod_proxy_ftp</a></code></li>
136 <li><code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code></li>
137 <li><code class="module"><a href="../mod/mod_proxy_scgi.html">mod_proxy_scgi</a></code></li>
138 <li><code class="module"><a href="../mod/mod_proxy_balancer.html">mod_proxy_balancer</a></code></li>
139 <li><code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code></li>
140 </ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
141 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
142 <div class="section">
143 <h2><a name="forwardreverse" id="forwardreverse">Forward Proxies and Reverse
144        Proxies/Gateways</a></h2>
145       <p>Apache HTTP Server can be configured in both a <dfn>forward</dfn> and
146       <dfn>reverse</dfn> proxy (also known as <dfn>gateway</dfn>) mode.</p>
147
148       <p>An ordinary <dfn>forward proxy</dfn> is an intermediate
149       server that sits between the client and the <em>origin
150       server</em>.  In order to get content from the origin server,
151       the client sends a request to the proxy naming the origin server
152       as the target and the proxy then requests the content from the
153       origin server and returns it to the client.  The client must be
154       specially configured to use the forward proxy to access other
155       sites.</p>
156
157       <p>A typical usage of a forward proxy is to provide Internet
158       access to internal clients that are otherwise restricted by a
159       firewall.  The forward proxy can also use caching (as provided
160       by <code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code>) to reduce network usage.</p>
161
162       <p>The forward proxy is activated using the <code class="directive"><a href="#proxyrequests">ProxyRequests</a></code> directive.  Because
163       forward proxies allow clients to access arbitrary sites through
164       your server and to hide their true origin, it is essential that
165       you <a href="#access">secure your server</a> so that only
166       authorized clients can access the proxy before activating a
167       forward proxy.</p>
168
169       <p>A <dfn>reverse proxy</dfn> (or <dfn>gateway</dfn>), by
170       contrast, appears to the client just like an ordinary web
171       server.  No special configuration on the client is necessary.
172       The client makes ordinary requests for content in the name-space
173       of the reverse proxy.  The reverse proxy then decides where to
174       send those requests, and returns the content as if it was itself
175       the origin.</p>
176
177       <p>A typical usage of a reverse proxy is to provide Internet
178       users access to a server that is behind a firewall.  Reverse
179       proxies can also be used to balance load among several back-end
180       servers, or to provide caching for a slower back-end server.
181       In addition, reverse proxies can be used simply to bring
182       several servers into the same URL space.</p>
183
184       <p>A reverse proxy is activated using the <code class="directive"><a href="#proxypass">ProxyPass</a></code> directive or the
185       <code>[P]</code> flag to the <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> directive.  It is
186       <strong>not</strong> necessary to turn <code class="directive"><a href="#proxyrequests">ProxyRequests</a></code> on in order to
187       configure a reverse proxy.</p>
188     </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
189 <div class="section">
190 <h2><a name="examples" id="examples">Basic Examples</a></h2>
191
192     <p>The examples below are only a very basic idea to help you
193     get started.  Please read the documentation on the individual
194     directives.</p>
195
196     <p>In addition, if you wish to have caching enabled, consult
197     the documentation from <code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code>.</p>
198
199     <div class="example"><h3>Reverse Proxy</h3><pre class="prettyprint lang-config">
200 ProxyPass /foo http://foo.example.com/bar
201 ProxyPassReverse /foo http://foo.example.com/bar
202     </pre>
203 </div>
204
205     <div class="example"><h3>Forward Proxy</h3><pre class="prettyprint lang-config">
206 ProxyRequests On
207 ProxyVia On
208
209 &lt;Proxy *&gt;
210   Require host internal.example.com
211 &lt;/Proxy&gt;
212     </pre>
213 </div>
214     </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
215 <div class="section">
216 <h2><a name="workers" id="workers">Workers</a></h2>
217       <p>The proxy manages the configuration of origin servers and their
218       communication parameters in objects called <dfn>workers</dfn>.
219       There are two built-in workers, the default forward proxy worker and the
220       default reverse proxy worker. Additional workers can be configured
221       explicitly.</p>
222
223       <p>The two default workers have a fixed configuration
224       and will be used if no other worker matches the request.
225       They do not use HTTP Keep-Alive or connection pooling.
226       The TCP connections to the origin server will instead be
227       opened and closed for each request.</p>
228
229       <p>Explicitly configured workers are identified by their URL.
230       They are usually created and configured using
231       <code class="directive"><a href="#proxypass">ProxyPass</a></code> or
232       <code class="directive"><a href="#proxypassmatch">ProxyPassMatch</a></code> when used
233       for a reverse proxy:</p>
234
235       <pre class="prettyprint lang-config">
236           ProxyPass /example http://backend.example.com connectiontimeout=5 timeout=30
237       </pre>
238
239
240       <p>This will create a worker associated with the origin server URL
241       <code>http://backend.example.com</code> and using the given timeout
242       values. When used in a forward proxy, workers are usually defined
243       via the <code class="directive"><a href="#proxyset">ProxySet</a></code> directive:</p>
244
245       <pre class="prettyprint lang-config">
246           ProxySet http://backend.example.com connectiontimeout=5 timeout=30
247       </pre>
248
249
250       <p>or alternatively using <code class="directive"><a href="#proxy">Proxy</a></code>
251       and <code class="directive"><a href="#proxyset">ProxySet</a></code>:</p>
252
253       <pre class="prettyprint lang-config">
254 &lt;Proxy http://backend.example.com&gt;
255   ProxySet connectiontimeout=5 timeout=30
256 &lt;/Proxy&gt;
257       </pre>
258
259
260       <p>Using explicitly configured workers in the forward mode is
261       not very common, because forward proxies usually communicate with many
262       different origin servers. Creating explicit workers for some of the
263       origin servers can still be useful, if they are used very often.
264       Explicitly configured workers have no concept of forward or reverse
265       proxying by themselves. They encapsulate a common concept of
266       communication with origin servers. A worker created by
267       <code class="directive"><a href="#proxypass">ProxyPass</a></code> for use in a
268       reverse proxy will be also used for forward proxy requests whenever
269       the URL to the origin server matches the worker URL and vice versa.</p>
270
271       <p>The URL identifying a direct worker is the URL of its
272       origin server including any path components given:</p>
273
274      <pre class="prettyprint lang-config">
275 ProxyPass /examples http://backend.example.com/examples
276 ProxyPass /docs http://backend.example.com/docs
277       </pre>
278
279
280       <p>This example defines two different workers, each using a separate
281       connection pool and configuration.</p>
282
283       <div class="warning"><h3>Worker Sharing</h3>
284         <p>Worker sharing happens if the worker URLs overlap, which occurs when
285         the URL of some worker is a leading substring of the URL of another
286         worker defined later in the configuration file. In the following example</p>
287
288         <pre class="prettyprint lang-config">
289 ProxyPass /apps http://backend.example.com/ timeout=60
290 ProxyPass /examples http://backend.example.com/examples timeout=10
291         </pre>
292
293
294         <p>the second worker isn't actually created. Instead the first
295         worker is used. The benefit is, that there is only one connection pool,
296         so connections are more often reused. Note that all configuration attributes
297         given explicitly for the later worker will be ignored. This will be logged
298         as a warning. In the above example the resulting timeout value
299         for the URL <code>/examples</code> will be <code>60</code> instead
300         of <code>10</code>!</p>
301
302         <p>If you want to avoid worker sharing, sort your worker definitions
303         by URL length, starting with the longest worker URLs. If you want to maximize
304         worker sharing use the reverse sort order. See also the related warning about
305         ordering <code class="directive"><a href="#proxypass">ProxyPass</a></code> directives.</p>
306
307       </div> 
308
309       <p>Explicitly configured workers come in two flavors:
310       <dfn>direct workers</dfn> and <dfn>(load) balancer workers</dfn>.
311       They support many important configuration attributes which are
312       described below in the <code class="directive"><a href="#proxypass">ProxyPass</a></code>
313       directive. The same attributes can also be set using
314       <code class="directive"><a href="#proxyset">ProxySet</a></code>.</p>
315
316       <p>The set of options available for a direct worker
317       depends on the protocol, which is specified in the origin server URL.
318       Available protocols include <code>ajp</code>, <code>fcgi</code>,
319       <code>ftp</code>, <code>http</code> and <code>scgi</code>.</p>
320
321       <p>Balancer workers are virtual workers that use direct workers known
322       as their members to actually handle the requests. Each balancer can
323       have multiple members. When it handles a request, it chooses a member
324       based on the configured load balancing algorithm.</p>
325
326       <p>A balancer worker is created if its worker URL uses
327       <code>balancer</code> as the protocol scheme.
328       The balancer URL uniquely identifies the balancer worker.
329       Members are added to a balancer using
330       <code class="directive"><a href="#balancermember">BalancerMember</a></code>.</p>
331
332     </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
333 <div class="section">
334 <h2><a name="access" id="access">Controlling access to your proxy</a></h2>
335       <p>You can control who can access your proxy via the <code class="directive"><a href="#proxy">&lt;Proxy&gt;</a></code> control block as in
336       the following example:</p>
337
338       <pre class="prettyprint lang-config">
339 &lt;Proxy *&gt;
340   Require ip 192.168.0
341 &lt;/Proxy&gt;
342       </pre>
343
344
345       <p>For more information on access control directives, see
346       <code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code>.</p>
347
348       <p>Strictly limiting access is essential if you are using a
349       forward proxy (using the <code class="directive"><a href="#proxyrequests">ProxyRequests</a></code> directive).
350       Otherwise, your server can be used by any client to access
351       arbitrary hosts while hiding his or her true identity.  This is
352       dangerous both for your network and for the Internet at large.
353       When using a reverse proxy (using the <code class="directive"><a href="#proxypass">ProxyPass</a></code> directive with
354       <code>ProxyRequests Off</code>), access control is less
355       critical because clients can only contact the hosts that you
356       have specifically configured.</p>
357
358       <p><strong>See Also</strong> the <a href="mod_proxy_http.html#env">Proxy-Chain-Auth</a> environment variable.</p>
359
360     </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
361 <div class="section">
362 <h2><a name="startup" id="startup">Slow Startup</a></h2>
363       <p>If you're using the <code class="directive"><a href="#proxyblock">ProxyBlock</a></code> directive, hostnames' IP addresses are looked up
364       and cached during startup for later match test. This may take a few
365       seconds (or more) depending on the speed with which the hostname lookups
366       occur.</p>
367     </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
368 <div class="section">
369 <h2><a name="intranet" id="intranet">Intranet Proxy</a></h2>
370       <p>An Apache httpd proxy server situated in an intranet needs to forward
371       external requests through the company's firewall (for this, configure
372       the <code class="directive"><a href="#proxyremote">ProxyRemote</a></code> directive
373       to forward the respective <var>scheme</var> to the firewall proxy).
374       However, when it has to
375       access resources within the intranet, it can bypass the firewall when
376       accessing hosts. The <code class="directive"><a href="#noproxy">NoProxy</a></code>
377       directive is useful for specifying which hosts belong to the intranet and
378       should be accessed directly.</p>
379
380       <p>Users within an intranet tend to omit the local domain name from their
381       WWW requests, thus requesting "http://somehost/" instead of
382       <code>http://somehost.example.com/</code>. Some commercial proxy servers
383       let them get away with this and simply serve the request, implying a
384       configured local domain. When the <code class="directive"><a href="#proxydomain">ProxyDomain</a></code> directive is used and the server is <a href="#proxyrequests">configured for proxy service</a>, Apache httpd can return
385       a redirect response and send the client to the correct, fully qualified,
386       server address. This is the preferred method since the user's bookmark
387       files will then contain fully qualified hosts.</p>
388     </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
389 <div class="section">
390 <h2><a name="envsettings" id="envsettings">Protocol Adjustments</a></h2>
391       <p>For circumstances where <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> is sending
392       requests to an origin server that doesn't properly implement
393       keepalives or HTTP/1.1, there are two <a href="../env.html">environment variables</a> that can force the
394       request to use HTTP/1.0 with no keepalive. These are set via the
395       <code class="directive"><a href="../mod/mod_env.html#setenv">SetEnv</a></code> directive.</p>
396
397       <p>These are the <code>force-proxy-request-1.0</code> and
398       <code>proxy-nokeepalive</code> notes.</p>
399
400       <pre class="prettyprint lang-config">
401 &lt;Location /buggyappserver/&gt;
402   ProxyPass http://buggyappserver:7001/foo/
403   SetEnv force-proxy-request-1.0 1
404   SetEnv proxy-nokeepalive 1
405 &lt;/Location&gt;
406         </pre>
407
408
409     </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
410 <div class="section">
411 <h2><a name="request-bodies" id="request-bodies">Request Bodies</a></h2>
412
413     <p>Some request methods such as POST include a request body.
414     The HTTP protocol requires that requests which include a body
415     either use chunked transfer encoding or send a
416     <code>Content-Length</code> request header.  When passing these
417     requests on to the origin server, <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code>
418     will always attempt to send the <code>Content-Length</code>.  But
419     if the body is large and the original request used chunked
420     encoding, then chunked encoding may also be used in the upstream
421     request.  You can control this selection using <a href="../env.html">environment variables</a>.  Setting
422     <code>proxy-sendcl</code> ensures maximum compatibility with
423     upstream servers by always sending the
424     <code>Content-Length</code>, while setting
425     <code>proxy-sendchunked</code> minimizes resource usage by using
426     chunked encoding.</p>
427
428     <p>Under some circumstances, the server must spool request bodies
429     to disk to satisfy the requested handling of request bodies.  For
430     example, this spooling will occur if the original body was sent with
431     chunked encoding (and is large), but the administrator has
432     asked for backend requests to be sent with Content-Length or as HTTP/1.0.
433     This spooling can also occur if the request body already has a
434     Content-Length header, but the server is configured to filter incoming
435     request bodies.</p>
436
437     <p><code class="directive"><a href="../mod/core.html#limitrequestbody">LimitRequestBody</a></code> only applies to
438     request bodies that the server will spool to disk</p>
439
440     </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
441 <div class="section">
442 <h2><a name="x-headers" id="x-headers">Reverse Proxy Request Headers</a></h2>
443
444     <p>When acting in a reverse-proxy mode (using the <code class="directive"><a href="#proxypass">ProxyPass</a></code> directive, for example),
445     <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code> adds several request headers in
446     order to pass information to the origin server. These headers
447     are:</p>
448
449     <dl>
450       <dt><code>X-Forwarded-For</code></dt>
451       <dd>The IP address of the client.</dd>
452       <dt><code>X-Forwarded-Host</code></dt>
453       <dd>The original host requested by the client in the <code>Host</code>
454        HTTP request header.</dd>
455       <dt><code>X-Forwarded-Server</code></dt>
456       <dd>The hostname of the proxy server.</dd>
457     </dl>
458
459     <p>Be careful when using these headers on the origin server, since
460     they will contain more than one (comma-separated) value if the
461     original request already contained one of these headers. For
462     example, you can use <code>%{X-Forwarded-For}i</code> in the log
463     format string of the origin server to log the original clients IP
464     address, but you may get more than one address if the request
465     passes through several proxies.</p>
466
467     <p>See also the <code class="directive"><a href="#proxypreservehost">ProxyPreserveHost</a></code> and <code class="directive"><a href="#proxyvia">ProxyVia</a></code> directives, which control
468     other request headers.</p>
469
470    </div>
471 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
472 <div class="directive-section"><h2><a name="BalancerGrowth" id="BalancerGrowth">BalancerGrowth</a> <a name="balancergrowth" id="balancergrowth">Directive</a></h2>
473 <table class="directive">
474 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Number of additional Balancers that can be added Post-configuration</td></tr>
475 <tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>BalancerGrowth <var>#</var></code></td></tr>
476 <tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>BalancerGrowth 5</code></td></tr>
477 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
478 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
479 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
480 <tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>BalancerGrowth is only available in Apache HTTP Server 2.3.13
481   and later.</td></tr>
482 </table>
483     <p>This directive allows for growth potential in the number of
484     Balancers available for a virtualhost in addition to the
485     number pre-configured. It only takes effect if there is at
486     least 1 pre-configured Balancer.</p>
487
488 </div>
489 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
490 <div class="directive-section"><h2><a name="BalancerMember" id="BalancerMember">BalancerMember</a> <a name="balancermember" id="balancermember">Directive</a></h2>
491 <table class="directive">
492 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Add a member to a load balancing group</td></tr>
493 <tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>BalancerMember [<var>balancerurl</var>] <var>url</var> [<var>key=value [key=value ...]]</var></code></td></tr>
494 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory</td></tr>
495 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
496 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
497 <tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>BalancerMember is only available in Apache HTTP Server 2.2
498         and later.</td></tr>
499 </table>
500         <p>This directive adds a member to a load balancing group. It could be used
501             within a <code>&lt;Proxy <var>balancer://</var>...&gt;</code> container
502             directive, and can take any of the key value pair parameters available to
503             <code class="directive"><a href="#proxypass">ProxyPass</a></code> directives.</p>
504         <p>One additional parameter is available only to <code class="directive"><a href="#balancermember">BalancerMember</a></code> directives:
505             <var>loadfactor</var>. This is the member load factor - a number between 1
506             (default) and 100, which defines the weighted load to be applied to the
507             member in question.</p>
508         <p>The balancerurl is only needed when not in <code>&lt;Proxy <var>balancer://</var>...&gt;</code>
509             container directive. It corresponds to the url of a balancer defined in
510             <code class="directive"><a href="#proxypass">ProxyPass</a></code> directive.</p>
511     
512 </div>
513 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
514 <div class="directive-section"><h2><a name="NoProxy" id="NoProxy">NoProxy</a> <a name="noproxy" id="noproxy">Directive</a></h2>
515 <table class="directive">
516 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Hosts, domains, or networks that will be connected to
517 directly</td></tr>
518 <tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>NoProxy <var>host</var> [<var>host</var>] ...</code></td></tr>
519 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
520 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
521 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
522 </table>
523     <p>This directive is only useful for Apache httpd proxy servers within
524     intranets.  The <code class="directive">NoProxy</code> directive specifies a
525     list of subnets, IP addresses, hosts and/or domains, separated by
526     spaces. A request to a host which matches one or more of these is
527     always served directly, without forwarding to the configured
528     <code class="directive"><a href="#proxyremote">ProxyRemote</a></code> proxy server(s).</p>
529
530     <div class="example"><h3>Example</h3><pre class="prettyprint lang-config">
531 ProxyRemote  *  http://firewall.example.com:81
532 NoProxy         .example.com 192.168.112.0/21
533     </pre>
534 </div>
535
536     <p>The <var>host</var> arguments to the <code class="directive">NoProxy</code>
537     directive are one of the following type list:</p>
538
539     <dl>
540     
541     <dt><var><a name="domain" id="domain">Domain</a></var></dt>
542     <dd>
543     <p>A <dfn>Domain</dfn> is a partially qualified DNS domain name, preceded
544     by a period. It represents a list of hosts which logically belong to the
545     same DNS domain or zone (<em>i.e.</em>, the suffixes of the hostnames are
546     all ending in <var>Domain</var>).</p>
547
548     <div class="example"><h3>Examples</h3><p><code>
549       .com .example.org.
550     </code></p></div>
551
552     <p>To distinguish <var>Domain</var>s from <var><a href="#hostname">Hostname</a></var>s (both syntactically and semantically; a DNS domain can
553     have a DNS A record, too!), <var>Domain</var>s are always written with a
554     leading period.</p>
555
556     <div class="note"><h3>Note</h3>
557       <p>Domain name comparisons are done without regard to the case, and
558       <var>Domain</var>s are always assumed to be anchored in the root of the
559       DNS tree, therefore two domains <code>.ExAmple.com</code> and
560       <code>.example.com.</code> (note the trailing period) are considered
561       equal. Since a domain comparison does not involve a DNS lookup, it is much
562       more efficient than subnet comparison.</p>
563     </div></dd>
564
565     
566     <dt><var><a name="subnet" id="subnet">SubNet</a></var></dt>
567     <dd>
568     <p>A <dfn>SubNet</dfn> is a partially qualified internet address in
569     numeric (dotted quad) form, optionally followed by a slash and the netmask,
570     specified as the number of significant bits in the <var>SubNet</var>. It is
571     used to represent a subnet of hosts which can be reached over a common
572     network interface. In the absence of the explicit net mask it is assumed
573     that omitted (or zero valued) trailing digits specify the mask. (In this
574     case, the netmask can only be multiples of 8 bits wide.) Examples:</p>
575
576     <dl>
577     <dt><code>192.168</code> or <code>192.168.0.0</code></dt>
578     <dd>the subnet 192.168.0.0 with an implied netmask of 16 valid bits
579     (sometimes used in the netmask form <code>255.255.0.0</code>)</dd>
580     <dt><code>192.168.112.0/21</code></dt>
581     <dd>the subnet <code>192.168.112.0/21</code> with a netmask of 21
582     valid bits (also used in the form <code>255.255.248.0</code>)</dd>
583     </dl>
584
585     <p>As a degenerate case, a <em>SubNet</em> with 32 valid bits is the
586     equivalent to an <var><a href="#ipaddr">IPAddr</a></var>, while a <var>SubNet</var> with zero
587     valid bits (<em>e.g.</em>, 0.0.0.0/0) is the same as the constant
588     <var>_Default_</var>, matching any IP address.</p></dd>
589
590     
591     <dt><var><a name="ipaddr" id="ipaddr">IPAddr</a></var></dt>
592     <dd>
593     <p>A <dfn>IPAddr</dfn> represents a fully qualified internet address in
594     numeric (dotted quad) form. Usually, this address represents a host, but
595     there need not necessarily be a DNS domain name connected with the
596     address.</p>
597     <div class="example"><h3>Example</h3><p><code>
598       192.168.123.7
599     </code></p></div>
600
601     <div class="note"><h3>Note</h3>
602       <p>An <var>IPAddr</var> does not need to be resolved by the DNS system, so
603       it can result in more effective apache performance.</p>
604     </div></dd>
605
606     
607     <dt><var><a name="hostname" id="hostname">Hostname</a></var></dt>
608     <dd>
609     <p>A <dfn>Hostname</dfn> is a fully qualified DNS domain name which can
610     be resolved to one or more <var><a href="#ipaddr">IPAddrs</a></var> via the
611     DNS domain name service. It represents a logical host (in contrast to
612     <var><a href="#domain">Domain</a></var>s, see above) and must be resolvable
613     to at least one <var><a href="#ipaddr">IPAddr</a></var> (or often to a list
614     of hosts with different <var><a href="#ipaddr">IPAddr</a></var>s).</p>
615
616     <div class="example"><h3>Examples</h3><p><code>
617       prep.ai.example.edu<br />
618       www.example.org
619     </code></p></div>
620
621     <div class="note"><h3>Note</h3>
622       <p>In many situations, it is more effective to specify an <var><a href="#ipaddr">IPAddr</a></var> in place of a <var>Hostname</var> since a
623       DNS lookup can be avoided. Name resolution in Apache httpd can take a remarkable
624       deal of time when the connection to the name server uses a slow PPP
625       link.</p>
626       <p><var>Hostname</var> comparisons are done without regard to the case,
627       and <var>Hostname</var>s are always assumed to be anchored in the root
628       of the DNS tree, therefore two hosts <code>WWW.ExAmple.com</code>
629       and <code>www.example.com.</code> (note the trailing period) are
630       considered equal.</p>
631      </div></dd>
632     </dl>
633
634 <h3>See also</h3>
635 <ul>
636 <li><a href="../dns-caveats.html">DNS Issues</a></li>
637 </ul>
638 </div>
639 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
640 <div class="directive-section"><h2><a name="Proxy" id="Proxy">&lt;Proxy&gt;</a> <a name="proxy" id="proxy">Directive</a></h2>
641 <table class="directive">
642 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Container for directives applied to proxied resources</td></tr>
643 <tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>&lt;Proxy <var>wildcard-url</var>&gt; ...&lt;/Proxy&gt;</code></td></tr>
644 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
645 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
646 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
647 </table>
648     <p>Directives placed in <code class="directive">&lt;Proxy&gt;</code>
649     sections apply only to matching proxied content.  Shell-style wildcards are
650     allowed.</p>
651
652     <p>For example, the following will allow only hosts in
653     <code>yournetwork.example.com</code> to access content via your proxy
654     server:</p>
655
656     <pre class="prettyprint lang-config">
657 &lt;Proxy *&gt;
658   Require host yournetwork.example.com
659 &lt;/Proxy&gt;
660     </pre>
661
662
663     <p>The following example will process all files in the <code>foo</code>
664     directory of <code>example.com</code> through the <code>INCLUDES</code>
665     filter when they are sent through the proxy server:</p>
666
667    <pre class="prettyprint lang-config">    
668 &lt;Proxy http://example.com/foo/*&gt;
669   SetOutputFilter INCLUDES
670 &lt;/Proxy&gt;
671     </pre>
672
673
674
675 <h3>See also</h3>
676 <ul>
677 <li><code class="directive"><a href="#proxymatch">&lt;ProxyMatch&gt;</a></code></li>
678 </ul>
679 </div>
680 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
681 <div class="directive-section"><h2><a name="ProxyAddHeaders" id="ProxyAddHeaders">ProxyAddHeaders</a> <a name="proxyaddheaders" id="proxyaddheaders">Directive</a></h2>
682 <table class="directive">
683 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Add proxy information in X-Forwarded-* headers</td></tr>
684 <tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyAddHeaders Off|On</code></td></tr>
685 <tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyAddHeaders On</code></td></tr>
686 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
687 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
688 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
689 <tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in version 2.3.10 and later</td></tr>
690 </table>
691     <p>This directive determines whether or not proxy related information should be passed to the
692     backend server through X-Forwarded-For, X-Forwarded-Host and X-Forwarded-Server HTTP headers.</p>
693     <div class="note"><h3>Effectiveness</h3>
694      <p>This option is of use only for HTTP proxying, as handled by <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code>.</p>
695     </div>
696
697 </div>
698 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
699 <div class="directive-section"><h2><a name="ProxyBadHeader" id="ProxyBadHeader">ProxyBadHeader</a> <a name="proxybadheader" id="proxybadheader">Directive</a></h2>
700 <table class="directive">
701 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Determines how to handle bad header lines in a
702 response</td></tr>
703 <tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyBadHeader IsError|Ignore|StartBody</code></td></tr>
704 <tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyBadHeader IsError</code></td></tr>
705 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
706 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
707 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
708 <tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in Apache HTTP Server 2.0.44 and later</td></tr>
709 </table>
710     <p>The <code class="directive">ProxyBadHeader</code> directive determines the
711     behaviour of <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> if it receives syntactically invalid
712     response header lines (<em>i.e.</em> containing no colon) from the origin
713     server. The following arguments are possible:</p>
714
715     <dl>
716     <dt><code>IsError</code></dt>
717     <dd>Abort the request and end up with a 502 (Bad Gateway) response. This is
718     the default behaviour.</dd>
719
720     <dt><code>Ignore</code></dt>
721     <dd>Treat bad header lines as if they weren't sent.</dd>
722
723     <dt><code>StartBody</code></dt>
724     <dd>When receiving the first bad header line, finish reading the headers and
725     treat the remainder as body. This helps to work around buggy backend servers
726     which forget to insert an empty line between the headers and the body.</dd>
727     </dl>
728
729 </div>
730 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
731 <div class="directive-section"><h2><a name="ProxyBlock" id="ProxyBlock">ProxyBlock</a> <a name="proxyblock" id="proxyblock">Directive</a></h2>
732 <table class="directive">
733 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Words, hosts, or domains that are banned from being
734 proxied</td></tr>
735 <tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyBlock *|<var>word</var>|<var>host</var>|<var>domain</var>
736 [<var>word</var>|<var>host</var>|<var>domain</var>] ...</code></td></tr>
737 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
738 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
739 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
740 </table>
741     <p>The <code class="directive">ProxyBlock</code> directive specifies a list of
742     words, hosts and/or domains, separated by spaces.  HTTP, HTTPS, and
743     FTP document requests to sites whose names contain matched words,
744     hosts or domains are <em>blocked</em> by the proxy server. The proxy
745     module will also attempt to determine IP addresses of list items which
746     may be hostnames during startup, and cache them for match test as
747     well. That may slow down the startup time of the server.</p>
748
749     <div class="example"><h3>Example</h3><pre class="prettyprint lang-config">
750       ProxyBlock news.example.com auctions.example.com friends.example.com
751       </pre>
752 </div>
753
754     <p>Note that <code>example</code> would also be sufficient to match any
755     of these sites.</p>
756
757     <p>Hosts would also be matched if referenced by IP address.</p>
758
759     <p>Note also that</p>
760
761     <pre class="prettyprint lang-config">
762       ProxyBlock *
763     </pre>
764
765
766     <p>blocks connections to all sites.</p>
767
768 </div>
769 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
770 <div class="directive-section"><h2><a name="ProxyDomain" id="ProxyDomain">ProxyDomain</a> <a name="proxydomain" id="proxydomain">Directive</a></h2>
771 <table class="directive">
772 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Default domain name for proxied requests</td></tr>
773 <tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyDomain <var>Domain</var></code></td></tr>
774 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
775 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
776 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
777 </table>
778     <p>This directive is only useful for Apache httpd proxy servers within
779     intranets. The <code class="directive">ProxyDomain</code> directive specifies
780     the default domain which the apache proxy server will belong to. If a
781     request to a host without a domain name is encountered, a redirection
782     response to the same host with the configured <var>Domain</var> appended
783     will be generated.</p>
784
785     <div class="example"><h3>Example</h3><pre class="prettyprint lang-config">
786       ProxyRemote  *  http://firewall.example.com:81<br />
787       NoProxy         .example.com 192.168.112.0/21<br />
788       ProxyDomain     .example.com
789       </pre>
790 </div>
791
792 </div>
793 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
794 <div class="directive-section"><h2><a name="ProxyErrorOverride" id="ProxyErrorOverride">ProxyErrorOverride</a> <a name="proxyerroroverride" id="proxyerroroverride">Directive</a></h2>
795 <table class="directive">
796 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Override error pages for proxied content</td></tr>
797 <tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyErrorOverride On|Off</code></td></tr>
798 <tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyErrorOverride Off</code></td></tr>
799 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
800 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
801 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
802 <tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in version 2.0 and later</td></tr>
803 </table>
804     <p>This directive is useful for reverse-proxy setups, where you want to
805     have a common look and feel on the error pages seen by the end user.
806     This also allows for included files (via
807     <code class="module"><a href="../mod/mod_include.html">mod_include</a></code>'s SSI) to get
808     the error code and act accordingly (default behavior would display
809     the error page of the proxied server, turning this on shows the SSI
810     Error message).</p>
811
812     <p>This directive does not affect the processing of informational (1xx),
813     normal success (2xx), or redirect (3xx) responses.</p>
814
815 </div>
816 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
817 <div class="directive-section"><h2><a name="ProxyIOBufferSize" id="ProxyIOBufferSize">ProxyIOBufferSize</a> <a name="proxyiobuffersize" id="proxyiobuffersize">Directive</a></h2>
818 <table class="directive">
819 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Determine size of internal data throughput buffer</td></tr>
820 <tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyIOBufferSize <var>bytes</var></code></td></tr>
821 <tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyIOBufferSize 8192</code></td></tr>
822 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
823 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
824 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
825 </table>
826     <p>The <code class="directive">ProxyIOBufferSize</code> directive adjusts the size
827     of the internal buffer, which is used as a scratchpad for the data between
828     input and output. The size must be at least <code>512</code>.</p>
829
830     <p>In almost every case there's no reason to change that value.</p>
831     <p>If used with AJP this directive sets the maximum AJP packet size in
832     bytes. If you change it from the default, you must also change the
833     <code>packetSize</code> attribute of your AJP connector on the
834     Tomcat side! The attribute <code>packetSize</code> is only available
835     in Tomcat <code>5.5.20+</code> and <code>6.0.2+</code></p>
836     <p>Normally it is not necessary to change the maximum packet size.
837     Problems with the default value have been reported when sending
838     certificates or certificate chains.</p>
839
840
841 </div>
842 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
843 <div class="directive-section"><h2><a name="ProxyMatch" id="ProxyMatch">&lt;ProxyMatch&gt;</a> <a name="proxymatch" id="proxymatch">Directive</a></h2>
844 <table class="directive">
845 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Container for directives applied to regular-expression-matched
846 proxied resources</td></tr>
847 <tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>&lt;ProxyMatch <var>regex</var>&gt; ...&lt;/ProxyMatch&gt;</code></td></tr>
848 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
849 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
850 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
851 </table>
852     <p>The <code class="directive">&lt;ProxyMatch&gt;</code> directive is
853     identical to the <code class="directive"><a href="#proxy">&lt;Proxy&gt;</a></code> directive, except it matches URLs
854     using <a class="glossarylink" href="../glossary.html#regex" title="see glossary">regular expressions</a>.</p>
855
856 <h3>See also</h3>
857 <ul>
858 <li><code class="directive"><a href="#proxy">&lt;Proxy&gt;</a></code></li>
859 </ul>
860 </div>
861 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
862 <div class="directive-section"><h2><a name="ProxyMaxForwards" id="ProxyMaxForwards">ProxyMaxForwards</a> <a name="proxymaxforwards" id="proxymaxforwards">Directive</a></h2>
863 <table class="directive">
864 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Maximium number of proxies that a request can be forwarded
865 through</td></tr>
866 <tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyMaxForwards <var>number</var></code></td></tr>
867 <tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyMaxForwards -1</code></td></tr>
868 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
869 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
870 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
871 <tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in Apache HTTP Server 2.0 and later;
872         default behaviour changed in 2.2.7/2.3</td></tr>
873 </table>
874     <p>The <code class="directive">ProxyMaxForwards</code> directive specifies the
875     maximum number of proxies through which a request may pass, if there's no
876     <code>Max-Forwards</code> header supplied with the request. This may
877     be set to prevent infinite proxy loops, or a DoS attack.</p>
878
879     <div class="example"><h3>Example</h3><pre class="prettyprint lang-config">
880       ProxyMaxForwards 15
881       </pre>
882 </div>
883
884     <p>Note that setting <code class="directive">ProxyMaxForwards</code> is a
885     violation of the HTTP/1.1 protocol (RFC2616), which forbids a Proxy
886     setting <code>Max-Forwards</code> if the Client didn't set it.
887     Earlier Apache httpd versions would always set it.  A negative
888     <code class="directive">ProxyMaxForwards</code> value, including the
889     default -1, gives you protocol-compliant behaviour, but may
890     leave you open to loops.</p>
891
892 </div>
893 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
894 <div class="directive-section"><h2><a name="ProxyPass" id="ProxyPass">ProxyPass</a> <a name="proxypass" id="proxypass">Directive</a></h2>
895 <table class="directive">
896 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Maps remote servers into the local server URL-space</td></tr>
897 <tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyPass [<var>path</var>] !|<var>url</var> [<var>key=value</var>
898   <var>[key=value</var> ...]] [nocanon] [interpolate] [noquery]</code></td></tr>
899 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
900 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
901 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
902 </table>
903     <p>This directive allows remote servers to be mapped into the
904     space of the local server; the local server does not act as a
905     proxy in the conventional sense, but appears to be a mirror of the
906     remote server. The local server is often called a <dfn>reverse
907     proxy</dfn> or <dfn>gateway</dfn>. The <var>path</var> is the name of
908     a local virtual path; <var>url</var> is a partial URL for the
909     remote server and cannot include a query string.</p>
910
911     <div class="warning">The <code class="directive"><a href="#proxyrequests">ProxyRequests</a></code> directive should
912     usually be set <strong>off</strong> when using
913     <code class="directive">ProxyPass</code>.</div>
914
915     <p>Suppose the local server has address <code>http://example.com/</code>;
916     then</p>
917
918     <pre class="prettyprint lang-config">
919 &lt;Location /mirror/foo/&gt;
920     ProxyPass http://backend.example.com/
921 &lt;/Location&gt;
922     </pre>
923
924
925     <p>will cause a local request for
926     <code>http://example.com/mirror/foo/bar</code> to be internally converted
927     into a proxy request to <code>http://backend.example.com/bar</code>.</p>
928
929     <p>The following alternative syntax is possible, however it can carry a
930     performance penalty when present in very large numbers. The advantage of
931     the below syntax is that it allows for dynamic control via the
932     <a href="mod_proxy_balancer.html#balancer_manager">Balancer Manager</a> interface:</p>
933
934     <pre class="prettyprint lang-config">
935         ProxyPass /mirror/foo/ http://backend.example.com/
936     </pre>
937
938
939     <div class="warning">
940     <p>If the first argument ends with a trailing <strong>/</strong>, the second
941        argument should also end with a trailing <strong>/</strong> and vice
942        versa. Otherwise the resulting requests to the backend may miss some
943        needed slashes and do not deliver the expected results.
944     </p>
945     </div>
946
947     <p>The <code>!</code> directive is useful in situations where you don't want
948     to reverse-proxy a subdirectory, <em>e.g.</em></p>
949
950     <pre class="prettyprint lang-config">
951 &lt;Location /mirror/foo/&gt;
952     ProxyPass http://backend.example.com/
953 &lt;/Location&gt;
954 &lt;Location /mirror/foo/i&gt;
955     ProxyPass !
956 &lt;/Location&gt;
957     </pre>
958
959
960     <pre class="prettyprint lang-config">
961 ProxyPass /mirror/foo/i !
962 ProxyPass /mirror/foo http://backend.example.com
963     </pre>
964
965
966     <p>will proxy all requests to <code>/mirror/foo</code> to
967     <code>backend.example.com</code> <em>except</em> requests made to
968     <code>/mirror/foo/i</code>.</p>
969
970     <div class="warning"><h3>Ordering ProxyPass Directives</h3>
971       <p>The configured <code class="directive"><a href="#proxypass">ProxyPass</a></code>
972       and <code class="directive"><a href="#proxypassmatch">ProxyPassMatch</a></code>
973       rules are checked in the order of configuration. The first rule that
974       matches wins. So usually you should sort conflicting
975       <code class="directive"><a href="#proxypass">ProxyPass</a></code> rules starting with the
976       longest URLs first. Otherwise later rules for longer URLS will be hidden
977       by any earlier rule which uses a leading substring of the URL. Note that
978       there is some relation with worker sharing. In contrast, only one
979       <code class="directive"><a href="#proxypass">ProxyPass</a></code> directive can be placed
980       in a <code class="directive"><a href="../mod/core.html#location">Location</a></code> block, and the most
981       specific location will take precedence.</p>
982
983       <p>For the same reasons exclusions must come <em>before</em> the
984       general <code class="directive">ProxyPass</code> directives.</p>
985
986     </div> 
987
988     <p>In Apache HTTP Server 2.1 and later, mod_proxy supports pooled
989     connections to a backend server.  Connections created on demand
990     can be retained in a pool for future use.  Limits on the pool size
991     and other settings can be coded on
992     the <code class="directive">ProxyPass</code> directive
993     using  <code>key=value</code> parameters, described in the table
994     below.</p>
995
996     <p>By default, mod_proxy will allow and retain the maximum number of
997     connections that could be used simultaneously by that web server child
998     process.  Use the <code>max</code> parameter to reduce the number from
999     the default.  Use the <code>ttl</code> parameter to set an optional
1000     time to live; connections which have been unused for at least
1001     <code>ttl</code> seconds will be closed.  <code>ttl</code> can be used
1002     to avoid using a connection which is subject to closing because of the
1003     backend server's keep-alive timeout.</p>
1004
1005     <p>The pool of connections is maintained per web server child
1006     process, and <code>max</code> and other settings are not coordinated
1007     among all child processes, except when only one child process is allowed
1008     by configuration or MPM design.</p>
1009
1010     <div class="example"><h3>Example</h3><p><code>
1011         ProxyPass /example http://backend.example.com max=20 ttl=120 retry=300
1012     </code></p></div>
1013
1014     <table class="bordered"><tr><th>BalancerMember parameters</th></tr></table>
1015     <table>
1016     <tr><th>Parameter</th>
1017         <th>Default</th>
1018         <th>Description</th></tr>
1019     <tr><td>min</td>
1020         <td>0</td>
1021         <td>Minimum number of connection pool entries, unrelated to the
1022     actual number of connections.  This only needs to be modified from the
1023     default for special circumstances where heap memory associated with the
1024     backend connections should be preallocated or retained.</td></tr>
1025     <tr><td>max</td>
1026         <td>1...n</td>
1027         <td>Maximum number of connections that will be allowed to the
1028     backend server. The default for this limit is the number of threads
1029     per process in the active MPM. In the Prefork MPM, this is always 1,
1030     while with other MPMs it is controlled by the
1031     <code class="directive">ThreadsPerChild</code> directive.</td></tr>
1032     <tr><td>smax</td>
1033         <td>max</td>
1034         <td>Retained connection pool entries above this limit are freed
1035     during certain operations if they have been unused for longer than
1036     the time to live, controlled by the <code>ttl</code> parameter.  If
1037     the connection pool entry has an associated connection, it will be
1038     closed.  This only needs to be modified from the default for special
1039     circumstances where connection pool entries and any associated
1040     connections which have exceeded the time to live need to be freed or
1041     closed more aggressively.</td></tr>
1042     <tr><td>acquire</td>
1043         <td>-</td>
1044         <td>If set this will be the maximum time to wait for a free
1045     connection in the connection pool, in milliseconds. If there are no free
1046     connections in the pool the Apache httpd will return <code>SERVER_BUSY</code>
1047     status to the client.
1048     </td></tr>
1049     <tr><td>connectiontimeout</td>
1050         <td>timeout</td>
1051         <td>Connect timeout in seconds.
1052         The number of seconds Apache httpd waits for the creation of a connection to
1053         the backend to complete. By adding a postfix of ms the timeout can be
1054         also set in milliseconds.
1055     </td></tr>
1056     <tr><td>disablereuse</td>
1057         <td>Off</td>
1058         <td>This parameter should be used when you want to force mod_proxy
1059     to immediately close a connection to the backend after being used, and
1060     thus, disable its persistent connection and pool for that backend.
1061     This helps in various situations where a firewall between Apache
1062     httpd and
1063     the backend server (regardless of protocol) tends to silently
1064     drop connections or when backends themselves may be under round-
1065     robin DNS. To disable connection pooling reuse,
1066     set this property value to <code>On</code>.
1067     </td></tr>
1068     <tr><td>flushpackets</td>
1069         <td>off</td>
1070         <td>Determines whether the proxy module will auto-flush the output
1071         brigade after each "chunk" of data. 'off' means that it will flush
1072         only when needed, 'on' means after each chunk is sent and
1073         'auto' means poll/wait for a period of time and flush if
1074         no input has been received for 'flushwait' milliseconds.
1075         Currently this is in effect only for AJP.
1076     </td></tr>
1077     <tr><td>flushwait</td>
1078         <td>10</td>
1079         <td>The time to wait for additional input, in milliseconds, before
1080         flushing the output brigade if 'flushpackets' is 'auto'.
1081     </td></tr>
1082     <tr><td>iobuffersize</td>
1083         <td>8192</td>
1084         <td>Adjusts the size of the internal scratchpad IO buffer. This allows you
1085         to override the <code class="directive">ProxyIOBufferSize</code> for a specific worker.
1086         This must be at least 512 or set to 0 for the system default of 8192.
1087     </td></tr>
1088     <tr><td>keepalive</td>
1089         <td>Off</td>
1090         <td><p>This parameter should be used when you have a firewall between your
1091     Apache httpd and the backend server, who tend to drop inactive connections.
1092     This flag will tell the Operating System to send <code>KEEP_ALIVE</code>
1093     messages on inactive connections  and thus prevent the firewall to drop the connection.
1094     To enable keepalive set this property value to <code>On</code>. </p>
1095     <p>The frequency of initial and subsequent TCP keepalive probes
1096     depends on global OS settings, and may be as high as 2 hours. To be useful,
1097     the frequency configured in the OS must be smaller than the threshold used
1098     by the firewall.</p>
1099     </td></tr>
1100     <tr><td>lbset</td>
1101         <td>0</td>
1102         <td>Sets the load balancer cluster set that the worker is a member
1103          of. The load balancer will try all members of a lower numbered
1104          lbset before trying higher numbered ones.
1105     </td></tr>
1106     <tr><td>ping</td>
1107         <td>0</td>
1108         <td>Ping property tells the webserver to "test" the connection to
1109         the backend before forwarding the request. For AJP, it causes
1110         <code class="module"><a href="../mod/mod_proxy_ajp.html">mod_proxy_ajp</a></code>to send a <code>CPING</code>
1111         request on the ajp13 connection (implemented on Tomcat 3.3.2+, 4.1.28+
1112         and 5.0.13+). For HTTP, it causes <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code>
1113         to send a <code>100-Continue</code> to the backend (only valid for
1114         HTTP/1.1 - for non HTTP/1.1 backends, this property has no
1115         effect). In both cases the parameter is the delay in seconds to wait
1116         for the reply.
1117         This feature has been added to avoid problems with hung and
1118         busy backends.
1119         This will increase the network traffic during the normal operation
1120         which could be an issue, but it will lower the
1121         traffic in case some of the cluster nodes are down or busy.
1122         By adding a postfix of ms the delay can be also set in
1123         milliseconds.
1124     </td></tr>
1125     <tr><td>receivebuffersize</td>
1126         <td>0</td>
1127         <td>Adjusts the size of the explicit (TCP/IP) network buffer size for
1128         proxied connections. This allows you to override the
1129         <code class="directive">ProxyReceiveBufferSize</code> for a specific worker.
1130         This must be at least 512 or set to 0 for the system default.
1131     </td></tr>
1132     <tr><td>redirect</td>
1133         <td>-</td>
1134         <td>Redirection Route of the worker. This value is usually
1135         set dynamically to enable safe removal of the node from
1136         the cluster. If set all requests without session id will be
1137         redirected to the BalancerMember that has route parameter
1138         equal as this value.
1139     </td></tr>
1140     <tr><td>retry</td>
1141         <td>60</td>
1142         <td>Connection pool worker retry timeout in seconds.
1143     If the connection pool worker to the backend server is in the error state,
1144     Apache httpd will not forward any requests to that server until the timeout
1145     expires. This enables to shut down the backend server for maintenance,
1146     and bring it back online later. A value of 0 means always retry workers
1147     in an error state with no timeout.
1148     </td></tr>
1149     <tr><td>route</td>
1150         <td>-</td>
1151         <td>Route of the worker when used inside load balancer.
1152         The route is a value appended to session id.
1153     </td></tr>
1154     <tr><td>status</td>
1155         <td>-</td>
1156         <td>Single letter value defining the initial status of
1157         this worker.
1158         <table>
1159          <tr><td>D: Worker is disabled and will not accept any requests.</td></tr>
1160          <tr><td>S: Worker is administratively stopped.</td></tr>
1161          <tr><td>I: Worker is in ignore-errors mode, and will always be considered available.</td></tr>
1162          <tr><td>H: Worker is in hot-standby mode and will only be used if no other
1163                     viable workers are available.</td></tr>
1164          <tr><td>E: Worker is in an error state.</td></tr>
1165          <tr><td>N: Worker is in drain mode, and will only accept existing sticky sessions
1166                     destined for itself and ignore all other requests.</td></tr>
1167         </table>Status
1168         can be set (which is the default) by prepending with '+' or
1169         cleared by prepending with '-'.
1170         Thus, a setting of 'S-E' sets this worker to Stopped and
1171         clears the in-error flag.
1172     </td></tr>
1173     <tr><td>timeout</td>
1174         <td><code class="directive"><a href="#proxytimeout">ProxyTimeout</a></code></td>
1175         <td>Connection timeout in seconds.
1176         The number of seconds Apache httpd waits for data sent by / to the backend.
1177     </td></tr>
1178     <tr><td>ttl</td>
1179         <td>-</td>
1180         <td>Time to live for inactive connections and associated connection
1181         pool entries, in seconds.  Once reaching this limit, a
1182         connection will not be used again; it will be closed at some
1183         later time.
1184     </td></tr>
1185
1186     </table>
1187
1188     <p>If the Proxy directive scheme starts with the
1189     <code>balancer://</code> (eg: <code>balancer://cluster/</code>,
1190     any path information is ignored)  then a virtual worker that does not really
1191     communicate with the backend server will be created. Instead it is responsible
1192     for the management of several "real" workers. In that case the special set of
1193     parameters can be add to this virtual worker. See <code class="module"><a href="../mod/mod_proxy_balancer.html">mod_proxy_balancer</a></code>
1194     for more information about how the balancer works.
1195     </p>
1196     <table class="bordered"><tr><th>Balancer parameters</th></tr></table>
1197     <table>
1198     <tr><th>Parameter</th>
1199         <th>Default</th>
1200         <th>Description</th></tr>
1201     <tr><td>lbmethod</td>
1202         <td>byrequests</td>
1203         <td>Balancer load-balance method. Select the load-balancing scheduler
1204         method to use. Either <code>byrequests</code>, to perform weighted
1205         request counting, <code>bytraffic</code>, to perform weighted
1206         traffic byte count balancing, or <code>bybusyness</code>, to perform
1207         pending request balancing. Default is <code>byrequests</code>.
1208     </td></tr>
1209     <tr><td>maxattempts</td>
1210         <td>One less than the number of workers, or 1 with a single worker.</td>
1211         <td>Maximum number of failover attempts before giving up.
1212     </td></tr>
1213     <tr><td>nofailover</td>
1214         <td>Off</td>
1215         <td>If set to <code>On</code> the session will break if the worker is in
1216         error state or disabled. Set this value to On if backend servers do not
1217         support session replication.
1218     </td></tr>
1219     <tr><td>stickysession</td>
1220         <td>-</td>
1221         <td>Balancer sticky session name. The value is usually set to something
1222         like <code>JSESSIONID</code> or <code>PHPSESSIONID</code>,
1223         and it depends on the backend application server that support sessions.
1224         If the backend application server uses different name for cookies
1225         and url encoded id (like servlet containers) use | to to separate them.
1226         The first part is for the cookie the second for the path.
1227     </td></tr>
1228     <tr><td>scolonpathdelim</td>
1229         <td>Off</td>
1230         <td>If set to <code>On</code> the semi-colon character ';' will be
1231         used as an additional sticky session path deliminator/separator. This
1232         is mainly used to emulate mod_jk's behavior when dealing with paths such
1233         as <code>JSESSIONID=6736bcf34;foo=aabfa</code>
1234     </td></tr>
1235     <tr><td>timeout</td>
1236         <td>0</td>
1237         <td>Balancer timeout in seconds. If set this will be the maximum time
1238         to wait for a free worker. Default is not to wait.
1239     </td></tr>
1240     <tr><td>failonstatus</td>
1241         <td>-</td>
1242         <td>A single or comma-separated list of HTTP status codes. If set this will
1243         force the worker into error state when the backend returns any status code
1244         in the list. Worker recovery behaves the same as other worker errors.
1245     </td></tr>
1246     <tr><td>nonce</td>
1247         <td>&lt;auto&gt;</td>
1248         <td>The protective nonce used in the <code>balancer-manager</code> application page.
1249         The default is to use an automatically determined UUID-based
1250         nonce, to provide for further protection for the page. If set,
1251         then the nonce is set to that value. A setting of <code>None</code>
1252         disables all nonce checking.
1253     <div class="note"><h3>Note</h3>
1254       <p>In addition to the nonce, the <code>balancer-manager</code> page
1255       should be protected via an ACL.</p>
1256     </div>
1257      </td></tr>
1258     <tr><td>growth</td>
1259         <td>0</td>
1260         <td>Number of additional BalancerMembers to allow to be added
1261         to this balancer in addition to those defined at configuration.
1262     </td></tr>
1263     <tr><td>forcerecovery</td>
1264         <td>On</td>
1265         <td>Force the immediate recovery of all workers without considering the
1266         retry parameter of the workers if all workers of a balancer are
1267         in error state. There might be cases where an already overloaded backend
1268         can get into deeper trouble if the recovery of all workers is enforced
1269         without considering the retry parameter of each worker. In this case
1270         set to <code>Off</code>.
1271     </td></tr>
1272
1273     </table>
1274     <p>A sample balancer setup</p>
1275     <pre class="prettyprint lang-config">
1276 ProxyPass /special-area http://special.example.com smax=5 max=10
1277 ProxyPass / balancer://mycluster/ stickysession=JSESSIONID|jsessionid nofailover=On
1278 &lt;Proxy balancer://mycluster&gt;
1279     BalancerMember ajp://1.2.3.4:8009
1280     BalancerMember ajp://1.2.3.5:8009 loadfactor=20
1281     # Less powerful server, don't send as many requests there,
1282     BalancerMember ajp://1.2.3.6:8009 loadfactor=5
1283 &lt;/Proxy&gt;
1284     </pre>
1285
1286
1287     <p>Setting up a hot-standby, that will only be used if no other
1288      members are available</p>
1289     <pre class="prettyprint lang-config">
1290 ProxyPass / balancer://hotcluster/ 
1291 &lt;Proxy balancer://hotcluster&gt;
1292     BalancerMember ajp://1.2.3.4:8009 loadfactor=1
1293     BalancerMember ajp://1.2.3.5:8009 loadfactor=2
1294     # The server below is on hot standby
1295     BalancerMember ajp://1.2.3.6:8009 status=+H
1296     ProxySet lbmethod=bytraffic
1297 &lt;/Proxy&gt;
1298     </pre>
1299
1300
1301     <p>Normally, mod_proxy will canonicalise ProxyPassed URLs.
1302     But this may be incompatible with some backends, particularly those
1303     that make use of <var>PATH_INFO</var>.  The optional <var>nocanon</var>
1304     keyword suppresses this, and passes the URL path "raw" to the
1305     backend.  Note that may affect the security of your backend, as it
1306     removes the normal limited protection against URL-based attacks
1307     provided by the proxy.</p>
1308
1309     <p>The optional <var>interpolate</var> keyword (available in
1310     httpd 2.2.9 and later), in combination with
1311     <code class="directive">ProxyPassInterpolateEnv</code> causes the ProxyPass
1312     to interpolate environment variables, using the syntax
1313     <var>${VARNAME}</var>.  Note that many of the standard CGI-derived
1314     environment variables will not exist when this interpolation happens,
1315     so you may still have to resort to <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>
1316     for complex rules.</p>
1317
1318     <p>Normally, mod_proxy will include the query string when
1319     generating the <var>SCRIPT_FILENAME</var> environment variable.
1320     The optional <var>noquery</var> keyword (available in
1321     httpd 2.4.1 and later) prevents this.</p>
1322
1323     <p>When used inside a <code class="directive"><a href="../mod/core.html#location">&lt;Location&gt;</a></code> section, the first argument is omitted and the local
1324     directory is obtained from the <code class="directive"><a href="../mod/core.html#location">&lt;Location&gt;</a></code>. The same will occur inside a
1325     <code class="directive"><a href="../mod/core.html#locationmatch">&lt;LocationMatch&gt;</a></code> section,
1326     however ProxyPass does not interpret the regexp as such, so it is necessary
1327     to use <code class="directive">ProxyPassMatch</code> in this situation instead.</p>
1328
1329     <p>This directive is not supported in <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code> or <code class="directive"><a href="../mod/core.html#files">&lt;Files&gt;</a></code> sections.</p>
1330
1331     <p>If you require a more flexible reverse-proxy configuration, see the
1332     <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> directive with the
1333     <code>[P]</code> flag.</p>
1334
1335
1336 </div>
1337 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
1338 <div class="directive-section"><h2><a name="ProxyPassInterpolateEnv" id="ProxyPassInterpolateEnv">ProxyPassInterpolateEnv</a> <a name="proxypassinterpolateenv" id="proxypassinterpolateenv">Directive</a></h2>
1339 <table class="directive">
1340 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Enable Environment Variable interpolation in Reverse Proxy configurations</td></tr>
1341 <tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyPassInterpolateEnv On|Off</code></td></tr>
1342 <tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyPassInterpolateEnv Off</code></td></tr>
1343 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
1344 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
1345 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
1346 <tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in httpd 2.2.9 and later</td></tr>
1347 </table>
1348     <p>This directive, together with the <var>interpolate</var> argument to
1349     <code class="directive">ProxyPass</code>, <code class="directive">ProxyPassReverse</code>,
1350     <code class="directive">ProxyPassReverseCookieDomain</code> and
1351     <code class="directive">ProxyPassReverseCookiePath</code>
1352     enables reverse proxies to be dynamically
1353     configured using environment variables, which may be set by
1354     another module such as <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>.
1355     It affects the <code class="directive">ProxyPass</code>,
1356     <code class="directive">ProxyPassReverse</code>,
1357     <code class="directive">ProxyPassReverseCookieDomain</code>, and
1358     <code class="directive">ProxyPassReverseCookiePath</code> directives,
1359     and causes them to substitute the value of an environment
1360     variable <code>varname</code> for the string <code>${varname}</code>
1361     in configuration directives (if the <var>interpolate</var> option is set).</p>
1362     <p>Keep this turned off (for server performance) unless you need it!</p>
1363
1364 </div>
1365 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
1366 <div class="directive-section"><h2><a name="ProxyPassMatch" id="ProxyPassMatch">ProxyPassMatch</a> <a name="proxypassmatch" id="proxypassmatch">Directive</a></h2>
1367 <table class="directive">
1368 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Maps remote servers into the local server URL-space using regular expressions</td></tr>
1369 <tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyPassMatch [<var>regex</var>] !|<var>url</var> [<var>key=value</var>
1370         <var>[key=value</var> ...]]</code></td></tr>
1371 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
1372 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
1373 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
1374 </table>
1375     <p>This directive is equivalent to <code class="directive"><a href="#proxypass">ProxyPass</a></code>,
1376        but makes use of regular expressions, instead of simple prefix matching. The
1377        supplied regular expression is matched against the <var>url</var>, and if it
1378        matches, the server will substitute any parenthesized matches into the given
1379        string and use it as a new <var>url</var>.</p>
1380
1381     <p>Suppose the local server has address <code>http://example.com/</code>;
1382     then</p>
1383
1384     <pre class="prettyprint lang-config">
1385       ProxyPassMatch ^(/.*\.gif)$ http://backend.example.com$1
1386     </pre>
1387
1388
1389     <p>will cause a local request for
1390     <code>http://example.com/foo/bar.gif</code> to be internally converted
1391     into a proxy request to <code>http://backend.example.com/foo/bar.gif</code>.</p>
1392     <div class="note"><h3>Note</h3>
1393       <p>The URL argument must be parsable as a URL <em>before</em> regexp
1394       substitutions (as well as after).  This limits the matches you can use.
1395       For instance, if we had used</p>
1396       <pre class="prettyprint lang-config">
1397         ProxyPassMatch ^(/.*\.gif)$ http://backend.example.com:8000$1
1398       </pre>
1399
1400       <p>in our previous example, it would fail with a syntax error
1401       at server startup.  This is a bug (PR 46665 in the ASF bugzilla),
1402       and the workaround is to reformulate the match:</p>
1403       <pre class="prettyprint lang-config">
1404         ProxyPassMatch ^/(.*\.gif)$ http://backend.example.com:8000/$1
1405       </pre>
1406
1407     </div>
1408     <p>The <code>!</code> directive is useful in situations where you don't want
1409     to reverse-proxy a subdirectory.</p>
1410
1411     <p>When used inside a <code class="directive"><a href="../mod/core.html#locationmatch">&lt;LocationMatch&gt;</a></code> section, the first argument is omitted and the
1412     regexp is obtained from the <code class="directive"><a href="../mod/core.html#locationmatch">&lt;LocationMatch&gt;</a></code>.</p>
1413
1414     <p>If you require a more flexible reverse-proxy configuration, see the
1415     <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> directive with the
1416     <code>[P]</code> flag.</p>
1417
1418     <div class="warning">
1419       <h3>Security Warning</h3>
1420       <p>Take care when constructing the target URL of the rule, considering
1421         the security impact from allowing the client influence over the set of
1422         URLs to which your server will act as a proxy.  Ensure that the scheme
1423         and hostname part of the URL is either fixed, or does not allow the
1424         client undue influence.</p>
1425     </div>
1426
1427 </div>
1428 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
1429 <div class="directive-section"><h2><a name="ProxyPassReverse" id="ProxyPassReverse">ProxyPassReverse</a> <a name="proxypassreverse" id="proxypassreverse">Directive</a></h2>
1430 <table class="directive">
1431 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Adjusts the URL in HTTP response headers sent from a reverse
1432 proxied server</td></tr>
1433 <tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyPassReverse [<var>path</var>] <var>url</var>
1434 [<var>interpolate</var>]</code></td></tr>
1435 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
1436 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
1437 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
1438 </table>
1439     <p>This directive lets Apache httpd adjust the URL in the <code>Location</code>,
1440     <code>Content-Location</code> and <code>URI</code> headers on HTTP
1441     redirect responses. This is essential when Apache httpd is used as a
1442     reverse proxy (or gateway) to avoid by-passing the reverse proxy
1443     because of HTTP redirects on the backend servers which stay behind
1444     the reverse proxy.</p>
1445
1446     <p>Only the HTTP response headers specifically mentioned above
1447     will be rewritten. Apache httpd will not rewrite other response
1448     headers, nor will it rewrite URL references inside HTML pages.
1449     This means that if the proxied content contains absolute URL
1450     references, they will by-pass the proxy.  A third-party module
1451     that will look inside the HTML and rewrite URL references is Nick
1452     Kew's <a href="http://apache.webthing.com/mod_proxy_html/">mod_proxy_html</a>.</p>
1453
1454     <p><var>path</var> is the name of a local virtual path. <var>url</var> is a
1455     partial URL for the remote server - the same way they are used for the
1456     <code class="directive"><a href="#proxypass">ProxyPass</a></code> directive.</p>
1457
1458     <p>For example, suppose the local server has address
1459     <code>http://example.com/</code>; then</p>
1460
1461     <pre class="prettyprint lang-config">
1462 ProxyPass         /mirror/foo/ http://backend.example.com/
1463 ProxyPassReverse  /mirror/foo/ http://backend.example.com/
1464 ProxyPassReverseCookieDomain  backend.example.com  public.example.com
1465 ProxyPassReverseCookiePath  /  /mirror/foo/
1466     </pre>
1467
1468
1469     <p>will not only cause a local request for the
1470     <code>http://example.com/mirror/foo/bar</code> to be internally converted
1471     into a proxy request to <code>http://backend.example.com/bar</code>
1472     (the functionality <code>ProxyPass</code> provides here). It also takes care
1473     of redirects the server <code>backend.example.com</code> sends: when
1474     <code>http://backend.example.com/bar</code> is redirected by him to
1475     <code>http://backend.example.com/quux</code> Apache httpd adjusts this to
1476     <code>http://example.com/mirror/foo/quux</code> before forwarding the HTTP
1477     redirect response to the client. Note that the hostname used for
1478     constructing the URL is chosen in respect to the setting of the <code class="directive"><a href="../mod/core.html#usecanonicalname">UseCanonicalName</a></code> directive.</p>
1479
1480     <p>Note that this <code class="directive">ProxyPassReverse</code> directive can
1481     also be used in conjunction with the proxy pass-through feature
1482     (<code>RewriteRule ...  [P]</code>) from <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>
1483     because it doesn't depend on a corresponding <code class="directive"><a href="#proxypass">ProxyPass</a></code> directive.</p>
1484
1485     <p>The optional <var>interpolate</var> keyword (available in
1486     httpd 2.2.9 and later), used together with
1487     <code class="directive">ProxyPassInterpolateEnv</code>, enables interpolation
1488     of environment variables specified using the format <var>${VARNAME}</var>.
1489     </p>
1490
1491     <p>When used inside a <code class="directive"><a href="../mod/core.html#location">&lt;Location&gt;</a></code> section, the first argument is omitted and the local
1492     directory is obtained from the <code class="directive"><a href="../mod/core.html#location">&lt;Location&gt;</a></code>. The same occurs inside a <code class="directive"><a href="../mod/core.html#locationmatch">&lt;LocationMatch&gt;</a></code> section, but will probably not work as
1493     intended, as ProxyPassReverse will interpret the regexp literally as a
1494     path; if needed in this situation, specify the ProxyPassReverse outside
1495     the section, or in a separate <code class="directive"><a href="../mod/core.html#location">&lt;Location&gt;</a></code> section.</p>
1496
1497     <p>This directive is not supported in <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code> or <code class="directive"><a href="../mod/core.html#files">&lt;Files&gt;</a></code> sections.</p>
1498
1499 </div>
1500 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
1501 <div class="directive-section"><h2><a name="ProxyPassReverseCookieDomain" id="ProxyPassReverseCookieDomain">ProxyPassReverseCookieDomain</a> <a name="proxypassreversecookiedomain" id="proxypassreversecookiedomain">Directive</a></h2>
1502 <table class="directive">
1503 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Adjusts the Domain string in Set-Cookie headers from a reverse-
1504 proxied server</td></tr>
1505 <tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyPassReverseCookieDomain <var>internal-domain</var>
1506 <var>public-domain</var> [<var>interpolate</var>]</code></td></tr>
1507 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
1508 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
1509 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
1510 </table>
1511 <p>Usage is basically similar to
1512 <code class="directive"><a href="#proxypassreverse">ProxyPassReverse</a></code>, but instead of
1513 rewriting headers that are a URL, this rewrites the <code>domain</code>
1514 string in <code>Set-Cookie</code> headers.</p>
1515
1516 </div>
1517 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
1518 <div class="directive-section"><h2><a name="ProxyPassReverseCookiePath" id="ProxyPassReverseCookiePath">ProxyPassReverseCookiePath</a> <a name="proxypassreversecookiepath" id="proxypassreversecookiepath">Directive</a></h2>
1519 <table class="directive">
1520 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Adjusts the Path string in Set-Cookie headers from a reverse-
1521 proxied server</td></tr>
1522 <tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyPassReverseCookiePath <var>internal-path</var>
1523 <var>public-path</var> [<var>interpolate</var>]</code></td></tr>
1524 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
1525 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
1526 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
1527 </table>
1528 <p>
1529 Useful in conjunction with
1530 <code class="directive"><a href="#proxypassreverse">ProxyPassReverse</a></code>
1531 in situations where backend URL paths are mapped to public paths on the
1532 reverse proxy. This directive rewrites the <code>path</code> string in
1533 <code>Set-Cookie</code> headers. If the beginning of the cookie path matches
1534 <var>internal-path</var>, the cookie path will be replaced with
1535 <var>public-path</var>.
1536 </p><p>
1537 In the example given with 
1538 <code class="directive"><a href="#proxypassreverse">ProxyPassReverse</a></code>, the directive:
1539 </p>
1540     <pre class="prettyprint lang-config">
1541       ProxyPassReverseCookiePath  /  /mirror/foo/
1542     </pre>
1543
1544 <p>
1545 will rewrite a cookie with backend path <code>/</code> (or
1546 <code>/example</code> or, in fact, anything) to <code>/mirror/foo/</code>.
1547 </p>
1548
1549 </div>
1550 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
1551 <div class="directive-section"><h2><a name="ProxyPreserveHost" id="ProxyPreserveHost">ProxyPreserveHost</a> <a name="proxypreservehost" id="proxypreservehost">Directive</a></h2>
1552 <table class="directive">
1553 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Use incoming Host HTTP request header for proxy
1554 request</td></tr>
1555 <tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyPreserveHost On|Off</code></td></tr>
1556 <tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyPreserveHost Off</code></td></tr>
1557 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr>
1558 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
1559 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
1560 <tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in Apache HTTP Server 2.0.31 and later. Usable in directory
1561 context in 2.3.3 and later.</td></tr>
1562 </table>
1563     <p>When enabled, this option will pass the Host: line from the incoming
1564     request to the proxied host, instead of the hostname specified in the
1565     <code class="directive">ProxyPass</code> line.</p>
1566
1567     <p>This option should normally be turned <code>Off</code>. It is mostly
1568     useful in special configurations like proxied mass name-based virtual
1569     hosting, where the original Host header needs to be evaluated by the
1570     backend server.</p>
1571
1572 </div>
1573 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
1574 <div class="directive-section"><h2><a name="ProxyReceiveBufferSize" id="ProxyReceiveBufferSize">ProxyReceiveBufferSize</a> <a name="proxyreceivebuffersize" id="proxyreceivebuffersize">Directive</a></h2>
1575 <table class="directive">
1576 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Network buffer size for proxied HTTP and FTP
1577 connections</td></tr>
1578 <tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyReceiveBufferSize <var>bytes</var></code></td></tr>
1579 <tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyReceiveBufferSize 0</code></td></tr>
1580 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
1581 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
1582 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
1583 </table>
1584     <p>The <code class="directive">ProxyReceiveBufferSize</code> directive specifies an
1585     explicit (TCP/IP) network buffer size for proxied HTTP and FTP connections,
1586     for increased throughput. It has to be greater than <code>512</code> or set
1587     to <code>0</code> to indicate that the system's default buffer size should
1588     be used.</p>
1589
1590     <div class="example"><h3>Example</h3><pre class="prettyprint lang-config">
1591       ProxyReceiveBufferSize 2048
1592       </pre>
1593 </div>
1594
1595 </div>
1596 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
1597 <div class="directive-section"><h2><a name="ProxyRemote" id="ProxyRemote">ProxyRemote</a> <a name="proxyremote" id="proxyremote">Directive</a></h2>
1598 <table class="directive">
1599 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Remote proxy used to handle certain requests</td></tr>
1600 <tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyRemote <var>match</var> <var>remote-server</var></code></td></tr>
1601 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
1602 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
1603 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
1604 </table>
1605     <p>This defines remote proxies to this proxy. <var>match</var> is either the
1606     name of a URL-scheme that the remote server supports, or a partial URL
1607     for which the remote server should be used, or <code>*</code> to indicate
1608     the server should be contacted for all requests. <var>remote-server</var> is
1609     a partial URL for the remote server. Syntax:</p>
1610
1611     <div class="example"><p><code>
1612       <dfn>remote-server</dfn> =
1613           <var>scheme</var>://<var>hostname</var>[:<var>port</var>]
1614     </code></p></div>
1615
1616     <p><var>scheme</var> is effectively the protocol that should be used to
1617     communicate with the remote server; only <code>http</code> and <code>https</code>
1618     are supported by this module. When using <code>https</code>, the requests
1619     are forwarded through the remote proxy using the HTTP CONNECT method.</p>
1620
1621     <div class="example"><h3>Example</h3><pre class="prettyprint lang-config">
1622 ProxyRemote http://goodguys.example.com/ http://mirrorguys.example.com:8000
1623 ProxyRemote * http://cleverproxy.localdomain
1624 ProxyRemote ftp http://ftpproxy.mydomain:8080
1625     </pre>
1626 </div>
1627
1628     <p>In the last example, the proxy will forward FTP requests, encapsulated
1629     as yet another HTTP proxy request, to another proxy which can handle
1630     them.</p>
1631
1632     <p>This option also supports reverse proxy configuration - a backend
1633     webserver can be embedded within a virtualhost URL space even if that
1634     server is hidden by another forward proxy.</p>
1635
1636 </div>
1637 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
1638 <div class="directive-section"><h2><a name="ProxyRemoteMatch" id="ProxyRemoteMatch">ProxyRemoteMatch</a> <a name="proxyremotematch" id="proxyremotematch">Directive</a></h2>
1639 <table class="directive">
1640 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Remote proxy used to handle requests matched by regular
1641 expressions</td></tr>
1642 <tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyRemoteMatch <var>regex</var> <var>remote-server</var></code></td></tr>
1643 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
1644 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
1645 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
1646 </table>
1647     <p>The <code class="directive">ProxyRemoteMatch</code> is identical to the
1648     <code class="directive"><a href="#proxyremote">ProxyRemote</a></code> directive, except the
1649     first argument is a <a class="glossarylink" href="../glossary.html#regex" title="see glossary">regular expression</a>
1650     match against the requested URL.</p>
1651
1652 </div>
1653 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
1654 <div class="directive-section"><h2><a name="ProxyRequests" id="ProxyRequests">ProxyRequests</a> <a name="proxyrequests" id="proxyrequests">Directive</a></h2>
1655 <table class="directive">
1656 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Enables forward (standard) proxy requests</td></tr>
1657 <tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyRequests On|Off</code></td></tr>
1658 <tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyRequests Off</code></td></tr>
1659 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
1660 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
1661 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
1662 </table>
1663     <p>This allows or prevents Apache httpd from functioning as a forward proxy
1664     server. (Setting ProxyRequests to <code>Off</code> does not disable use of
1665     the <code class="directive"><a href="#proxypass">ProxyPass</a></code> directive.)</p>
1666
1667     <p>In a typical reverse proxy or gateway configuration, this
1668     option should be set to
1669     <code>Off</code>.</p>
1670
1671     <p>In order to get the functionality of proxying HTTP or FTP sites, you
1672     need also <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code> or <code class="module"><a href="../mod/mod_proxy_ftp.html">mod_proxy_ftp</a></code>
1673     (or both) present in the server.</p>
1674
1675     <p>In order to get the functionality of proxying HTTPS sites, you
1676     need <code class="module"><a href="../mod/mod_proxy_connect.html">mod_proxy_connect</a></code> enabled in the server.</p>
1677
1678     <div class="warning"><h3>Warning</h3>
1679       <p>Do not enable proxying with <code class="directive"><a href="#proxyrequests">ProxyRequests</a></code> until you have <a href="#access">secured your server</a>.  Open proxy servers are dangerous
1680       both to your network and to the Internet at large.</p>
1681     </div>
1682
1683 <h3>See also</h3>
1684 <ul>
1685 <li><a href="#forwardreverse">Forward and Reverse Proxies/Gateways</a></li>
1686 </ul>
1687 </div>
1688 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
1689 <div class="directive-section"><h2><a name="ProxySet" id="ProxySet">ProxySet</a> <a name="proxyset" id="proxyset">Directive</a></h2>
1690 <table class="directive">
1691 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Set various Proxy balancer or member parameters</td></tr>
1692 <tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxySet <var>url</var> <var>key=value [key=value ...]</var></code></td></tr>
1693 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory</td></tr>
1694 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
1695 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
1696 <tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>ProxySet is only available in Apache HTTP Server 2.2
1697   and later.</td></tr>
1698 </table>
1699     <p>This directive is used as an alternate method of setting any of the
1700     parameters available to Proxy balancers and workers normally done via the
1701     <code class="directive"><a href="#proxypass">ProxyPass</a></code> directive. If used
1702     within a <code>&lt;Proxy <var>balancer url|worker url</var>&gt;</code>
1703     container directive, the <var>url</var> argument is not required. As a side
1704     effect the respective balancer or worker gets created. This can be useful
1705     when doing reverse proxying via a
1706     <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> instead of a
1707     <code class="directive"><a href="#proxypass">ProxyPass</a></code> directive.</p>
1708
1709     <div class="example"><pre class="prettyprint lang-config">
1710 &lt;Proxy balancer://hotcluster&gt;
1711     BalancerMember http://www2.example.com:8080 loadfactor=1
1712     BalancerMember http://www3.example.com:8080 loadfactor=2
1713     ProxySet lbmethod=bytraffic
1714 &lt;/Proxy&gt;
1715       </pre>
1716 </div>
1717
1718     <pre class="prettyprint lang-config">
1719 &lt;Proxy http://backend&gt;
1720     ProxySet keepalive=On
1721 &lt;/Proxy&gt;
1722     </pre>
1723
1724
1725     <pre class="prettyprint lang-config">
1726         ProxySet balancer://foo lbmethod=bytraffic timeout=15
1727     </pre>
1728
1729
1730     <pre class="prettyprint lang-config">
1731         ProxySet ajp://backend:7001 timeout=15
1732     </pre>
1733
1734
1735    <div class="warning"><h3>Warning</h3>
1736       <p>Keep in mind that the same parameter key can have a different meaning
1737       depending whether it is applied to a balancer or a worker as shown by the two
1738       examples above regarding timeout.</p>
1739    </div>
1740
1741
1742 </div>
1743 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
1744 <div class="directive-section"><h2><a name="ProxySourceAddress" id="ProxySourceAddress">ProxySourceAddress</a> <a name="proxysourceaddress" id="proxysourceaddress">Directive</a></h2>
1745 <table class="directive">
1746 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Set local IP address for outgoing proxy connections</td></tr>
1747 <tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxySourceAddress <var>address</var></code></td></tr>
1748 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
1749 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
1750 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
1751 <tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in version 2.3.9 and later</td></tr>
1752 </table>
1753     <p>This directive allows to set a specific local address to bind to when connecting
1754     to a backend server.</p>
1755
1756 </div>
1757 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
1758 <div class="directive-section"><h2><a name="ProxyStatus" id="ProxyStatus">ProxyStatus</a> <a name="proxystatus" id="proxystatus">Directive</a></h2>
1759 <table class="directive">
1760 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Show Proxy LoadBalancer status in mod_status</td></tr>
1761 <tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyStatus Off|On|Full</code></td></tr>
1762 <tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyStatus Off</code></td></tr>
1763 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
1764 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
1765 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
1766 <tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in version 2.2 and later</td></tr>
1767 </table>
1768     <p>This directive determines whether or not proxy
1769     loadbalancer status data is displayed via the <code class="module"><a href="../mod/mod_status.html">mod_status</a></code>
1770     server-status page.</p>
1771     <div class="note"><h3>Note</h3>
1772       <p><strong>Full</strong> is synonymous with <strong>On</strong></p>
1773     </div>
1774
1775
1776 </div>
1777 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
1778 <div class="directive-section"><h2><a name="ProxyTimeout" id="ProxyTimeout">ProxyTimeout</a> <a name="proxytimeout" id="proxytimeout">Directive</a></h2>
1779 <table class="directive">
1780 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Network timeout for proxied requests</td></tr>
1781 <tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyTimeout <var>seconds</var></code></td></tr>
1782 <tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>Value of <code class="directive"><a href="../mod/core.html#timeout">Timeout</a></code></code></td></tr>
1783 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
1784 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
1785 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
1786 <tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in Apache HTTP Server 2.0.31 and later</td></tr>
1787 </table>
1788     <p>This directive allows a user to specifiy a timeout on proxy requests.
1789     This is useful when you have a slow/buggy appserver which hangs, and you
1790     would rather just return a timeout and fail gracefully instead of waiting
1791     however long it takes the server to return.</p>
1792
1793 </div>
1794 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
1795 <div class="directive-section"><h2><a name="ProxyVia" id="ProxyVia">ProxyVia</a> <a name="proxyvia" id="proxyvia">Directive</a></h2>
1796 <table class="directive">
1797 <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Information provided in the <code>Via</code> HTTP response
1798 header for proxied requests</td></tr>
1799 <tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyVia On|Off|Full|Block</code></td></tr>
1800 <tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyVia Off</code></td></tr>
1801 <tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
1802 <tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
1803 <tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr>
1804 </table>
1805     <p>This directive controls the use of the <code>Via:</code> HTTP
1806     header by the proxy. Its intended use is to control the flow of
1807     proxy requests along a chain of proxy servers.  See <a href="http://www.ietf.org/rfc/rfc2616.txt">RFC 2616</a> (HTTP/1.1), section
1808     14.45 for an explanation of <code>Via:</code> header lines.</p>
1809
1810     <ul>
1811     <li>If set to <code>Off</code>, which is the default, no special processing
1812     is performed. If a request or reply contains a <code>Via:</code> header,
1813     it is passed through unchanged.</li>
1814
1815     <li>If set to <code>On</code>, each request and reply will get a
1816     <code>Via:</code> header line added for the current host.</li>
1817
1818     <li>If set to <code>Full</code>, each generated <code>Via:</code> header
1819     line will additionally have the Apache httpd server version shown as a
1820     <code>Via:</code> comment field.</li>
1821
1822     <li>If set to <code>Block</code>, every proxy request will have all its
1823     <code>Via:</code> header lines removed. No new <code>Via:</code> header will
1824     be generated.</li>
1825     </ul>
1826
1827 </div>
1828 </div>
1829 <div class="bottomlang">
1830 <p><span>Available Languages: </span><a href="../en/mod/mod_proxy.html" title="English">&nbsp;en&nbsp;</a> |
1831 <a href="../fr/mod/mod_proxy.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
1832 <a href="../ja/mod/mod_proxy.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a></p>
1833 </div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Comments</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&amp;A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our <a href="http://httpd.apache.org/lists.html">mailing lists</a>.</div>
1834 <script type="text/javascript"><!--//--><![CDATA[//><!--
1835 var comments_shortname = 'httpd';
1836 var comments_identifier = 'http://httpd.apache.org/docs/trunk/mod/mod_proxy.html';
1837 (function(w, d) {
1838     if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
1839         d.write('<div id="comments_thread"><\/div>');
1840         var s = d.createElement('script');
1841         s.type = 'text/javascript';
1842         s.async = true;
1843         s.src = 'https://c.apaste.info/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
1844         (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
1845     }
1846     else {
1847         d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
1848     }
1849 })(window, document);
1850 //--><!]]></script></div><div id="footer">
1851 <p class="apache">Copyright 2012 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
1852 <p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!--
1853 if (typeof(prettyPrint) !== 'undefined') {
1854     prettyPrint();
1855 }
1856 //--><!]]></script>
1857 </body></html>