]> granicus.if.org Git - apache/commitdiff
XML for mod_proxy.
authorJoshua Slive <slive@apache.org>
Sat, 9 Mar 2002 22:23:29 +0000 (22:23 +0000)
committerJoshua Slive <slive@apache.org>
Sat, 9 Mar 2002 22:23:29 +0000 (22:23 +0000)
Note: This one was and still is is pretty rough shape, both in terms of

1. Stinky markup (why use a <p> when a couple <br>s will do?)

2. Out of date and insufficient content.

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@93820 13f79535-47bb-0310-9956-ffa450edef68

docs/manual/mod/mod_proxy.xml [new file with mode: 0644]

diff --git a/docs/manual/mod/mod_proxy.xml b/docs/manual/mod/mod_proxy.xml
new file mode 100644 (file)
index 0000000..d4d7551
--- /dev/null
@@ -0,0 +1,722 @@
+<?xml version="1.0"?>
+<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
+<?xml-stylesheet type="text/xsl" href="../style/manual.xsl"?>
+<modulesynopsis>
+
+<name>mod_proxy</name>
+<description>HTTP/1.1 proxy/gateway server</description>
+<status>Extension</status>
+<sourcefile>mod_proxy.c</sourcefile>
+<identifier>proxy_module</identifier>
+
+<summary>
+<note type="warning"><title>Warning</title>
+This document has been updated to take into account changes
+made in the 2.0 version of the Apache HTTP Server.  Some of the
+information may still be inaccurate, please use it
+with care.
+</note>
+
+<p>This module implements a proxy/gateway for Apache. It implements
+proxying capability for
+<code>FTP</code>,
+<code>CONNECT</code> (for SSL),
+<code>HTTP/0.9</code>,
+<code>HTTP/1.0</code>, and
+<code>HTTP/1.1</code>.
+The module can be configured to connect to other proxy modules for these
+and other protocols.</p>
+
+<p>This module was experimental in Apache 1.1.x. Improvements and bugfixes
+were made in Apache v1.2.x and Apache v1.3.x, then the module underwent a major
+overhaul for Apache v2.0. The protocol support was upgraded to HTTP/1.1,
+and filter support was enabled.</p>
+
+<p>Please note that the <strong>caching</strong> function present in
+mod_proxy up to Apache v1.3.x has been <strong>removed</strong> from
+mod_proxy and will be incorporated into a new module, mod_cache.</p>
+</summary>
+
+<section id="configs"><title>Common configuration topics</title>
+
+<ul>
+<li><a href="#forwardreverse">Forward and Reverse Proxies</a></li>
+<li><a href="#access">Controlling access to your proxy</a></li>
+<li><a href="#shortname">Using Netscape hostname shortcuts</a></li>
+<li><a href="#mimetypes">Why doesn't file type <em>xxx</em> download via FTP?</a></li>
+<li><a href="#type">How can I force an FTP ASCII download of File <em>xxx</em>?</a></li>
+<li><a href="#percent2fhack">How can I access FTP files outside of my home directory?</a></li>
+<li><a href="#ftppass">How can I hide the FTP cleartext password in my browser's URL line?</a></li>
+<li><a href="#startup">Why does Apache start more slowly when using the
+        proxy module?</a></li>
+<!--<li><a href="#socks">Can I use the Apache proxy module with my SOCKS proxy?</a>-->
+<li><a href="#intranet">What other functions are useful for an intranet proxy server?</a></li>
+</ul>
+
+<section id="forwardreverse"><title>Forward and Reverse Proxies</title>
+
+<p>Apache can be configured in both a <em>forward</em> and <em>reverse</em>
+proxy configuration.</p>
+
+<p>A <em>forward proxy</em> is an intermediate system that enables a browser to connect to a
+remote network to which it normally does not have access. A forward proxy
+can also be used to cache data, reducing load on the networks between the
+forward proxy and the remote webserver.</p>
+
+<p>Apache's mod_proxy can be figured to behave like a forward proxy
+using the <directive module="mod_proxy">ProxyRemote</directive>
+directive. In addition, caching of data can be achieved by configuring
+Apache <module>mod_cache</module>. Other dedicated forward proxy
+packages include <a href="http://www.squid.org">Squid</a>.</p>
+
+<p>A <em>reverse proxy</em> is a webserver system that is capable of serving webpages
+sourced from other webservers - in addition to webpages on disk or generated
+dynamically by CGI - making these pages look like they originated at the
+reverse proxy.</p>
+
+<p>When configured with the mod_cache module the reverse
+proxy can act as a cache for slower backend webservers. The reverse proxy
+can also enable advanced URL strategies and management techniques, allowing
+webpages served using different webserver systems or architectures to
+coexist inside the same URL space. Reverse proxy systems are also ideal for
+implementing centralised logging websites with many or diverse website
+backends. Complex multi-tier webserver systems can be constructed using an
+Apache mod_proxy frontend and any number of backend webservers.</p>
+
+<p>The reverse proxy is configured using the
+<directive module="mod_proxy">ProxyPass</directive> and <directive
+module="mod_proxy">ProxyPassReverse</directive> directives. Caching can be
+enabled using mod_cache as with the forward proxy.</p>
+
+</section>
+
+<section id="access"><title>Controlling access to your proxy</title>
+
+<p>You can control who can access your proxy via the normal <directive module="core" type="section">Directory</directive>
+control block using the following example:</p>
+
+<example>
+&lt;Directory proxy:*&gt;<br />
+Order Deny,Allow<br />
+Deny from all<br />
+Allow from 192.168.0<br />
+&lt;/Directory&gt;
+</example>
+
+<p>A <directive module="core" type="section">Files</directive> block
+will also work, and is the only method known to work for all possible
+URLs in Apache versions earlier than 1.2b10.</p>
+
+<p>When configuring a reverse proxy, access control takes on the
+attributes of the normal server <directive module="core"
+type="section">directory</directive> configuration.</p>
+
+
+<!--<h2><a name="shortname">Using Netscape hostname shortcuts</a></h2>
+
+There is an optional patch to the proxy module to allow Netscape-like
+hostname shortcuts to be used. It's available from the
+<a href="http://www.apache.org/dist/contrib/patches/1.2/netscapehost.patch"
+><code>contrib/patches/1.2</code></a> directory on the Apache Web
+site.<p>-->
+
+</section>
+
+<section id="mimetypes"><title>Why doesn't file type <em>xxx</em>
+download via FTP?</title>
+
+<p>You probably don't have that particular file type defined as
+<em>application/octet-stream</em> in your proxy's mime.types configuration
+file. A useful line can be</p>
+
+<example>
+application/octet-stream        bin dms lha lzh exe class tgz taz
+</example>
+</section>
+
+<section id="type"><title>How can I force an FTP ASCII download of
+File <em>xxx</em>?</title>
+
+<p>In the rare situation where you must download a specific file using the FTP
+<strong>ASCII</strong> transfer method (while the default transfer is in
+<strong>binary</strong> mode), you can override mod_proxy's default by
+suffixing the request with <code>;type=a</code> to force an ASCII transfer.
+(FTP Directory listings are always executed in ASCII mode, however.)</p>
+</section>
+
+<section id="percent2fhck"><title>How can I access FTP files outside
+of my home directory?</title>
+
+<p>
+An FTP URI is interpreted relative to the home directory of the user
+who is logging in. Alas, to reach higher directory levels you cannot
+use /../, as the dots are interpreted by the browser and not actually
+sent to the FTP server. To address this problem, the so called "Squid
+%2f hack" was implemented in the Apache FTP proxy; it is is a solution
+which is also used by other popular proxy servers like the <a
+href="http://www.squid-cache.org/">Squid Proxy Cache</a>.  By
+prepending /%2f to the path of your request, you can make such a proxy
+change the FTP starting directory to / (instead of the home
+directory). </p> 
+
+<p><strong>Example:</strong> To retrieve the file
+<code>/etc/motd</code>, you would use the URL</p>
+<example>ftp://<em>user@host</em>/%2f/etc/motd</example>
+</section>
+
+<section id="ftppass"><title>How can I hide the FTP cleartext password
+in my browser's URL line?</title>
+
+<p>
+To log in to an FTP server by username and password, Apache
+uses different strategies.
+In absense of a user name and password in the URL altogether,
+Apache sends an anomymous login to the FTP server, i.e.,</p>
+<example>
+user: anonymous<br />
+password: apache_proxy@
+</example>
+<p>This works for all popular FTP servers which are configured for
+anonymous access.</p>
+
+<p>For a personal login with a specific username, you can embed
+the user name into the URL, like in:
+<code>ftp://<em>username@host</em>/myfile</code>. If the FTP server
+asks for a password when given this username (which it should),
+then Apache will reply with a [401 Authorization required] response,
+which causes the Browser to pop up the username/password dialog.
+Upon entering the password, the connection attempt is retried,
+and if successful, the requested resource is presented.
+The advantage of this procedure is that your browser does not
+display the password in cleartext (which it would if you had used
+<code>ftp://<em>username:password@host</em>/myfile</code> in
+the first place).</p>
+
+<note><title>Note</title>
+The password which is transmitted in such a way
+is not encrypted on its way. It travels between your browser and
+the Apache proxy server in a base64-encoded cleartext string, and
+between the Apache proxy and the FTP server as plaintext. You should
+therefore think twice before accessing your FTP server via HTTP
+(or before accessing your personal files via FTP at all!) When
+using unsecure channels, an eavesdropper might intercept your
+password on its way.
+</note>
+</section>
+
+<section id="startup"><title>Why does Apache start more slowly when
+using the proxy module?</title>
+
+<p>If you're using the <directive module="mod_proxy">ProxyBlock</directive>
+directive, hostnames' IP addresses are looked up and cached during
+startup for later match test. This may take a few seconds (or more)
+depending on the speed with which the hostname lookups occur.</p>
+</section>
+
+<!--<h2><a name="socks">Can I use the Apache proxy module with my SOCKS proxy?</a></h2>
+
+Yes. Just build Apache with the rule <code>SOCKS4=yes</code> in your
+<em>Configuration</em> file, and follow the instructions there. SOCKS5
+capability can be added in a similar way (there's no <code>SOCKS5</code>
+rule yet), so use the <code>EXTRA_LDFLAGS</code> definition, or build Apache
+normally and run it with the <em>runsocks</em> wrapper provided with SOCKS5,
+if your OS supports dynamically linked libraries.<p>
+
+Some users have reported problems when using SOCKS version 4.2 on Solaris.
+The problem was solved by upgrading to SOCKS 4.3.<p>
+
+Remember that you'll also have to grant access to your Apache proxy machine by
+permitting connections on the appropriate ports in your SOCKS daemon's
+configuration.<p>
+-->
+
+<section id="intranet"><title>What other functions are useful for an
+intranet proxy server?</title>
+
+<p>An Apache proxy server situated in an intranet needs to forward
+external requests through the company's firewall. However, when it has
+to access resources within the intranet, it can bypass the firewall
+when accessing hosts. The <directive
+module="mod_proxy">NoProxy</directive> directive is useful for
+specifying which hosts belong to the intranet and should be accessed
+directly.</p>
+
+<p>Users within an intranet tend to omit the local domain name from their
+WWW requests, thus requesting "http://somehost/" instead of
+"http://somehost.my.dom.ain/". Some commercial proxy servers let them get
+away with this and simply serve the request, implying a configured
+local domain. When the <directive module="mod_proxy">ProxyDomain</directive> directive
+is used and the server is <a href="#proxyrequests">configured for
+proxy service</a>, Apache can return a redirect response and send the client
+to the correct, fully qualified, server address. This is the preferred method
+since the user's bookmark files will then contain fully qualified hosts.</p>
+</section>
+
+</section>
+
+<directivesynopsis>
+<name>ProxyPreserveHost</name>
+<syntax>ProxyPreserveHost on|off</syntax>
+<default>ProxyPreserveHost Off</default>
+<contextlist><context>server config</context>
+<context>virtual host</context>
+</contextlist>
+<compatibility>Available in
+Apache 2.0.31 and later.</compatibility>
+
+<usage>
+<p>When enabled, this option will pass the Host: line from the
+incoming request to the proxied host, instead of the hostname
+specified in the proxypass line.
+</p>
+<p>This option should normally be turned 'off'.</p>
+</usage>
+</directivesynopsis>
+
+<directivesynopsis>
+<name>ProxyRequests</name>
+<syntax>ProxyRequests on|off</syntax>
+<default>ProxyRequests Off</default>
+<contextlist><context>server config</context>
+<context>virtual host</context>
+</contextlist>
+
+<usage>
+<p>This allows or prevents Apache from functioning as a forward proxy
+server. (Setting ProxyRequests to 'off' does not disable use of the 
+<directive module="mod_proxy">ProxyPass</directive> directive.)</p>
+
+<p>In a typical reverse proxy configuration, this option should be set to
+'off'.</p>
+</usage>
+</directivesynopsis>
+
+<directivesynopsis>
+<name>ProxyRemote</name>
+<syntax>ProxyRemote <em>match remote-server</em></syntax>
+<contextlist><context>server config</context>
+<context>virtual host</context>
+</contextlist>
+
+<usage>
+<p>This defines remote proxies to this proxy. <em>match</em> is either the
+name of a URL-scheme that the remote server supports, or a partial URL
+for which the remote server should be used, or '*' to indicate the
+server should be contacted for all requests. <em>remote-server</em> is a
+partial URL for the remote server. Syntax:</p>
+
+<pre>
+  remote-server = protocol://hostname[:port]
+</pre>
+
+<p><em>protocol</em> is the protocol that should be used to communicate
+with the remote server; only "http" is supported by this module.</p>
+
+<p>
+Example:</p>
+<example>
+  ProxyRemote http://goodguys.com/ http://mirrorguys.com:8000<br />
+  ProxyRemote * http://cleversite.com<br />
+  ProxyRemote ftp http://ftpproxy.mydomain.com:8080
+</example>
+
+<p>In the last example, the proxy will forward FTP requests, encapsulated
+as yet another HTTP proxy request, to another proxy which can handle
+them.</p>
+
+<p>This option also supports reverse proxy configuration - a backend
+webserver can be embedded within a virtualhost URL space even if that
+server is hidden by another forward proxy.</p>
+</usage>
+</directivesynopsis>
+
+<directivesynopsis>
+<name>ProxyPass</name>
+<syntax>ProxyPass [<em>path</em>] !|<em>url</em></syntax>
+<contextlist><context>server config</context>
+<context>virtual host</context>
+</contextlist>
+
+<usage>
+<!-- XXX: Need to document that the path is not used when placed in
+a location section -->
+<p>This directive allows remote servers to be mapped into the space of
+the local server; the local server does not act as a proxy in the
+conventional sense, but appears to be a mirror of the remote
+server. <em>path</em> is the name of a local virtual path;
+<em>url</em> is a partial URL for the remote server.</p>
+
+<p>Suppose the local server has address <code>http://wibble.org/</code>; 
+then</p>
+<example>
+   ProxyPass /mirror/foo/ http://foo.com/
+</example>
+<p>will cause a local request for the
+&lt;<code>http://wibble.org/mirror/foo/bar</code>&gt; to be
+internally converted into a proxy request to
+&lt;<code>http://foo.com/bar</code>&gt;.</p>
+<p>
+The ! directive is useful in situations where you don't want to reverse-proxy
+a subdirectory. eg.</p>
+<example>
+        ProxyPass /mirror/foo/i !<br />
+        ProxyPass /mirror/foo http://foo.com
+</example>
+<p>will proxy all requests to /mirror/foo to foo.com EXCEPT requests made to /mirror/foo/i</p>
+
+<note>NB: order is important. you need to put the exclusions BEFORE the general proxypass directive</note>
+</usage>
+</directivesynopsis>
+
+<directivesynopsis>
+<name>ProxyPassReverse</name>
+<syntax>ProxyPassReverse [<em>path</em>] <em>url</em></syntax>
+<contextlist><context>server config</context>
+<context>virtual host</context>
+</contextlist>
+
+<usage>
+<!-- XXX: Need to document that the path is not used when placed in
+a location section -->
+<p>This directive lets Apache adjust the URL in the <code>Location</code>,
+<code>Content-Location</code> and <code>URI</code> headers on
+HTTP redirect responses. This is essential when Apache is used as
+a reverse proxy to avoid by-passing the reverse proxy because of HTTP
+redirects on the backend servers which stay behind the reverse proxy.</p>
+
+<p><em>path</em> is the name of a local virtual path.<br />
+<em>url</em> is a partial URL for the remote server - the same way they are
+used for the <directive module="mod_proxy">ProxyPass</directive> directive.</p>
+
+<p>
+Example:<br />
+Suppose the local server has address <code>http://wibble.org/</code>; then</p>
+<example>
+   ProxyPass         /mirror/foo/ http://foo.com/<br />
+   ProxyPassReverse  /mirror/foo/ http://foo.com/
+</example>
+<p>will not only cause a local request for the
+&lt;<code>http://wibble.org/mirror/foo/bar</code>&gt; to be internally
+converted into a proxy request to &lt;<code>http://foo.com/bar</code>&gt; (the
+functionality <code>ProxyPass</code> provides here). It also takes care of
+redirects the server foo.com sends: when <code>http://foo.com/bar</code> is
+redirected by him to <code>http://foo.com/quux</code> Apache adjusts this to
+<code>http://wibble.org/mirror/foo/quux</code> before forwarding the HTTP
+redirect response to the client. </p>
+<p>
+Note that this <directive>ProxyPassReverse</directive> directive can
+also be used in conjunction with the proxy pass-through feature
+("<code>RewriteRule ...  [P]</code>") from
+<module>mod_rewrite</module> because its doesn't depend on a
+corresponding <directive module="mod_proxy">ProxyPass</directive>
+directive.</p>
+</usage>
+</directivesynopsis>
+
+<directivesynopsis>
+<name>AllowCONNECT</name>
+<syntax>AllowCONNECT <em>port</em> [<em>port</em>] ...</syntax>
+<default>AllowCONNECT 443 563</default>
+<contextlist><context>server config</context>
+<context>virtual host</context>
+</contextlist>
+
+<usage>
+<p>The <directive>AllowCONNECT</directive> directive specifies a list
+of port numbers to which the proxy <code>CONNECT</code> method may
+connect.  Today's browsers use this method when a <em>https</em>
+connection is requested and proxy tunneling over <em>http</em> is in
+effect.<br /> By default, only the default https port (443) and the
+default snews port (563) are enabled. Use the
+<directive>AllowCONNECT</directive> directive to overrride this default and
+allow connections to the listed ports only.</p>
+</usage>
+</directivesynopsis>
+
+<directivesynopsis>
+<name>ProxyBlock</name>
+<syntax>ProxyBlock *|<em>word|host|domain</em>
+[<em>word|host|domain</em>] ...</syntax>
+<contextlist><context>server config</context>
+<context>virtual host</context>
+</contextlist>
+
+<usage>
+<p>The <directive>ProxyBlock</directive> directive specifies a list of
+words, hosts and/or domains, separated by spaces.  HTTP, HTTPS, and
+FTP document requests to sites whose names contain matched words,
+hosts or domains are <em>blocked</em> by the proxy server. The proxy
+module will also attempt to determine IP addresses of list items which
+may be hostnames during startup, and cache them for match test as
+well. Example:</p>
+
+<example>
+  ProxyBlock joes-garage.com some-host.co.uk rocky.wotsamattau.edu
+</example>
+
+<p>'rocky.wotsamattau.edu' would also be matched if referenced by IP
+address.</p>
+
+<p>Note that 'wotsamattau' would also be sufficient to match
+'wotsamattau.edu'.</p>
+
+<p>Note also that</p>
+
+<example>
+ProxyBlock *
+</example>
+
+<p>blocks connections to all sites.</p>
+
+</usage>
+</directivesynopsis>
+
+<directivesynopsis>
+<name>ProxyReceiveBufferSize</name>
+<syntax>ProxyReceiveBufferSize <em>bytes</em></syntax>
+<contextlist><context>server config</context>
+<context>virtual host</context>
+</contextlist>
+
+<usage>
+<p>The <directive>ProxyReceiveBufferSize</directive> directive
+specifies an explicit network buffer size for outgoing HTTP and FTP
+connections, for increased throughput.  It has to be greater than 512
+or set to 0 to indicate that the system's default buffer size should
+be used.</p>
+<example><title>Example</title>
+  ProxyReceiveBufferSize 2048
+</example>
+</usage>
+</directivesynopsis>
+
+<directivesynopsis>
+<name>ProxyMaxForwards</name>
+<syntax>ProxyMaxForwards <em>number</em></syntax>
+<default>ProxyMaxForwards 10</default>
+<contextlist><context>server config</context>
+<context>virtual host</context>
+</contextlist>
+<compatibility>Available in Apache 2.0 and later</compatibility>
+
+<usage>
+<p>The <directive>ProxyMaxForwards</directive> directive specifies the
+maximum number of proxies through which a request may pass. This is
+set to prevent infinite proxy loops, or a DoS attack.</p>
+
+<example><title>Example</title>
+  ProxyMaxForwards 10
+</example>
+</usage>
+</directivesynopsis>
+
+<directivesynopsis>
+<name>NoProxy</name>
+<syntax>NoProxy 
+ <em>Domain</em>|
+ <em>SubNet</em>|
+ <em>IpAddr</em>| 
+ <em>Hostname</em>
+[<em>Domain</em>| 
+ <em>SubNet</em>|
+ <em>IpAddr</em>| 
+ <em>Hostname</em>] ...</syntax>
+<contextlist><context>server config</context>
+<context>virtual host</context>
+</contextlist>
+
+<usage>
+<p>This directive is only useful for Apache proxy servers within
+intranets.  The <directive>NoProxy</directive> directive specifies a
+list of subnets, IP addresses, hosts and/or domains, separated by
+spaces. A request to a host which matches one or more of these is
+always served directly, without forwarding to the configured
+<directive module="mod_proxy">ProxyRemote</directive> proxy server(s).</p>
+
+<example><title>Example</title>
+  ProxyRemote  *  http://firewall.mycompany.com:81<br />
+  NoProxy         .mycompany.com 192.168.112.0/21 
+</example>
+
+<p>The arguments to the NoProxy directive are one of the following type list:</p>
+   <dl>
+    <!-- ===================== Domain ======================= -->
+    <dt><a name="domain">
+    <em>Domain</em></a></dt>
+    <dd>A <em>Domain</em> is a partially qualified DNS domain name, preceded
+        by a period.
+        It represents a list of hosts which logically belong to the same DNS
+        domain or zone (<em>i.e.</em>, the suffixes of the hostnames are all ending in 
+        <em>Domain</em>).<br />
+               Examples: <code>.com</code>   <code>.apache.org.</code><br />
+        To distinguish <em>Domain</em>s from <a href="#hostname"><em>Hostname</em></a>s (both
+        syntactically and semantically; a DNS domain can have a DNS A record,
+        too!), <em>Domain</em>s are always written
+        with a leading period.<br />
+        Note: Domain name comparisons are done without regard to the case,
+        and <em>Domain</em>s are always assumed to be anchored in the root 
+        of the DNS tree, therefore two domains <code>.MyDomain.com</code> and
+        <code>.mydomain.com.</code> (note the trailing period) are
+        considered equal. Since a domain comparison does not involve a DNS
+       lookup, it is much more efficient than subnet comparison.</dd>
+
+    <!-- ===================== SubNet ======================= -->
+    <dt><a name="subnet">
+    <em>SubNet</em></a></dt>
+    <dd>A <em>SubNet</em> is a partially qualified internet address in
+        numeric (dotted quad) form, optionally followed by a slash and the
+        netmask, specified as the number of significant bits in the
+        <em>SubNet</em>. It is used to represent a subnet of hosts which can
+        be reached over a common network interface. In the absence of the
+        explicit net mask it is assumed that omitted (or zero valued)
+        trailing digits specify the mask. (In this case, the netmask can
+        only be multiples of 8 bits wide.)<br />
+        Examples:
+        <dl>
+         <dt><code>192.168</code> or <code>192.168.0.0</code></dt>
+         <dd>the subnet 192.168.0.0 with an implied netmask of 16 valid bits
+             (sometimes used in the netmask form <code>255.255.0.0</code>)</dd>
+         <dt><code>192.168.112.0/21</code></dt>
+         <dd>the subnet <code>192.168.112.0/21</code> with a netmask of 21
+             valid bits (also used in the form 255.255.248.0)</dd>
+        </dl>
+               As a degenerate case, a <em>SubNet</em> with 32 valid bits is the
+        equivalent to an <em>IPAddr</em>, while a <em>SubNet</em> with zero
+        valid bits (<em>e.g.</em>, 0.0.0.0/0) is the same as the constant
+        <em>_Default_</em>, matching any IP address. </dd>
+
+    <!-- ===================== IPAddr ======================= -->
+    <dt><a name="ipaddr">
+    <em>IPAddr</em></a></dt>
+    <dd>A <em>IPAddr</em> represents a fully qualified internet address in
+        numeric (dotted quad) form. Usually, this address represents a
+        host, but there need not necessarily be a DNS domain name
+        connected with the address.<br />
+               Example: 192.168.123.7<br />
+        Note: An <em>IPAddr</em> does not need to be resolved by the DNS
+       system, so it can result in more effective apache performance.</dd>
+
+    <!-- ===================== Hostname ======================= -->
+    <dt><a name="hostname">
+    <em>Hostname</em></a></dt>
+    <dd>A <em>Hostname</em> is a fully qualified DNS domain name which can
+        be resolved to one or more <a
+       href="#ipaddr"><em>IPAddrs</em></a> via the DNS domain name service. 
+        It represents a logical host (in contrast to
+       <a href="#domain"><em>Domain</em></a>s, see 
+        above) and must be resolvable to at least one <a
+       href="#ipaddr"><em>IPAddr</em></a> (or often to a list of hosts
+       with different <a href="#ipaddr"><em>IPAddr</em></a>'s).<br /> 
+               Examples: <code>prep.ai.mit.edu</code>
+                  <code>www.apache.org.</code><br />
+        Note: In many situations, it is more effective to specify an
+        <a href="#ipaddr"><em>IPAddr</em></a> in place of a
+       <em>Hostname</em> since a DNS lookup 
+        can be avoided. Name resolution in Apache can take a remarkable deal
+        of time when the connection to the name server uses a slow PPP
+        link.<br />
+        Note: <em>Hostname</em> comparisons are done without regard to the case,
+        and <em>Hostname</em>s are always assumed to be anchored in the root
+        of the DNS tree, therefore two hosts <code>WWW.MyDomain.com</code>
+        and <code>www.mydomain.com.</code> (note the trailing period) are
+        considered equal.</dd>
+</dl>
+</usage>
+<seealso><a href="../dns-caveats.html">DNS Issues</a></seealso>
+</directivesynopsis>
+
+<directivesynopsis>
+<name>ProxyTimeout</name>
+<syntax>ProxyTimeout <em>seconds</em></syntax>
+<default>ProxyTimeout 300</default>
+<contextlist><context>server config</context>
+<context>virtual host</context>
+</contextlist>
+<compatibility>Available in
+Apache 2.0.31 and later</compatibility>
+
+<usage>
+<p>This directive allows a user to specifiy a timeout on proxy requests.
+This is usefull when you have a slow/buggy appserver which hangs,
+and you would rather just return a timeout and fail gracefully instead
+of waiting however long it takes the server to return
+</p>
+</usage>
+</directivesynopsis>
+
+<directivesynopsis>
+<name>ProxyDomain</name>
+<syntax>ProxyDomain <em>Domain</em></syntax>
+<contextlist><context>server config</context>
+<context>virtual host</context>
+</contextlist>
+
+<usage>
+<p>This directive is only useful for Apache proxy servers within
+intranets.  The <directive>ProxyDomain</directive> directive specifies
+the default domain which the apache proxy server will belong to. If a
+request to a host without a domain name is encountered, a redirection
+response to the same host with the configured <em>Domain</em> appended
+will be generated.</p>
+
+<example><title>Example</title>
+  ProxyRemote  *  http://firewall.mycompany.com:81<br />
+  NoProxy         .mycompany.com 192.168.112.0/21<br />
+  ProxyDomain     .mycompany.com
+</example>
+</usage>
+</directivesynopsis>
+
+<directivesynopsis>
+<name>ProxyVia</name>
+<syntax>ProxyVia on|off|full|block</syntax>
+<default>ProxyVia off</default>
+<contextlist><context>server config</context>
+<context>virtual host</context>
+</contextlist>
+
+<usage>
+<p>This directive controls the use of the <code>Via:</code> HTTP
+header by the proxy. Its intended use is to control the flow of of
+proxy requests along a chain of proxy servers.  See RFC2068 (HTTP/1.1)
+for an explanation of <code>Via:</code> header lines.</p>
+
+<ul> <li>If set
+to <em>off</em>, which is the default, no special processing is
+performed. If a request or reply contains a <code>Via:</code> header,
+it is passed through unchanged.</li>
+
+<li>If set to <em>on</em>, each
+request and reply will get a <code>Via:</code> header line added for
+the current host.</li>
+
+<li>If set to <em>full</em>, each generated <code>Via:</code> header
+line will additionally have the Apache server version shown as a
+<code>Via:</code> comment field.</li>
+
+<li>If set to <em>block</em>, every
+proxy request will have all its <code>Via:</code> header lines
+removed. No new <code>Via:</code> header will be generated.</li>
+</ul>
+</usage>
+</directivesynopsis>
+
+<directivesynopsis>
+<name>ProxyErrorOverride</name>
+<syntax>ProxyErrorOverride On|Off</syntax>
+<default>ProxyErrorOverride Off</default>
+<contextlist><context>server config</context>
+<context>virtual host</context>
+</contextlist>
+<compatibility>Available in version 2.0 and later</compatibility>
+
+<usage>
+<p>This directive is useful for reverse-proxy setups, where you want to 
+have a common look and feel on the error pages seen by the end user. 
+This also allows for included files (via mod_include's SSI) to get
+the error code and act accordingly (default behavior would display
+the error page of the proxied server, turning this on shows the SSI
+Error message).</p>
+</usage>
+</directivesynopsis>
+</modulesynopsis>