diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-27 06:33:50 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-27 06:33:50 +0000 |
commit | fe39ffb8b90ae4e002ed73fe98617cd590abb467 (patch) | |
tree | b80e5956907d8aeaaffe4e4f0c068c0e6157ce8b /docs/manual/mod/mod_proxy.html | |
parent | Initial commit. (diff) | |
download | apache2-fe39ffb8b90ae4e002ed73fe98617cd590abb467.tar.xz apache2-fe39ffb8b90ae4e002ed73fe98617cd590abb467.zip |
Adding upstream version 2.4.56.upstream/2.4.56upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r-- | docs/manual/mod/mod_proxy.html | 13 | ||||
-rw-r--r-- | docs/manual/mod/mod_proxy.html.en | 2173 | ||||
-rw-r--r-- | docs/manual/mod/mod_proxy.html.fr.utf8 | 2472 | ||||
-rw-r--r-- | docs/manual/mod/mod_proxy.html.ja.utf8 | 1288 |
4 files changed, 5946 insertions, 0 deletions
diff --git a/docs/manual/mod/mod_proxy.html b/docs/manual/mod/mod_proxy.html new file mode 100644 index 0000000..407ce09 --- /dev/null +++ b/docs/manual/mod/mod_proxy.html @@ -0,0 +1,13 @@ +# GENERATED FROM XML -- DO NOT EDIT + +URI: mod_proxy.html.en +Content-Language: en +Content-type: text/html; charset=UTF-8 + +URI: mod_proxy.html.fr.utf8 +Content-Language: fr +Content-type: text/html; charset=UTF-8 + +URI: mod_proxy.html.ja.utf8 +Content-Language: ja +Content-type: text/html; charset=UTF-8 diff --git a/docs/manual/mod/mod_proxy.html.en b/docs/manual/mod/mod_proxy.html.en new file mode 100644 index 0000000..88e3562 --- /dev/null +++ b/docs/manual/mod/mod_proxy.html.en @@ -0,0 +1,2173 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head> +<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" /> +<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + --> +<title>mod_proxy - Apache HTTP Server Version 2.4</title> +<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> +<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> +<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" /> +<script src="../style/scripts/prettify.min.js" type="text/javascript"> +</script> + +<link href="../images/favicon.ico" rel="shortcut icon" /></head> +<body> +<div id="page-header"> +<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> +<p class="apache">Apache HTTP Server Version 2.4</p> +<img alt="" src="../images/feather.png" /></div> +<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div> +<div id="path"> +<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP Server</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.4</a> > <a href="./">Modules</a></div> +<div id="page-content"> +<div id="preamble"><h1>Apache Module mod_proxy</h1> +<div class="toplang"> +<p><span>Available Languages: </span><a href="../en/mod/mod_proxy.html" title="English"> en </a> | +<a href="../fr/mod/mod_proxy.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/mod/mod_proxy.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a></p> +</div> +<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Multi-protocol proxy/gateway server</td></tr> +<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Extension</td></tr> +<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>proxy_module</td></tr> +<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_proxy.c</td></tr></table> +<h3>Summary</h3> + + <div class="warning"><h3>Warning</h3> + <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 + network and to the Internet at large.</p> + </div> + + <p><code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> and related modules implement a + proxy/gateway for Apache HTTP Server, supporting a number of popular + protocols as well as several different load balancing algorithms. + Third-party modules can add support for additional protocols and + load balancing algorithms.</p> + + <p>A set of modules must be loaded into the server to provide the + necessary features. These modules can be included statically at + build time or dynamically via the + <code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code> directive). + The set must include:</p> + + <ul> + <li><code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code>, which provides basic proxy + capabilities</li> + + <li><code class="module"><a href="../mod/mod_proxy_balancer.html">mod_proxy_balancer</a></code> and one or more + balancer modules if load balancing is required. (See + <code class="module"><a href="../mod/mod_proxy_balancer.html">mod_proxy_balancer</a></code> for more information.)</li> + + <li>one or more proxy scheme, or protocol, modules: + + <table class="bordered"> + <tr><th>Protocol</th><th>Module</th></tr> + <tr><td>AJP13 (Apache JServe Protocol version + 1.3)</td><td><code class="module"><a href="../mod/mod_proxy_ajp.html">mod_proxy_ajp</a></code></td></tr> + <tr><td>CONNECT (for + SSL)</td><td><code class="module"><a href="../mod/mod_proxy_connect.html">mod_proxy_connect</a></code></td></tr> + <tr><td>FastCGI</td><td><code class="module"><a href="../mod/mod_proxy_fcgi.html">mod_proxy_fcgi</a></code></td></tr> + <tr><td>ftp</td><td><code class="module"><a href="../mod/mod_proxy_ftp.html">mod_proxy_ftp</a></code></td></tr> + <tr><td>HTTP/0.9, HTTP/1.0, and + HTTP/1.1</td><td><code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code></td></tr> + <tr><td>HTTP/2.0</td><td><code class="module"><a href="../mod/mod_proxy_http2.html">mod_proxy_http2</a></code></td></tr> + <tr><td>SCGI</td><td><code class="module"><a href="../mod/mod_proxy_scgi.html">mod_proxy_scgi</a></code></td></tr> + <tr><td>UWSGI</td><td><code class="module"><a href="../mod/mod_proxy_uwsgi.html">mod_proxy_uwsgi</a></code></td></tr> + <tr><td>WS and WSS (Web-sockets)</td><td><code class="module"><a href="../mod/mod_proxy_wstunnel.html">mod_proxy_wstunnel</a></code></td></tr> + </table> + </li> + </ul> + + <p>In addition, extended features are provided by other modules. + Caching is provided by <code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code> and related + modules. The ability to contact remote servers using the SSL/TLS + protocol is provided by the <code>SSLProxy*</code> directives of + <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code>. These additional modules will need + to be loaded and configured to take advantage of these features.</p> +</div> +<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><h3>Topics</h3> +<ul id="topics"> +<li><img alt="" src="../images/down.gif" /> <a href="#forwardreverse">Forward Proxies and Reverse + Proxies/Gateways</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#examples">Basic Examples</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#handler">Access via Handler</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#workers">Workers</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#access">Controlling Access to Your Proxy</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#startup">Slow Startup</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#intranet">Intranet Proxy</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#envsettings">Protocol Adjustments</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#request-bodies">Request Bodies</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#x-headers">Reverse Proxy Request Headers</a></li> +</ul><h3 class="directives">Directives</h3> +<ul id="toc"> +<li><img alt="" src="../images/down.gif" /> <a href="#balancergrowth">BalancerGrowth</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#balancerinherit">BalancerInherit</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#balancermember">BalancerMember</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#balancerpersist">BalancerPersist</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#noproxy">NoProxy</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxy"><Proxy></a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxy100continue">Proxy100Continue</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxyaddheaders">ProxyAddHeaders</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxybadheader">ProxyBadHeader</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxyblock">ProxyBlock</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxydomain">ProxyDomain</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxyerroroverride">ProxyErrorOverride</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxyiobuffersize">ProxyIOBufferSize</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxymatch"><ProxyMatch></a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxymaxforwards">ProxyMaxForwards</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxypass">ProxyPass</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxypassinherit">ProxyPassInherit</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxypassinterpolateenv">ProxyPassInterpolateEnv</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxypassmatch">ProxyPassMatch</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxypassreverse">ProxyPassReverse</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxypassreversecookiedomain">ProxyPassReverseCookieDomain</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxypassreversecookiepath">ProxyPassReverseCookiePath</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxypreservehost">ProxyPreserveHost</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxyreceivebuffersize">ProxyReceiveBufferSize</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxyremote">ProxyRemote</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxyremotematch">ProxyRemoteMatch</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxyrequests">ProxyRequests</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxyset">ProxySet</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxysourceaddress">ProxySourceAddress</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxystatus">ProxyStatus</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxytimeout">ProxyTimeout</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxyvia">ProxyVia</a></li> +</ul> +<h3>Bugfix checklist</h3><ul class="seealso"><li><a href="https://www.apache.org/dist/httpd/CHANGES_2.4">httpd changelog</a></li><li><a href="https://bz.apache.org/bugzilla/buglist.cgi?bug_status=__open__&list_id=144532&product=Apache%20httpd-2&query_format=specific&order=changeddate%20DESC%2Cpriority%2Cbug_severity&component=mod_proxy">Known issues</a></li><li><a href="https://bz.apache.org/bugzilla/enter_bug.cgi?product=Apache%20httpd-2&component=mod_proxy">Report a bug</a></li></ul><h3>See also</h3> +<ul class="seealso"> +<li><code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code></li> +<li><code class="module"><a href="../mod/mod_proxy_ajp.html">mod_proxy_ajp</a></code></li> +<li><code class="module"><a href="../mod/mod_proxy_balancer.html">mod_proxy_balancer</a></code></li> +<li><code class="module"><a href="../mod/mod_proxy_connect.html">mod_proxy_connect</a></code></li> +<li><code class="module"><a href="../mod/mod_proxy_fcgi.html">mod_proxy_fcgi</a></code></li> +<li><code class="module"><a href="../mod/mod_proxy_ftp.html">mod_proxy_ftp</a></code></li> +<li><code class="module"><a href="../mod/mod_proxy_hcheck.html">mod_proxy_hcheck</a></code></li> +<li><code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code></li> +<li><code class="module"><a href="../mod/mod_proxy_scgi.html">mod_proxy_scgi</a></code></li> +<li><code class="module"><a href="../mod/mod_proxy_wstunnel.html">mod_proxy_wstunnel</a></code></li> +<li><code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code></li> +<li><a href="#comments_section">Comments</a></li></ul></div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="forwardreverse" id="forwardreverse">Forward Proxies and Reverse + Proxies/Gateways</a></h2> + <p>Apache HTTP Server can be configured in both a <dfn>forward</dfn> and + <dfn>reverse</dfn> proxy (also known as <dfn>gateway</dfn>) mode.</p> + + <p>An ordinary <dfn>forward proxy</dfn> is an intermediate + server that sits between the client and the <em>origin + server</em>. In order to get content from the origin server, + the client sends a request to the proxy naming the origin server + as the target. The proxy then requests the content from the + origin server and returns it to the client. The client must be + specially configured to use the forward proxy to access other + sites.</p> + + <p>A typical usage of a forward proxy is to provide Internet + access to internal clients that are otherwise restricted by a + firewall. The forward proxy can also use caching (as provided + by <code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code>) to reduce network usage.</p> + + <p>The forward proxy is activated using the <code class="directive"><a href="#proxyrequests">ProxyRequests</a></code> directive. Because + forward proxies allow clients to access arbitrary sites through + your server and to hide their true origin, it is essential that + you <a href="#access">secure your server</a> so that only + authorized clients can access the proxy before activating a + forward proxy.</p> + + <p>A <dfn>reverse proxy</dfn> (or <dfn>gateway</dfn>), by + contrast, appears to the client just like an ordinary web + server. No special configuration on the client is necessary. + The client makes ordinary requests for content in the namespace + of the reverse proxy. The reverse proxy then decides where to + send those requests and returns the content as if it were itself + the origin.</p> + + <p>A typical usage of a reverse proxy is to provide Internet + users access to a server that is behind a firewall. Reverse + proxies can also be used to balance load among several back-end + servers or to provide caching for a slower back-end server. + In addition, reverse proxies can be used simply to bring + several servers into the same URL space.</p> + + <p>A reverse proxy is activated using the <code class="directive"><a href="#proxypass">ProxyPass</a></code> directive or the + <code>[P]</code> flag to the <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> directive. It is + <strong>not</strong> necessary to turn <code class="directive"><a href="#proxyrequests">ProxyRequests</a></code> on in order to + configure a reverse proxy.</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="examples" id="examples">Basic Examples</a></h2> + + <p>The examples below are only a very basic idea to help you + get started. Please read the documentation on the individual + directives.</p> + + <p>In addition, if you wish to have caching enabled, consult + the documentation from <code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code>.</p> + + <div class="example"><h3>Reverse Proxy</h3><pre class="prettyprint lang-config">ProxyPass "/foo" "http://foo.example.com/bar" +ProxyPassReverse "/foo" "http://foo.example.com/bar"</pre> +</div> + + <div class="example"><h3>Forward Proxy</h3><pre class="prettyprint lang-config">ProxyRequests On +ProxyVia On + +<Proxy "*"> + Require host internal.example.com +</Proxy></pre> +</div> + <div class="example"><h3><a id="wsupgrade" name="wsupgrade">Websocket Upgrade (2.4.47 and later)</a></h3><pre class="prettyprint lang-config">ProxyPass "/some/ws/capable/path/" "http://example.com/some/ws/capable/path/" upgrade=websocket</pre> +</div> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="handler" id="handler">Access via Handler</a></h2> + + <p>You can also force a request to be handled as a reverse-proxy + request, by creating a suitable Handler pass-through. The example + configuration below will pass all requests for PHP scripts to the + specified FastCGI server using reverse proxy: + </p> + + <div class="example"><h3>Reverse Proxy PHP scripts</h3><pre class="prettyprint lang-config"><FilesMatch "\.php$"> + # Unix sockets require 2.4.7 or later + SetHandler "proxy:unix:/path/to/app.sock|fcgi://localhost/" +</FilesMatch></pre> +</div> + + <p>This feature is available in Apache HTTP Server 2.4.10 and later.</p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="workers" id="workers">Workers</a></h2> + <p>The proxy manages the configuration of origin servers and their + communication parameters in objects called <dfn>workers</dfn>. + There are two built-in workers: the default forward proxy worker and the + default reverse proxy worker. Additional workers can be configured + explicitly.</p> + + <p>The two default workers have a fixed configuration + and will be used if no other worker matches the request. + They do not use HTTP Keep-Alive or connection reuse. + The TCP connections to the origin server will instead be + opened and closed for each request.</p> + + <p>Explicitly configured workers are identified by their URL. + They are usually created and configured using + <code class="directive"><a href="#proxypass">ProxyPass</a></code> or + <code class="directive"><a href="#proxypassmatch">ProxyPassMatch</a></code> when used + for a reverse proxy:</p> + + <pre class="prettyprint lang-config">ProxyPass "/example" "http://backend.example.com" connectiontimeout=5 timeout=30</pre> + + + <p>This will create a worker associated with the origin server URL + <code>http://backend.example.com</code> that will use the given timeout + values. When used in a forward proxy, workers are usually defined + via the <code class="directive"><a href="#proxyset">ProxySet</a></code> directive:</p> + + <pre class="prettyprint lang-config">ProxySet "http://backend.example.com" connectiontimeout=5 timeout=30</pre> + + + <p>or alternatively using <code class="directive"><a href="#proxy">Proxy</a></code> + and <code class="directive"><a href="#proxyset">ProxySet</a></code>:</p> + + <pre class="prettyprint lang-config"><Proxy "http://backend.example.com"> + ProxySet connectiontimeout=5 timeout=30 +</Proxy></pre> + + + <p>Using explicitly configured workers in the forward mode is + not very common, because forward proxies usually communicate with many + different origin servers. Creating explicit workers for some of the + origin servers can still be useful if they are used very often. + Explicitly configured workers have no concept of forward or reverse + proxying by themselves. They encapsulate a common concept of + communication with origin servers. A worker created by + <code class="directive"><a href="#proxypass">ProxyPass</a></code> for use in a + reverse proxy will also be used for forward proxy requests whenever + the URL to the origin server matches the worker URL, and vice versa.</p> + + <p>The URL identifying a direct worker is the URL of its + origin server including any path components given:</p> + + <pre class="prettyprint lang-config">ProxyPass "/examples" "http://backend.example.com/examples" +ProxyPass "/docs" "http://backend.example.com/docs"</pre> + + + <p>This example defines two different workers, each using a separate + connection pool and configuration.</p> + + <div class="warning"><h3>Worker Sharing</h3> + <p>Worker sharing happens if the worker URLs overlap, which occurs when + the URL of some worker is a leading substring of the URL of another + worker defined later in the configuration file. In the following example</p> + + <pre class="prettyprint lang-config">ProxyPass "/apps" "http://backend.example.com/" timeout=60 +ProxyPass "/examples" "http://backend.example.com/examples" timeout=10</pre> + + + <p>the second worker isn't actually created. Instead the first + worker is used. The benefit is, that there is only one connection pool, + so connections are more often reused. Note that all configuration attributes + given explicitly for the later worker will be ignored. This will be logged + as a warning. In the above example, the resulting timeout value + for the URL <code>/examples</code> will be <code>60</code> instead + of <code>10</code>!</p> + + <p>If you want to avoid worker sharing, sort your worker definitions + by URL length, starting with the longest worker URLs. If you want to maximize + worker sharing, use the reverse sort order. See also the related warning about + ordering <code class="directive"><a href="#proxypass">ProxyPass</a></code> directives.</p> + + </div> + + <p>Explicitly configured workers come in two flavors: + <dfn>direct workers</dfn> and <dfn>(load) balancer workers</dfn>. + They support many important configuration attributes which are + described below in the <code class="directive"><a href="#proxypass">ProxyPass</a></code> + directive. The same attributes can also be set using + <code class="directive"><a href="#proxyset">ProxySet</a></code>.</p> + + <p>The set of options available for a direct worker + depends on the protocol which is specified in the origin server URL. + Available protocols include <code>ajp</code>, <code>fcgi</code>, + <code>ftp</code>, <code>http</code> and <code>scgi</code>.</p> + + <p>Balancer workers are virtual workers that use direct workers known + as their members to actually handle the requests. Each balancer can + have multiple members. When it handles a request, it chooses a member + based on the configured load balancing algorithm.</p> + + <p>A balancer worker is created if its worker URL uses + <code>balancer</code> as the protocol scheme. + The balancer URL uniquely identifies the balancer worker. + Members are added to a balancer using + <code class="directive"><a href="#balancermember">BalancerMember</a></code>.</p> + + <div class="note"><h3>DNS resolution for origin domains</h3> + <p>DNS resolution happens when the socket to + the origin domain is created for the first time. + When connection reuse is enabled, each backend domain is resolved + only once per child process, and cached for all further connections + until the child is recycled. This information should to be considered + while planning DNS maintenance tasks involving backend domains. + Please also check <code class="directive"><a href="#proxypass">ProxyPass</a></code> + parameters for more details about connection reuse. + </p> + </div> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="access" id="access">Controlling Access to Your Proxy</a></h2> + <p>You can control who can access your proxy via the <code class="directive"><a href="#proxy"><Proxy></a></code> control block as in + the following example:</p> + + <pre class="prettyprint lang-config"><Proxy "*"> + Require ip 192.168.0 +</Proxy></pre> + + + <p>For more information on access control directives, see + <code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code>.</p> + + <p>Strictly limiting access is essential if you are using a + forward proxy (using the <code class="directive"><a href="#proxyrequests">ProxyRequests</a></code> directive). + Otherwise, your server can be used by any client to access + arbitrary hosts while hiding his or her true identity. This is + dangerous both for your network and for the Internet at large. + When using a reverse proxy (using the <code class="directive"><a href="#proxypass">ProxyPass</a></code> directive with + <code>ProxyRequests Off</code>), access control is less + critical because clients can only contact the hosts that you + have specifically configured.</p> + + <p><strong>See Also</strong> the <a href="mod_proxy_http.html#env">Proxy-Chain-Auth</a> environment variable.</p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="startup" id="startup">Slow Startup</a></h2> + <p>If you're using the <code class="directive"><a href="#proxyblock">ProxyBlock</a></code> 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> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="intranet" id="intranet">Intranet Proxy</a></h2> + <p>An Apache httpd proxy server situated in an intranet needs to forward + external requests through the company's firewall (for this, configure + the <code class="directive"><a href="#proxyremote">ProxyRemote</a></code> directive + to forward the respective <var>scheme</var> to the firewall proxy). + However, when it has to + access resources within the intranet, it can bypass the firewall when + accessing hosts. The <code class="directive"><a href="#noproxy">NoProxy</a></code> + 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 + <code>http://somehost.example.com/</code>. Some commercial proxy servers + let them get away with this and simply serve the request, implying a + 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 + 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> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="envsettings" id="envsettings">Protocol Adjustments</a></h2> + <p>For circumstances where <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> is sending + requests to an origin server that doesn't properly implement + keepalives or HTTP/1.1, there are two <a href="../env.html">environment variables</a> that can force the + request to use HTTP/1.0 with no keepalive. These are set via the + <code class="directive"><a href="../mod/mod_env.html#setenv">SetEnv</a></code> directive.</p> + + <p>These are the <code>force-proxy-request-1.0</code> and + <code>proxy-nokeepalive</code> notes.</p> + + <pre class="prettyprint lang-config"><Location "/buggyappserver/"> + ProxyPass "http://buggyappserver:7001/foo/" + SetEnv force-proxy-request-1.0 1 + SetEnv proxy-nokeepalive 1 +</Location></pre> + + + <p> In 2.4.26 and later, the "no-proxy" environment variable can be set to disable + <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> processing the current request. + This variable should be set with <code class="directive"><a href="../mod/mod_setenvif.html#setenvif">SetEnvIf</a></code>, as <code class="directive"><a href="../mod/mod_env.html#setenv">SetEnv</a></code> + is not evaluated early enough.</p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="request-bodies" id="request-bodies">Request Bodies</a></h2> + + <p>Some request methods such as POST include a request body. + The HTTP protocol requires that requests which include a body + either use chunked transfer encoding or send a + <code>Content-Length</code> request header. When passing these + requests on to the origin server, <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code> + will always attempt to send the <code>Content-Length</code>. But + if the body is large and the original request used chunked + encoding, then chunked encoding may also be used in the upstream + request. You can control this selection using <a href="../env.html">environment variables</a>. Setting + <code>proxy-sendcl</code> ensures maximum compatibility with + upstream servers by always sending the + <code>Content-Length</code>, while setting + <code>proxy-sendchunked</code> minimizes resource usage by using + chunked encoding.</p> + + <p>Under some circumstances, the server must spool request bodies + to disk to satisfy the requested handling of request bodies. For + example, this spooling will occur if the original body was sent with + chunked encoding (and is large), but the administrator has + asked for backend requests to be sent with Content-Length or as HTTP/1.0. + This spooling can also occur if the request body already has a + Content-Length header, but the server is configured to filter incoming + request bodies.</p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="x-headers" id="x-headers">Reverse Proxy Request Headers</a></h2> + + <p>When acting in a reverse-proxy mode (using the <code class="directive"><a href="#proxypass">ProxyPass</a></code> directive, for example), + <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code> adds several request headers in + order to pass information to the origin server. These headers + are:</p> + + <dl> + <dt><code>X-Forwarded-For</code></dt> + <dd>The IP address of the client.</dd> + <dt><code>X-Forwarded-Host</code></dt> + <dd>The original host requested by the client in the <code>Host</code> + HTTP request header.</dd> + <dt><code>X-Forwarded-Server</code></dt> + <dd>The hostname of the proxy server.</dd> + </dl> + + <p>Be careful when using these headers on the origin server, since + they will contain more than one (comma-separated) value if the + original request already contained one of these headers. For + example, you can use <code>%{X-Forwarded-For}i</code> in the log + format string of the origin server to log the original clients IP + address, but you may get more than one address if the request + passes through several proxies.</p> + + <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 + other request headers.</p> + + <p>Note: If you need to specify custom request headers to be + added to the forwarded request, use the + <code class="directive"><a href="../mod/mod_headers.html#requestheader">RequestHeader</a></code> + directive.</p> + + </div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="BalancerGrowth" id="BalancerGrowth">BalancerGrowth</a> <a name="balancergrowth" id="balancergrowth">Directive</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Number of additional Balancers that can be added Post-configuration</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>BalancerGrowth <var>#</var></code></td></tr> +<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>BalancerGrowth 5</code></td></tr> +<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr> +<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>BalancerGrowth is only available in Apache HTTP Server 2.3.13 + and later.</td></tr> +</table> + <p>This directive allows for growth potential in the number of + Balancers available for a virtualhost in addition to the + number pre-configured. It only takes effect if there is at + least one pre-configured Balancer.</p> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="BalancerInherit" id="BalancerInherit">BalancerInherit</a> <a name="balancerinherit" id="balancerinherit">Directive</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Inherit ProxyPassed Balancers/Workers from the main server</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>BalancerInherit On|Off</code></td></tr> +<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>BalancerInherit On</code></td></tr> +<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr> +<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>BalancerInherit is only available in Apache HTTP Server 2.4.5 and later.</td></tr> +</table> + <p>This directive will cause the current server/vhost to "inherit" ProxyPass + Balancers and Workers defined in the main server. This can cause issues and + inconsistent behavior if using the Balancer Manager and so should be disabled + if using that feature.</p> + <p>The setting in the global server defines the default for all vhosts.</p> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="BalancerMember" id="BalancerMember">BalancerMember</a> <a name="balancermember" id="balancermember">Directive</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Add a member to a load balancing group</td></tr> +<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> +<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory</td></tr> +<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>BalancerMember is only available in Apache HTTP Server 2.2 + and later.</td></tr> +</table> + <p>This directive adds a member to a load balancing group. It can be used + within a <code><Proxy <var>balancer://</var>...></code> container + directive and can take any of the key value pair parameters available to + <code class="directive"><a href="#proxypass">ProxyPass</a></code> directives.</p> + <p>One additional parameter is available only to <code class="directive">BalancerMember</code> directives: + <var>loadfactor</var>. This is the member load factor - a decimal number between 1.0 + (default) and 100.0, which defines the weighted load to be applied to the + member in question.</p> + <p>The <var>balancerurl</var> is only needed when not within a + <code><Proxy <var>balancer://</var>...></code> + container directive. It corresponds to the url of a balancer defined in + <code class="directive"><a href="#proxypass">ProxyPass</a></code> directive.</p> + <p>The path component of the balancer URL in any + <code><Proxy <var>balancer://</var>...></code> container directive + is ignored.</p> + <p>Trailing slashes should typically be removed from the URL of a + <code class="directive">BalancerMember</code>.</p> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="BalancerPersist" id="BalancerPersist">BalancerPersist</a> <a name="balancerpersist" id="balancerpersist">Directive</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Attempt to persist changes made by the Balancer Manager across restarts.</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>BalancerPersist On|Off</code></td></tr> +<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>BalancerPersist Off</code></td></tr> +<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr> +<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>BalancerPersist is only available in Apache HTTP Server 2.4.4 and later.</td></tr> +</table> + <p>This directive will cause the shared memory storage associated + with the balancers and balancer members to be persisted across + restarts. This allows these local changes to not be lost during the + normal restart/graceful state transitions.</p> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="NoProxy" id="NoProxy">NoProxy</a> <a name="noproxy" id="noproxy">Directive</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Hosts, domains, or networks that will be connected to +directly</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>NoProxy <var>host</var> [<var>host</var>] ...</code></td></tr> +<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr> +<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +</table> + <p>This directive is only useful for Apache httpd proxy servers within + intranets. The <code class="directive">NoProxy</code> 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 + <code class="directive"><a href="#proxyremote">ProxyRemote</a></code> proxy server(s).</p> + + <div class="example"><h3>Example</h3><pre class="prettyprint lang-config">ProxyRemote "*" "http://firewall.example.com:81" +NoProxy ".example.com" "192.168.112.0/21"</pre> +</div> + + <p>The <var>host</var> arguments to the <code class="directive">NoProxy</code> + directive are one of the following type list:</p> + + <dl> + + <dt><var><a name="domain" id="domain">Domain</a></var></dt> + <dd> + <p>A <dfn>Domain</dfn> 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 <var>Domain</var>).</p> + + <div class="example"><h3>Examples</h3><p><code> + .com .example.org. + </code></p></div> + + <p>To distinguish <var>Domain</var>s from <var><a href="#hostname">Hostname</a></var>s (both syntactically and semantically; a DNS domain can + have a DNS A record, too!), <var>Domain</var>s are always written with a + leading period.</p> + + <div class="note"><h3>Note</h3> + <p>Domain name comparisons are done without regard to the case, and + <var>Domain</var>s are always assumed to be anchored in the root of the + DNS tree; therefore, the two domains <code>.ExAmple.com</code> and + <code>.example.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.</p> + </div></dd> + + + <dt><var><a name="subnet" id="subnet">SubNet</a></var></dt> + <dd> + <p>A <dfn>SubNet</dfn> 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 <var>SubNet</var>. 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.) Examples:</p> + + <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 <code>255.255.248.0</code>)</dd> + </dl> + + <p>As a degenerate case, a <em>SubNet</em> with 32 valid bits is the + equivalent to an <var><a href="#ipaddr">IPAddr</a></var>, while a <var>SubNet</var> with zero + valid bits (<em>e.g.</em>, 0.0.0.0/0) is the same as the constant + <var>_Default_</var>, matching any IP address.</p></dd> + + + <dt><var><a name="ipaddr" id="ipaddr">IPAddr</a></var></dt> + <dd> + <p>A <dfn>IPAddr</dfn> 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.</p> + <div class="example"><h3>Example</h3><p><code> + 192.168.123.7 + </code></p></div> + + <div class="note"><h3>Note</h3> + <p>An <var>IPAddr</var> does not need to be resolved by the DNS system, so + it can result in more effective apache performance.</p> + </div></dd> + + + <dt><var><a name="hostname" id="hostname">Hostname</a></var></dt> + <dd> + <p>A <dfn>Hostname</dfn> is a fully qualified DNS domain name which can + be resolved to one or more <var><a href="#ipaddr">IPAddrs</a></var> via the + DNS domain name service. It represents a logical host (in contrast to + <var><a href="#domain">Domain</a></var>s, see above) and must be resolvable + to at least one <var><a href="#ipaddr">IPAddr</a></var> (or often to a list + of hosts with different <var><a href="#ipaddr">IPAddr</a></var>s).</p> + + <div class="example"><h3>Examples</h3><p><code> + prep.ai.example.edu<br /> + www.example.org + </code></p></div> + + <div class="note"><h3>Note</h3> + <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 + DNS lookup can be avoided. Name resolution in Apache httpd can take a remarkable + deal of time when the connection to the name server uses a slow PPP + link.</p> + <p><var>Hostname</var> comparisons are done without regard to the case, + and <var>Hostname</var>s are always assumed to be anchored in the root + of the DNS tree; therefore, the two hosts <code>WWW.ExAmple.com</code> + and <code>www.example.com.</code> (note the trailing period) are + considered equal.</p> + </div></dd> + </dl> + +<h3>See also</h3> +<ul> +<li><a href="../dns-caveats.html">DNS Issues</a></li> +</ul> +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="Proxy" id="Proxy"><Proxy></a> <a name="proxy" id="proxy">Directive</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Container for directives applied to proxied resources</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code><Proxy <var>wildcard-url</var>> ...</Proxy></code></td></tr> +<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr> +<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +</table> + <p>Directives placed in <code class="directive"><Proxy></code> + sections apply only to matching proxied content. Shell-style wildcards are + allowed.</p> + + <p>For example, the following will allow only hosts in + <code>yournetwork.example.com</code> to access content via your proxy + server:</p> + + <pre class="prettyprint lang-config"><Proxy "*"> + Require host yournetwork.example.com +</Proxy></pre> + + + <p>The following example will process all files in the <code>foo</code> + directory of <code>example.com</code> through the <code>INCLUDES</code> + filter when they are sent through the proxy server:</p> + + <pre class="prettyprint lang-config"><Proxy "http://example.com/foo/*"> + SetOutputFilter INCLUDES +</Proxy></pre> + + + <div class="note"><h3>Differences from the Location configuration section</h3> + <p>A backend URL matches the configuration section if it begins with the + the <var>wildcard-url</var> string, even if the last path segment in the + directive only matches a prefix of the backend URL. For example, + <Proxy "http://example.com/foo"> matches all of + http://example.com/foo, http://example.com/foo/bar, and + http://example.com/foobar. The matching of the final URL differs + from the behavior of the <code class="directive"><a href="../mod/core.html#location"><Location></a></code> section, which for purposes of this note + treats the final path component as if it ended in a slash.</p> + <p>For more control over the matching, see <code class="directive"><ProxyMatch></code>.</p> + </div> + + +<h3>See also</h3> +<ul> +<li><code class="directive"><a href="#proxymatch"><ProxyMatch></a></code></li> +</ul> +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="Proxy100Continue" id="Proxy100Continue">Proxy100Continue</a> <a name="proxy100continue" id="proxy100continue">Directive</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Forward 100-continue expectation to the origin server</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>Proxy100Continue Off|On</code></td></tr> +<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>Proxy100Continue On</code></td></tr> +<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr> +<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in version 2.4.40 and later</td></tr> +</table> + <p>This directive determines whether the proxy should forward 100-continue + <em>Expect:</em>ation to the origin server and thus let it decide when/if + the HTTP request body should be read, or when <code>Off</code> the proxy + should generate <em>100 Continue</em> intermediate response by itself before + forwarding the request body.</p> + <div class="note"><h3>Effectiveness</h3> + <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> + </div> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="ProxyAddHeaders" id="ProxyAddHeaders">ProxyAddHeaders</a> <a name="proxyaddheaders" id="proxyaddheaders">Directive</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Add proxy information in X-Forwarded-* headers</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyAddHeaders Off|On</code></td></tr> +<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyAddHeaders On</code></td></tr> +<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr> +<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in version 2.3.10 and later</td></tr> +</table> + <p>This directive determines whether or not proxy related information should be passed to the + backend server through X-Forwarded-For, X-Forwarded-Host and X-Forwarded-Server HTTP headers.</p> + <div class="note"><h3>Effectiveness</h3> + <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> + </div> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="ProxyBadHeader" id="ProxyBadHeader">ProxyBadHeader</a> <a name="proxybadheader" id="proxybadheader">Directive</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Determines how to handle bad header lines in a +response</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyBadHeader IsError|Ignore|StartBody</code></td></tr> +<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyBadHeader IsError</code></td></tr> +<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr> +<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +</table> + <p>The <code class="directive">ProxyBadHeader</code> directive determines the + behavior of <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> if it receives syntactically invalid + response header lines (<em>i.e.</em> containing no colon) from the origin + server. The following arguments are possible:</p> + + <dl> + <dt><code>IsError</code></dt> + <dd>Abort the request and end up with a 502 (Bad Gateway) response. This is + the default behavior.</dd> + + <dt><code>Ignore</code></dt> + <dd>Treat bad header lines as if they weren't sent.</dd> + + <dt><code>StartBody</code></dt> + <dd>When receiving the first bad header line, finish reading the headers and + treat the remainder as body. This helps to work around buggy backend servers + which forget to insert an empty line between the headers and the body.</dd> + </dl> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="ProxyBlock" id="ProxyBlock">ProxyBlock</a> <a name="proxyblock" id="proxyblock">Directive</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Words, hosts, or domains that are banned from being +proxied</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyBlock *|<var>word</var>|<var>host</var>|<var>domain</var> +[<var>word</var>|<var>host</var>|<var>domain</var>] ...</code></td></tr> +<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr> +<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +</table> + <p>The <code class="directive">ProxyBlock</code> 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. That may slow down the startup time of the server.</p> + + <div class="example"><h3>Example</h3><pre class="prettyprint lang-config">ProxyBlock "news.example.com" "auctions.example.com" "friends.example.com"</pre> +</div> + + <p>Note that <code>example</code> would also be sufficient to match any + of these sites.</p> + + <p>Hosts would also be matched if referenced by IP address.</p> + + <p>Note also that</p> + + <pre class="prettyprint lang-config">ProxyBlock "*"</pre> + + + <p>blocks connections to all sites.</p> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="ProxyDomain" id="ProxyDomain">ProxyDomain</a> <a name="proxydomain" id="proxydomain">Directive</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Default domain name for proxied requests</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyDomain <var>Domain</var></code></td></tr> +<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr> +<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +</table> + <p>This directive is only useful for Apache httpd proxy servers within + intranets. The <code class="directive">ProxyDomain</code> 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 <var>Domain</var> appended + will be generated.</p> + + <div class="example"><h3>Example</h3><pre class="prettyprint lang-config">ProxyRemote "*" "http://firewall.example.com:81" +NoProxy ".example.com" "192.168.112.0/21" +ProxyDomain ".example.com"</pre> +</div> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="ProxyErrorOverride" id="ProxyErrorOverride">ProxyErrorOverride</a> <a name="proxyerroroverride" id="proxyerroroverride">Directive</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Override error pages for proxied content</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyErrorOverride Off|On [<var>code</var> ...]</code></td></tr> +<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyErrorOverride Off</code></td></tr> +<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr> +<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>The list of status codes was added in 2.4.47</td></tr> +</table> + <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 + <code class="module"><a href="../mod/mod_include.html">mod_include</a></code>'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> + + <p>This directive does not affect the processing of informational (1xx), + normal success (2xx), or redirect (3xx) responses.</p> + + <p>By default <code class="directive">ProxyErrorOverride</code> affects all responses with codes between 400 (including) + and 600 (excluding).</p> + + <div class="example"><h3>Example for default behavior</h3><pre class="prettyprint lang-config">ProxyErrorOverride On</pre> +</div> + + <p>To change the default behavior, you can specify the status codes to consider, separated by spaces. + If you do so, all other status codes will be ignored. + You can only specify status codes, that are considered error codes: between 400 (including) + and 600 (excluding).</p> + + <div class="example"><h3>Example for custom status codes</h3><pre class="prettyprint lang-config">ProxyErrorOverride On 403 405 500 501 502 503 504</pre> +</div> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="ProxyIOBufferSize" id="ProxyIOBufferSize">ProxyIOBufferSize</a> <a name="proxyiobuffersize" id="proxyiobuffersize">Directive</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Determine size of internal data throughput buffer</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyIOBufferSize <var>bytes</var></code></td></tr> +<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyIOBufferSize 8192</code></td></tr> +<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr> +<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +</table> + <p>The <code class="directive">ProxyIOBufferSize</code> directive adjusts the size + of the internal buffer which is used as a scratchpad for the data between + input and output. The size must be at least <code>512</code>.</p> + + <p>In almost every case, there's no reason to change that value.</p> + + <p>If used with AJP, this directive sets the maximum AJP packet size in + bytes. Values larger than 65536 are set to 65536. If you change it from + the default, you must also change the <code>packetSize</code> attribute of + your AJP connector on the Tomcat side! The attribute + <code>packetSize</code> is only available in Tomcat <code>5.5.20+</code> + and <code>6.0.2+</code></p> + + <p>Normally it is not necessary to change the maximum packet size. + Problems with the default value have been reported when sending + certificates or certificate chains.</p> + + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="ProxyMatch" id="ProxyMatch"><ProxyMatch></a> <a name="proxymatch" id="proxymatch">Directive</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Container for directives applied to regular-expression-matched +proxied resources</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code><ProxyMatch <var>regex</var>> ...</ProxyMatch></code></td></tr> +<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr> +<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +</table> + <p>The <code class="directive"><ProxyMatch></code> directive is + identical to the <code class="directive"><a href="#proxy"><Proxy></a></code> directive, except that it matches URLs + using <a class="glossarylink" href="../glossary.html#regex" title="see glossary">regular expressions</a>.</p> + + <p>From 2.4.8 onwards, named groups and backreferences are captured and + written to the environment with the corresponding name prefixed with + "MATCH_" and in upper case. This allows elements of URLs to be referenced + from within <a href="../expr.html">expressions</a> and modules like + <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>. In order to prevent confusion, numbered + (unnamed) backreferences are ignored. Use named groups instead.</p> + +<pre class="prettyprint lang-config"><ProxyMatch "^http://(?<sitename>[^/]+)"> + Require ldap-group cn=%{env:MATCH_SITENAME},ou=combined,o=Example +</ProxyMatch></pre> + + +<h3>See also</h3> +<ul> +<li><code class="directive"><a href="#proxy"><Proxy></a></code></li> +</ul> +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="ProxyMaxForwards" id="ProxyMaxForwards">ProxyMaxForwards</a> <a name="proxymaxforwards" id="proxymaxforwards">Directive</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Maximum number of proxies that a request can be forwarded +through</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyMaxForwards <var>number</var></code></td></tr> +<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyMaxForwards -1</code></td></tr> +<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr> +<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Default behaviour changed in 2.2.7</td></tr> +</table> + <p>The <code class="directive">ProxyMaxForwards</code> directive specifies the + maximum number of proxies through which a request may pass if there's no + <code>Max-Forwards</code> header supplied with the request. This may + be set to prevent infinite proxy loops or a DoS attack.</p> + + <div class="example"><h3>Example</h3><pre class="prettyprint lang-config">ProxyMaxForwards 15</pre> +</div> + + <p>Note that setting <code class="directive">ProxyMaxForwards</code> is a + violation of the HTTP/1.1 protocol (RFC2616), which forbids a Proxy + setting <code>Max-Forwards</code> if the Client didn't set it. + Earlier Apache httpd versions would always set it. A negative + <code class="directive">ProxyMaxForwards</code> value, including the + default -1, gives you protocol-compliant behavior but may + leave you open to loops.</p> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="ProxyPass" id="ProxyPass">ProxyPass</a> <a name="proxypass" id="proxypass">Directive</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Maps remote servers into the local server URL-space</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyPass [<var>path</var>] !|<var>url</var> [<var>key=value</var> + <var>[key=value</var> ...]] [nocanon] [interpolate] [noquery]</code></td></tr> +<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr> +<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Unix Domain Socket (UDS) support added in 2.4.7</td></tr> +</table> + <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. The local server is often called a <dfn>reverse + proxy</dfn> or <dfn>gateway</dfn>. The <var>path</var> is the name of + a local virtual path; <var>url</var> is a partial URL for the + remote server and cannot include a query string.</p> + + <div class="note">It is strongly suggested to review the concept of a + <a href="#workers">Worker</a> before proceeding any further + with this section.</div> + + <div class="note">This directive is not supported within + <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code>, + <code class="directive"><a href="../mod/core.html#if"><If></a></code> and + <code class="directive"><a href="../mod/core.html#files"><Files></a></code> containers. + </div> + + <div class="warning">The <code class="directive"><a href="#proxyrequests">ProxyRequests</a></code> directive should + usually be set <strong>off</strong> when using + <code class="directive">ProxyPass</code>.</div> + + <p>In 2.4.7 and later, support for using a Unix Domain Socket is available by using a target + which prepends <code>unix:/path/lis.sock|</code>. For example, to proxy + HTTP and target the UDS at /home/www.socket, you would use + <code>unix:/home/www.socket|http://localhost/whatever/</code>.</p> + + <div class="note"><strong>Note:</strong> The path associated with the <code>unix:</code> + URL is <code class="directive">DefaultRuntimeDir</code> aware.</div> + + <p>When used inside a <code class="directive"><a href="../mod/core.html#location"><Location></a></code> section, the first argument is omitted and the local + directory is obtained from the <code class="directive"><a href="../mod/core.html#location"><Location></a></code>. The same will occur inside a + <code class="directive"><a href="../mod/core.html#locationmatch"><LocationMatch></a></code> section; + however, ProxyPass does not interpret the regexp as such, so it is necessary + to use <code class="directive">ProxyPassMatch</code> in this situation instead.</p> + + <p>Suppose the local server has address <code>http://example.com/</code>; + then</p> + + <pre class="prettyprint lang-config"><Location "/mirror/foo/"> + ProxyPass "http://backend.example.com/" +</Location></pre> + + + <p>will cause a local request for + <code>http://example.com/mirror/foo/bar</code> to be internally converted + into a proxy request to <code>http://backend.example.com/bar</code>.</p> + + <p>If you require a more flexible reverse-proxy configuration, see the + <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> directive with the + <code>[P]</code> flag.</p> + + <p>The following alternative syntax is possible; however, it can carry a + performance penalty when present in very large numbers. The advantage of + the below syntax is that it allows for dynamic control via the + <a href="mod_proxy_balancer.html#balancer_manager">Balancer Manager</a> interface:</p> + + <pre class="prettyprint lang-config">ProxyPass "/mirror/foo/" "http://backend.example.com/"</pre> + + + <div class="warning"> + <p>If the first argument ends with a trailing <strong>/</strong>, the second + argument should also end with a trailing <strong>/</strong>, and vice + versa. Otherwise, the resulting requests to the backend may miss some + needed slashes and do not deliver the expected results. + </p> + </div> + + <p>The <code>!</code> directive is useful in situations where you don't want + to reverse-proxy a subdirectory, <em>e.g.</em></p> + + <pre class="prettyprint lang-config"><Location "/mirror/foo/"> + ProxyPass "http://backend.example.com/" +</Location> +<Location "/mirror/foo/i"> + ProxyPass "!" +</Location></pre> + + + <pre class="prettyprint lang-config">ProxyPass "/mirror/foo/i" "!" +ProxyPass "/mirror/foo" "http://backend.example.com"</pre> + + + <p>will proxy all requests to <code>/mirror/foo</code> to + <code>backend.example.com</code> <em>except</em> requests made to + <code>/mirror/foo/i</code>.</p> + + <p>Mixing ProxyPass settings in different contexts does not work:</p> + <pre class="prettyprint lang-config">ProxyPass "/mirror/foo/i" "!" +<Location "/mirror/foo/"> + ProxyPass "http://backend.example.com/" +</Location></pre> + + <p>In this case, a request to <code>/mirror/foo/i</code> will get proxied, + because the <code class="directive">ProxyPass</code> directive in the Location block will be evaluated + first. The fact that <code class="directive">ProxyPass</code> supports both server and directory contexts + does not mean that their scope and position in the configuration file will + guarantee any ordering or override.</p> + + <div class="warning"><h3>Ordering ProxyPass Directives</h3> + <p>The configured <code class="directive"><a href="#proxypass">ProxyPass</a></code> + and <code class="directive"><a href="#proxypassmatch">ProxyPassMatch</a></code> + rules are checked in the order of configuration. The first rule that + matches wins. So usually you should sort conflicting + <code class="directive"><a href="#proxypass">ProxyPass</a></code> rules starting with the + longest URLs first. Otherwise, later rules for longer URLS will be hidden + by any earlier rule which uses a leading substring of the URL. Note that + there is some relation with worker sharing.</p> + </div> + <div class="warning"><h3>Ordering ProxyPass Directives in Locations</h3> + <p>Only one <code class="directive"><a href="#proxypass">ProxyPass</a></code> directive + can be placed in a <code class="directive"><a href="../mod/core.html#location">Location</a></code> block, + and the most specific location will take precedence.</p> + </div> + <div class="warning"><h3>Exclusions and the no-proxy environment variable</h3> + <p>Exclusions must come <em>before</em> the + general <code class="directive">ProxyPass</code> directives. In 2.4.26 and later, the "no-proxy" + environment variable is an alternative to exclusions, and is the only + way to configure an exclusion of a <code class="directive">ProxyPass</code> + directive in <code class="directive"><a href="../mod/core.html#location">Location</a></code> context. + This variable should be set with <code class="directive"><a href="../mod/mod_setenvif.html#setenvif">SetEnvIf</a></code>, as <code class="directive"><a href="../mod/mod_env.html#setenv">SetEnv</a></code> + is not evaluated early enough. + </p> + + </div> + + <p><strong>ProxyPass <code>key=value</code> Parameters</strong></p> + + <p>In Apache HTTP Server 2.1 and later, mod_proxy supports pooled + connections to a backend server. Connections created on demand + can be retained in a pool for future use. Limits on the pool size + and other settings can be coded on + the <code class="directive">ProxyPass</code> directive + using <code>key=value</code> parameters, described in the tables + below.</p> + + <div class="warning"><h3>Maximum connections to the backend</h3> + <p>By default, mod_proxy will allow and retain the maximum number of + connections that could be used simultaneously by that web server child + process. Use the <code>max</code> parameter to reduce the number from + the default. The pool of connections is maintained per web server child + process, and <code>max</code> and other settings are not coordinated + among all child processes, except when only one child process is allowed + by configuration or MPM design.</p> + </div> + + <p>Use the <code>ttl</code> parameter to set an optional + time to live; connections which have been unused for at least + <code>ttl</code> seconds will be closed. <code>ttl</code> can be used + to avoid using a connection which is subject to closing because of the + backend server's keep-alive timeout.</p> + + <div class="example"><h3>Example</h3><pre class="prettyprint lang-config">ProxyPass "/example" "http://backend.example.com" max=20 ttl=120 retry=300</pre> +</div> + + <table class="bordered"><tr><th>Worker|BalancerMember parameters</th></tr></table> + <table> + <tr><th>Parameter</th> + <th>Default</th> + <th>Description</th></tr> + <tr><td>min</td> + <td>0</td> + <td>Minimum number of connection pool entries, unrelated to the + actual number of connections. This only needs to be modified from the + default for special circumstances where heap memory associated with the + backend connections should be preallocated or retained.</td></tr> + <tr><td>max</td> + <td>1...n</td> + <td>Maximum number of connections that will be allowed to the + backend server. The default for this limit is the number of threads + per process in the active MPM. In the Prefork MPM, this is always 1, + while with other MPMs, it is controlled by the + <code class="directive">ThreadsPerChild</code> directive.</td></tr> + <tr><td>smax</td> + <td>max</td> + <td>Retained connection pool entries above this limit are freed + during certain operations if they have been unused for longer than + the time to live, controlled by the <code>ttl</code> parameter. If + the connection pool entry has an associated connection, it will be + closed. This only needs to be modified from the default for special + circumstances where connection pool entries and any associated + connections which have exceeded the time to live need to be freed or + closed more aggressively.</td></tr> + <tr><td>acquire</td> + <td>-</td> + <td>If set, this will be the maximum time to wait for a free + connection in the connection pool, in milliseconds. If there are no free + connections in the pool, the Apache httpd will return <code>SERVER_BUSY</code> + status to the client. + </td></tr> + <tr><td>connectiontimeout</td> + <td>timeout</td> + <td>Connect timeout in seconds. + The number of seconds Apache httpd waits for the creation of a connection to + the backend to complete. By adding a postfix of ms, the timeout can be + also set in milliseconds. + </td></tr> + <tr><td>disablereuse</td> + <td>Off</td> + <td>This parameter should be used when you want to force mod_proxy + to immediately close a connection to the backend after being used, and + thus, disable its persistent connection and pool for that backend. + This helps in various situations where a firewall between Apache + httpd and + the backend server (regardless of protocol) tends to silently + drop connections or when backends themselves may be under round- + robin DNS. + When connection reuse is enabled each backend domain is resolved + (with a DNS query) only once per child process and cached for all further + connections until the child is recycled. To disable connection reuse, + set this property value to <code>On</code>. + </td></tr> + <tr><td>enablereuse</td> + <td>On</td> + <td>This is the inverse of 'disablereuse' above, provided as a + convenience for scheme handlers that require opt-in for connection + reuse (such as <code class="module"><a href="../mod/mod_proxy_fcgi.html">mod_proxy_fcgi</a></code>). 2.4.11 and later only. + </td></tr> + <tr><td>flushpackets</td> + <td>off</td> + <td>Determines whether the proxy module will auto-flush the output + brigade after each "chunk" of data. 'off' means that it will flush + only when needed; 'on' means after each chunk is sent; and + 'auto' means poll/wait for a period of time and flush if + no input has been received for 'flushwait' milliseconds. + Currently, this is in effect only for mod_proxy_ajp and mod_proxy_fcgi. + </td></tr> + <tr><td>flushwait</td> + <td>10</td> + <td>The time to wait for additional input, in milliseconds, before + flushing the output brigade if 'flushpackets' is 'auto'. + </td></tr> + <tr><td>iobuffersize</td> + <td>8192</td> + <td>Adjusts the size of the internal scratchpad IO buffer. This allows you + to override the <code class="directive">ProxyIOBufferSize</code> for a specific worker. + This must be at least 512 or set to 0 for the system default of 8192. + </td></tr> + <tr><td>responsefieldsize</td> + <td>8192</td> + <td>Adjust the size of the proxy response field buffer. The buffer size + should be at least the size of the largest expected header size from + a proxied response. Setting the value to 0 will use the system + default of 8192 bytes.<br /> + Available in Apache HTTP Server 2.4.34 and later. + </td></tr> + <tr><td>keepalive</td> + <td>Off</td> + <td><p>This parameter should be used when you have a firewall between your + Apache httpd and the backend server, which tends to drop inactive connections. + This flag will tell the Operating System to send <code>KEEP_ALIVE</code> + messages on inactive connections and thus prevent the firewall from dropping + the connection. + To enable keepalive, set this property value to <code>On</code>. </p> + <p>The frequency of initial and subsequent TCP keepalive probes + depends on global OS settings, and may be as high as 2 hours. To be useful, + the frequency configured in the OS must be smaller than the threshold used + by the firewall.</p> + </td></tr> + <tr><td>lbset</td> + <td>0</td> + <td>Sets the load balancer cluster set that the worker is a member + of. The load balancer will try all members of a lower numbered + lbset before trying higher numbered ones. + </td></tr> + <tr><td>ping</td> + <td>0</td> + <td>Ping property tells the webserver to "test" the connection to + the backend before forwarding the request. For AJP, it causes + <code class="module"><a href="../mod/mod_proxy_ajp.html">mod_proxy_ajp</a></code> to send a <code>CPING</code> + request on the ajp13 connection (implemented on Tomcat 3.3.2+, 4.1.28+ + and 5.0.13+). For HTTP, it causes <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code> + to send a <code>100-Continue</code> to the backend (only valid for + HTTP/1.1 - for non HTTP/1.1 backends, this property has no + effect). In both cases, the parameter is the delay in seconds to wait + for the reply. + This feature has been added to avoid problems with hung and + busy backends. + This will increase the network traffic during the normal operation + which could be an issue, but it will lower the + traffic in case some of the cluster nodes are down or busy. + By adding a postfix of ms, the delay can be also set in + milliseconds. + </td></tr> + <tr><td>receivebuffersize</td> + <td>0</td> + <td>Adjusts the size of the explicit (TCP/IP) network buffer size for + proxied connections. This allows you to override the + <code class="directive">ProxyReceiveBufferSize</code> for a specific worker. + This must be at least 512 or set to 0 for the system default. + </td></tr> + <tr><td>redirect</td> + <td>-</td> + <td>Redirection Route of the worker. This value is usually + set dynamically to enable safe removal of the node from + the cluster. If set, all requests without session id will be + redirected to the BalancerMember that has route parameter + equal to this value. + </td></tr> + <tr><td>retry</td> + <td>60</td> + <td>Connection pool worker retry timeout in seconds. + If the connection pool worker to the backend server is in the error state, + Apache httpd will not forward any requests to that server until the timeout + expires. This enables to shut down the backend server for maintenance + and bring it back online later. A value of 0 means always retry workers + in an error state with no timeout. + </td></tr> + <tr><td>route</td> + <td>-</td> + <td>Route of the worker when used inside load balancer. + The route is a value appended to session id. + </td></tr> + <tr><td><a name="status_table">status</a></td> + <td>-</td> + <td>Single letter value defining the initial status of + this worker. + <table> + <tr><td>D: Worker is disabled and will not accept any requests.</td></tr> + <tr><td>S: Worker is administratively stopped.</td></tr> + <tr><td>I: Worker is in ignore-errors mode and will always be considered available.</td></tr> + <tr><td>R: Worker is a hot spare. For each worker in a given lbset that is unusable + (draining, stopped, in error, etc.), a usable hot spare with the same lbset will be used in + its place. Hot spares can help ensure that a specific number of workers are always available + for use by a balancer.</td></tr> + <tr><td>H: Worker is in hot-standby mode and will only be used if no other + viable workers or spares are available in the balancer set.</td></tr> + <tr><td>E: Worker is in an error state.</td></tr> + <tr><td>N: Worker is in drain mode and will only accept existing sticky sessions + destined for itself and ignore all other requests.</td></tr> + </table>Status + can be set (which is the default) by prepending with '+' or + cleared by prepending with '-'. + Thus, a setting of 'S-E' sets this worker to Stopped and + clears the in-error flag. + </td></tr> + <tr><td>timeout</td> + <td><code class="directive"><a href="#proxytimeout">ProxyTimeout</a></code></td> + <td>Connection timeout in seconds. + The number of seconds Apache httpd waits for data sent by / to the backend. + </td></tr> + <tr><td>ttl</td> + <td>-</td> + <td>Time to live for inactive connections and associated connection + pool entries, in seconds. Once reaching this limit, a + connection will not be used again; it will be closed at some + later time. + </td></tr> + <tr><td>flusher</td> + <td>flush</td> + <td><p>Name of the provider used by <code class="module"><a href="../mod/mod_proxy_fdpass.html">mod_proxy_fdpass</a></code>. + See the documentation of this module for more details.</p> + </td></tr> + <tr><td>secret</td> + <td>-</td> + <td>Value of secret used by <code class="module"><a href="../mod/mod_proxy_ajp.html">mod_proxy_ajp</a></code>. + It must be identical to the secret configured on the server side of the + AJP connection.<br /> + Available in Apache HTTP Server 2.4.42 and later. + </td></tr> + <tr><td><a id="upgrade" name="upgrade">upgrade</a></td> + <td>-</td> + <td><p>Protocol accepted by <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code> or + <code class="module"><a href="../mod/mod_proxy_wstunnel.html">mod_proxy_wstunnel</a></code> for the HTTP Upgrade mechanism + upon negotiation by the HTTP client/browser (per + <a href="https://www.ietf.org/rfc/rfc9110.html#name-upgrade">RFC 9110 - Upgrade</a>). + See the <a href="#protoupgrade">Protocol Upgrade</a> note below</p> + </td></tr> + <tr><td>mapping</td> + <td>-</td> + <td><p>Type of mapping between the <var>path</var> and the <var>url</var>. + This determines the normalization and/or (non-)decoding that <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> + will apply to the requested <var>uri-path</var> before matching the <var>path</var>. If + a mapping matches, it's committed to the <var>uri-path</var> such that all the directory + contexts that use a path (like <code><Location></code>) will be matched using the + same mapping.</p> + <p><code>mapping=encoded</code> prevents the %-decoding of the <var>uri-path</var> so + that one can use for instance configurations like:</p> + <pre class="prettyprint lang-config">ProxyPass "/special%3Fsegment" "https://example.com/special%3Fsegment" mapping=encoded</pre> + + <pre class="prettyprint lang-config"><Location "/special%3Fsegment"> + Require ip 172.17.2.0/24 +</Location></pre> + + <p><code>mapping=servlet</code> refers to the normalization defined by the Servlet + specification, which is for instance applied by Apache Tomcat for servlet containers + (notably the path parameters are ignored for the mapping). An <var>uri-path</var> like + <code>/some;foo/path</code> is then mapped as <code>/some/path</code> hence matches any + of the below regardless of the requested path parameters:</p> + <pre class="prettyprint lang-config">ProxyPass "/some/path" "https://servlet.example.com/some/path" mapping=servlet</pre> + + <pre class="prettyprint lang-config"><Location "/some/path"> + Require valid-user +</Location></pre> + + <div class="note"><h3>Note</h3> + <p>It is recommended to use the same mapping on the Apache httpd side than the one + used on the backend side. For instance when configuring authorizations in + <code><Location></code> blocks for paths that are mapped by <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> + to some servlet containers (like applications running on Apache Tomcat), one should + use the <code>mapping=servlet</code> setting to prevent path parameters and alike from + interfering with the authorizations that are to be enforced in by the Apache httpd.</p> + </div> + </td></tr> + + </table> + + <p>If the Proxy directive scheme starts with the + <code>balancer://</code> (eg: <code>balancer://cluster</code>, + any path information is ignored), then a virtual worker that does not really + communicate with the backend server will be created. Instead, it is responsible + for the management of several "real" workers. In that case, the special set of + parameters can be added to this virtual worker. + See <code class="module"><a href="../mod/mod_proxy_balancer.html">mod_proxy_balancer</a></code> for more information about how + the balancer works. + </p> + <table class="bordered"><tr><th>Balancer parameters</th></tr></table> + <table> + <tr><th>Parameter</th> + <th>Default</th> + <th>Description</th></tr> + <tr><td>lbmethod</td> + <td>byrequests</td> + <td>Balancer load-balance method. Select the load-balancing scheduler + method to use. Either <code>byrequests</code>, to perform weighted + request counting; <code>bytraffic</code>, to perform weighted + traffic byte count balancing; or <code>bybusyness</code>, to perform + pending request balancing. The default is <code>byrequests</code>. + </td></tr> + <tr><td>maxattempts</td> + <td>One less than the number of workers, or 1 with a single worker.</td> + <td>Maximum number of failover attempts before giving up. + </td></tr> + <tr><td>nofailover</td> + <td>Off</td> + <td>If set to <code>On</code>, the session will break if the worker is in + error state or disabled. Set this value to <code>On</code> if backend + servers do not support session replication. + </td></tr> + <tr><td>stickysession</td> + <td>-</td> + <td>Balancer sticky session name. The value is usually set to something + like <code>JSESSIONID</code> or <code>PHPSESSIONID</code>, + and it depends on the backend application server that support sessions. + If the backend application server uses different name for cookies + and url encoded id (like servlet containers) use | to separate them. + The first part is for the cookie the second for the path.<br /> + Available in Apache HTTP Server 2.4.4 and later. + </td></tr> + <tr><td>stickysessionsep</td> + <td>"."</td> + <td>Sets the separation symbol in the session cookie. Some backend application servers + do not use the '.' as the symbol. For example, the Oracle Weblogic server uses + '!'. The correct symbol can be set using this option. The setting of 'Off' + signifies that no symbol is used. + </td></tr> + <tr><td>scolonpathdelim</td> + <td>Off</td> + <td>If set to <code>On</code>, the semi-colon character ';' will be + used as an additional sticky session path delimiter/separator. This + is mainly used to emulate mod_jk's behavior when dealing with paths such + as <code>JSESSIONID=6736bcf34;foo=aabfa</code> + </td></tr> + <tr><td>timeout</td> + <td>0</td> + <td>Balancer timeout in seconds. If set, this will be the maximum time + to wait for a free worker. The default is to not wait. + </td></tr> + <tr><td>failonstatus</td> + <td>-</td> + <td>A single or comma-separated list of HTTP status codes. If set, this will + force the worker into error state when the backend returns any status code + in the list. Worker recovery behaves the same as other worker errors. + </td></tr> + <tr><td>failontimeout</td> + <td>Off</td> + <td>If set, an IO read timeout after a request is sent to the backend will + force the worker into error state. Worker recovery behaves the same as other + worker errors.<br /> + Available in Apache HTTP Server 2.4.5 and later. + </td></tr> + <tr><td>nonce</td> + <td><auto></td> + <td>The protective nonce used in the <code>balancer-manager</code> application page. + The default is to use an automatically determined UUID-based + nonce, to provide for further protection for the page. If set, + then the nonce is set to that value. A setting of <code>None</code> + disables all nonce checking. + <div class="note"><h3>Note</h3> + <p>In addition to the nonce, the <code>balancer-manager</code> page + should be protected via an ACL.</p> + </div> + </td></tr> + <tr><td>growth</td> + <td>0</td> + <td>Number of additional BalancerMembers to allow to be added + to this balancer in addition to those defined at configuration. + </td></tr> + <tr><td>forcerecovery</td> + <td>On</td> + <td>Force the immediate recovery of all workers without considering the + retry parameter of the workers if all workers of a balancer are + in error state. There might be cases where an already overloaded backend + can get into deeper trouble if the recovery of all workers is enforced + without considering the retry parameter of each worker. In this case, + set to <code>Off</code>.<br /> + Available in Apache HTTP Server 2.4.2 and later. + </td></tr> + + </table> + <p>A sample balancer setup:</p> + <pre class="prettyprint lang-config">ProxyPass "/special-area" "http://special.example.com" smax=5 max=10 +ProxyPass "/" "balancer://mycluster/" stickysession=JSESSIONID|jsessionid nofailover=On +<Proxy "balancer://mycluster"> + BalancerMember "ajp://1.2.3.4:8009" + BalancerMember "ajp://1.2.3.5:8009" loadfactor=20 + # Less powerful server, don't send as many requests there, + BalancerMember "ajp://1.2.3.6:8009" loadfactor=5 +</Proxy></pre> + + + <p>Configuring hot spares can help ensure that a certain number of + workers are always available for use per load balancer set:</p> + <pre class="prettyprint lang-config">ProxyPass "/" "balancer://sparecluster/" +<Proxy balancer://sparecluster> + BalancerMember ajp://1.2.3.4:8009 + BalancerMember ajp://1.2.3.5:8009 + # The servers below are hot spares. For each server above that is unusable + # (draining, stopped, unreachable, in error state, etc.), one of these spares + # will be used in its place. Two servers will always be available for a request + # unless one or more of the spares is also unusable. + BalancerMember ajp://1.2.3.6:8009 status=+R + BalancerMember ajp://1.2.3.7:8009 status=+R +</Proxy></pre> + + + <p>Setting up a hot-standby that will only be used if no other + members (or spares) are available in the load balancer set:</p> + <pre class="prettyprint lang-config">ProxyPass "/" "balancer://hotcluster/" +<Proxy "balancer://hotcluster"> + BalancerMember "ajp://1.2.3.4:8009" loadfactor=1 + BalancerMember "ajp://1.2.3.5:8009" loadfactor=2.25 + # The server below is on hot standby + BalancerMember "ajp://1.2.3.6:8009" status=+H + ProxySet lbmethod=bytraffic +</Proxy></pre> + + + <p><strong>Additional ProxyPass Keywords</strong></p> + + <p>Normally, mod_proxy will canonicalise ProxyPassed URLs. + But this may be incompatible with some backends, particularly those + that make use of <var>PATH_INFO</var>. The optional <var>nocanon</var> + keyword suppresses this and passes the URL path "raw" to the + backend. Note that this keyword may affect the security of your backend, + as it removes the normal limited protection against URL-based attacks + provided by the proxy.</p> + + <p>Normally, mod_proxy will include the query string when + generating the <var>SCRIPT_FILENAME</var> environment variable. + The optional <var>noquery</var> keyword (available in + httpd 2.4.1 and later) prevents this.</p> + + <p>The optional <code>interpolate</code> keyword, in combination with + <code class="directive"><a href="#proxypassinterpolateenv">ProxyPassInterpolateEnv</a></code>, causes the ProxyPass + to interpolate environment variables, using the syntax + <var>${VARNAME}</var>. Note that many of the standard CGI-derived + environment variables will not exist when this interpolation happens, + so you may still have to resort to <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> + for complex rules. Also note that interpolation is supported + within the scheme/hostname/port portion of a URL only for variables that + are available when the directive is parsed + (like <code class="directive"><a href="../mod/core.html#define">Define</a></code>). Dynamic determination of + those fields can be accomplished with <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>. + The following example describes how to use <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> + to dynamically set the scheme to http or https:</p> + + <pre class="prettyprint lang-config">RewriteEngine On + +RewriteCond "%{HTTPS}" =off +RewriteRule "." "-" [E=protocol:http] +RewriteCond "%{HTTPS}" =on +RewriteRule "." "-" [E=protocol:https] + +RewriteRule "^/mirror/foo/(.*)" "%{ENV:protocol}://backend.example.com/$1" [P] +ProxyPassReverse "/mirror/foo/" "http://backend.example.com/" +ProxyPassReverse "/mirror/foo/" "https://backend.example.com/"</pre> + + + <div class="note"><h3><a id="protoupgrade" name="protoupgrade">Protocol Upgrade</a></h3> + <p>Since Apache HTTP Server 2.4.47, protocol Upgrade (tunneling) can be handled + end-to-end by <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code> using the <code class="directive">ProxyPass</code> + parameter <var><a href="#upgrade">upgrade</a></var>.</p> + <p>End-to-end means that the HTTP Upgrade request from the client/browser is first + forwarded by <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code> to the origin server and the connection + will be upgraded (and tunneled by <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code>) only if the origin + server accepts/initiates the upgrade (HTTP response <code>101 Switching Protocols</code>). + If the origin server responds with anything else <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code> + will continue forwarding (and enforcing) the HTTP protocol as usual for this + connection.</p> + <p>See <a href="#wsupgrade">Websocket Upgrade (2.4.47 and later)</a> for an example of + configuration using <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code>.</p> + <p>For Apache HTTP Server 2.4.46 and earlier (or if + <code class="directive"><a href="../mod/mod_proxy_wstunnel.html#proxywebsocketfallbacktoproxyhttp">ProxyWebsocketFallbackToProxyHttp</a></code> + from 2.4.48 and later disables <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code> handling), see the + documentation of <code class="module"><a href="../mod/mod_proxy_wstunnel.html">mod_proxy_wstunnel</a></code> for how to proxy the WebSocket + protocol.</p> + </div> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="ProxyPassInherit" id="ProxyPassInherit">ProxyPassInherit</a> <a name="proxypassinherit" id="proxypassinherit">Directive</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Inherit ProxyPass directives defined from the main server</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyPassInherit On|Off</code></td></tr> +<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyPassInherit On</code></td></tr> +<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr> +<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>ProxyPassInherit is only available in Apache HTTP Server 2.4.5 and later. + </td></tr> +</table> + <p>This directive will cause the current server/vhost to "inherit" + <code class="directive"><a href="#proxypass">ProxyPass</a></code> + directives defined in the main server. This can cause issues and + inconsistent behavior if using the Balancer Manager for dynamic changes + and so should be disabled if using that feature.</p> + <p>The setting in the global server defines the default for all vhosts.</p> + <p>Disabling ProxyPassInherit also disables <code class="directive"><a href="#balancerinherit">BalancerInherit</a></code>.</p> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="ProxyPassInterpolateEnv" id="ProxyPassInterpolateEnv">ProxyPassInterpolateEnv</a> <a name="proxypassinterpolateenv" id="proxypassinterpolateenv">Directive</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Enable Environment Variable interpolation in Reverse Proxy configurations</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyPassInterpolateEnv On|Off</code></td></tr> +<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyPassInterpolateEnv Off</code></td></tr> +<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr> +<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in httpd 2.2.9 and later</td></tr> +</table> + <p>This directive, together with the <code>interpolate</code> argument to + <code class="directive">ProxyPass</code>, <code class="directive">ProxyPassReverse</code>, + <code class="directive">ProxyPassReverseCookieDomain</code>, and + <code class="directive">ProxyPassReverseCookiePath</code>, + enables reverse proxies to be dynamically + configured using environment variables which may be set by + another module such as <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>. + It affects the <code class="directive">ProxyPass</code>, + <code class="directive">ProxyPassReverse</code>, + <code class="directive">ProxyPassReverseCookieDomain</code>, and + <code class="directive">ProxyPassReverseCookiePath</code> directives + and causes them to substitute the value of an environment + variable <code>varname</code> for the string <code>${varname}</code> + in configuration directives if the <code>interpolate</code> option is set.</p> + <p>The scheme/hostname/port portion of <code class="directive">ProxyPass</code> may + contain variables, but only the ones available when the directive is parsed + (for example, using <code class="directive"><a href="../mod/core.html#define">Define</a></code>). + For all the other use cases, please consider using + <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> instead.</p> + <div class="warning"><h3>Performance warning</h3> + <p>Keep this turned off unless you need it! + Adding variables to <code class="directive">ProxyPass</code> for example may lead to + the use of the default mod_proxy's workers configured (that don't allow any fine + tuning like connections reuse, etc..).</p> + </div> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="ProxyPassMatch" id="ProxyPassMatch">ProxyPassMatch</a> <a name="proxypassmatch" id="proxypassmatch">Directive</a></h2> +<table class="directive"> +<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> +<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyPassMatch [<var>regex</var>] !|<var>url</var> [<var>key=value</var> + <var>[key=value</var> ...]]</code></td></tr> +<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr> +<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +</table> + <p>This directive is equivalent to <code class="directive"><a href="#proxypass">ProxyPass</a></code> + but makes use of regular expressions instead of simple prefix matching. The + supplied regular expression is matched against the <var>url</var>, and if it + matches, the server will substitute any parenthesized matches into the given + string and use it as a new <var>url</var>.</p> + + <div class="note"><strong>Note: </strong>This directive cannot be used within a + <code><Directory></code> context.</div> + + <p>Suppose the local server has address <code>http://example.com/</code>; + then</p> + + <pre class="prettyprint lang-config">ProxyPassMatch "^/(.*\.gif)$" "http://backend.example.com/$1"</pre> + + + <p>will cause a local request for + <code>http://example.com/foo/bar.gif</code> to be internally converted + into a proxy request to <code>http://backend.example.com/foo/bar.gif</code>.</p> + <div class="note"><h3>Note</h3> + <p>The URL argument must be parsable as a URL <em>before</em> regexp + substitutions (as well as after). This limits the matches you can use. + For instance, if we had used</p> + <pre class="prettyprint lang-config">ProxyPassMatch "^(/.*\.gif)$" "http://backend.example.com:8000$1"</pre> + + <p>in our previous example, it would fail with a syntax error + at server startup. This is a bug (PR 46665 in the ASF bugzilla), + and the workaround is to reformulate the match:</p> + <pre class="prettyprint lang-config">ProxyPassMatch "^/(.*\.gif)$" "http://backend.example.com:8000/$1"</pre> + + </div> + <p>The <code>!</code> directive is useful in situations where you don't want + to reverse-proxy a subdirectory.</p> + + <p>When used inside a <code class="directive"><a href="../mod/core.html#locationmatch"><LocationMatch></a></code> section, the first argument is omitted and the + regexp is obtained from the <code class="directive"><a href="../mod/core.html#locationmatch"><LocationMatch></a></code>.</p> + + <p>If you require a more flexible reverse-proxy configuration, see the + <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> directive with the + <code>[P]</code> flag.</p> + + <div class="note"> + <h3>Default Substitution</h3> + <p>When the URL parameter doesn't use any backreferences into the regular + expression, the original URL will be appended to the URL parameter. + </p> + </div> + + <div class="warning"> + <h3>Security Warning</h3> + <p>Take care when constructing the target URL of the rule, considering + the security impact from allowing the client influence over the set of + URLs to which your server will act as a proxy. Ensure that the scheme + and hostname part of the URL is either fixed or does not allow the + client undue influence.</p> + </div> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="ProxyPassReverse" id="ProxyPassReverse">ProxyPassReverse</a> <a name="proxypassreverse" id="proxypassreverse">Directive</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Adjusts the URL in HTTP response headers sent from a reverse +proxied server</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyPassReverse [<var>path</var>] <var>url</var> +[interpolate]</code></td></tr> +<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr> +<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +</table> + <p>This directive lets Apache httpd 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 httpd is used as a + reverse proxy (or gateway) to avoid bypassing the reverse proxy + because of HTTP redirects on the backend servers which stay behind + the reverse proxy.</p> + + <p>Only the HTTP response headers specifically mentioned above + will be rewritten. Apache httpd will not rewrite other response + headers, nor will it by default rewrite URL references inside HTML pages. + This means that if the proxied content contains absolute URL + references, they will bypass the proxy. To rewrite HTML content to + match the proxy, you must load and enable <code class="module"><a href="../mod/mod_proxy_html.html">mod_proxy_html</a></code>. + </p> + + <p><var>path</var> is the name of a local virtual path; <var>url</var> is a + partial URL for the remote server. + These parameters are used the same way as for the + <code class="directive"><a href="#proxypass">ProxyPass</a></code> directive.</p> + + <p>For example, suppose the local server has address + <code>http://example.com/</code>; then</p> + + <pre class="prettyprint lang-config">ProxyPass "/mirror/foo/" "http://backend.example.com/" +ProxyPassReverse "/mirror/foo/" "http://backend.example.com/" +ProxyPassReverseCookieDomain "backend.example.com" "public.example.com" +ProxyPassReverseCookiePath "/" "/mirror/foo/"</pre> + + + <p>will not only cause a local request for the + <code>http://example.com/mirror/foo/bar</code> to be internally converted + into a proxy request to <code>http://backend.example.com/bar</code> + (the functionality which <code>ProxyPass</code> provides here). + It also takes care of redirects which the server <code>backend.example.com</code> + sends when redirecting <code>http://backend.example.com/bar</code> to + <code>http://backend.example.com/quux</code> . Apache httpd adjusts this to + <code>http://example.com/mirror/foo/quux</code> before forwarding the HTTP + redirect response to the client. Note that the hostname used for + 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> + + <p>Note that this <code class="directive">ProxyPassReverse</code> directive can + also be used in conjunction with the proxy feature + (<code>RewriteRule ... [P]</code>) from <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> + because it doesn't depend on a corresponding <code class="directive"><a href="#proxypass">ProxyPass</a></code> directive.</p> + + <p>The optional <code>interpolate</code> keyword, used together with + <code class="directive"><a href="#proxypassinterpolateenv">ProxyPassInterpolateEnv</a></code>, enables interpolation + of environment variables specified using the format <var>${VARNAME}</var>. + Note that interpolation is not supported within the scheme portion of a + URL.</p> + + <p>When used inside a <code class="directive"><a href="../mod/core.html#location"><Location></a></code> section, the first argument is omitted and the local + directory is obtained from the <code class="directive"><a href="../mod/core.html#location"><Location></a></code>. The same occurs inside a <code class="directive"><a href="../mod/core.html#locationmatch"><LocationMatch></a></code> section, but will probably not work as + intended, as ProxyPassReverse will interpret the regexp literally as a + path; if needed in this situation, specify the ProxyPassReverse outside + the section or in a separate <code class="directive"><a href="../mod/core.html#location"><Location></a></code> section.</p> + + <p>This directive is not supported in <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> or <code class="directive"><a href="../mod/core.html#files"><Files></a></code> sections.</p> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="ProxyPassReverseCookieDomain" id="ProxyPassReverseCookieDomain">ProxyPassReverseCookieDomain</a> <a name="proxypassreversecookiedomain" id="proxypassreversecookiedomain">Directive</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Adjusts the Domain string in Set-Cookie headers from a reverse- +proxied server</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyPassReverseCookieDomain <var>internal-domain</var> +<var>public-domain</var> [interpolate]</code></td></tr> +<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr> +<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +</table> +<p>Usage is basically similar to +<code class="directive"><a href="#proxypassreverse">ProxyPassReverse</a></code>, but instead of +rewriting headers that are a URL, this rewrites the <code>domain</code> +string in <code>Set-Cookie</code> headers.</p> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="ProxyPassReverseCookiePath" id="ProxyPassReverseCookiePath">ProxyPassReverseCookiePath</a> <a name="proxypassreversecookiepath" id="proxypassreversecookiepath">Directive</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Adjusts the Path string in Set-Cookie headers from a reverse- +proxied server</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyPassReverseCookiePath <var>internal-path</var> +<var>public-path</var> [interpolate]</code></td></tr> +<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr> +<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +</table> +<p> +Useful in conjunction with +<code class="directive"><a href="#proxypassreverse">ProxyPassReverse</a></code> +in situations where backend URL paths are mapped to public paths on the +reverse proxy. This directive rewrites the <code>path</code> string in +<code>Set-Cookie</code> headers. If the beginning of the cookie path matches +<var>internal-path</var>, the cookie path will be replaced with +<var>public-path</var>. +</p><p> +In the example given with +<code class="directive"><a href="#proxypassreverse">ProxyPassReverse</a></code>, the directive: +</p> + <pre class="prettyprint lang-config">ProxyPassReverseCookiePath "/" "/mirror/foo/"</pre> + +<p> +will rewrite a cookie with backend path <code>/</code> (or +<code>/example</code> or, in fact, anything) to <code>/mirror/foo/</code>. +</p> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="ProxyPreserveHost" id="ProxyPreserveHost">ProxyPreserveHost</a> <a name="proxypreservehost" id="proxypreservehost">Directive</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Use incoming Host HTTP request header for proxy +request</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyPreserveHost On|Off</code></td></tr> +<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyPreserveHost Off</code></td></tr> +<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr> +<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Usable in directory +context in 2.3.3 and later.</td></tr> +</table> + <p>When enabled, this option will pass the <code>Host:</code> line from the incoming + request to the proxied host, instead of the hostname specified in the + <code class="directive"><a href="#proxypass">ProxyPass</a></code> line.</p> + + <p>This option should normally be turned <code>Off</code>. It is mostly + useful in special configurations like proxied mass name-based virtual + hosting, where the original Host header needs to be evaluated by the + backend server.</p> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="ProxyReceiveBufferSize" id="ProxyReceiveBufferSize">ProxyReceiveBufferSize</a> <a name="proxyreceivebuffersize" id="proxyreceivebuffersize">Directive</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Network buffer size for proxied HTTP and FTP +connections</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyReceiveBufferSize <var>bytes</var></code></td></tr> +<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyReceiveBufferSize 0</code></td></tr> +<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr> +<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +</table> + <p>The <code class="directive">ProxyReceiveBufferSize</code> directive specifies an + explicit (TCP/IP) network buffer size for proxied HTTP and FTP connections, + for increased throughput. It has to be greater than <code>512</code> or set + to <code>0</code> to indicate that the system's default buffer size should + be used.</p> + + <div class="example"><h3>Example</h3><pre class="prettyprint lang-config">ProxyReceiveBufferSize 2048</pre> +</div> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="ProxyRemote" id="ProxyRemote">ProxyRemote</a> <a name="proxyremote" id="proxyremote">Directive</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Remote proxy used to handle certain requests</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyRemote <var>match</var> <var>remote-server</var></code></td></tr> +<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr> +<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +</table> + <p>This defines remote proxies to this proxy. <var>match</var> 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 <code>*</code> to indicate + the server should be contacted for all requests. <var>remote-server</var> is + a partial URL for the remote server. Syntax:</p> + + <div class="example"><p><code> + <dfn>remote-server</dfn> = + <var>scheme</var>://<var>hostname</var>[:<var>port</var>] + </code></p></div> + + <p><var>scheme</var> is effectively the protocol that should be used to + communicate with the remote server; only <code>http</code> and <code>https</code> + are supported by this module. When using <code>https</code>, the requests + are forwarded through the remote proxy using the HTTP CONNECT method.</p> + + <div class="example"><h3>Example</h3><pre class="prettyprint lang-config">ProxyRemote "http://goodguys.example.com/" "http://mirrorguys.example.com:8000" +ProxyRemote "*" "http://cleverproxy.localdomain" +ProxyRemote "ftp" "http://ftpproxy.mydomain:8080"</pre> +</div> + + <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> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="ProxyRemoteMatch" id="ProxyRemoteMatch">ProxyRemoteMatch</a> <a name="proxyremotematch" id="proxyremotematch">Directive</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Remote proxy used to handle requests matched by regular +expressions</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyRemoteMatch <var>regex</var> <var>remote-server</var></code></td></tr> +<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr> +<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +</table> + <p>The <code class="directive">ProxyRemoteMatch</code> is identical to the + <code class="directive"><a href="#proxyremote">ProxyRemote</a></code> directive, except that + the first argument is a <a class="glossarylink" href="../glossary.html#regex" title="see glossary">regular expression</a> + match against the requested URL.</p> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="ProxyRequests" id="ProxyRequests">ProxyRequests</a> <a name="proxyrequests" id="proxyrequests">Directive</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Enables forward (standard) proxy requests</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyRequests On|Off</code></td></tr> +<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyRequests Off</code></td></tr> +<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr> +<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +</table> + <p>This allows or prevents Apache httpd from functioning as a forward proxy + server. (Setting ProxyRequests to <code>Off</code> does not disable use of + the <code class="directive"><a href="#proxypass">ProxyPass</a></code> directive.)</p> + + <p>In a typical reverse proxy or gateway configuration, this + option should be set to + <code>Off</code>.</p> + + <p>In order to get the functionality of proxying HTTP or FTP sites, you + 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> + (or both) present in the server.</p> + + <p>In order to get the functionality of (forward) proxying HTTPS sites, you + need <code class="module"><a href="../mod/mod_proxy_connect.html">mod_proxy_connect</a></code> enabled in the server.</p> + + <div class="warning"><h3>Warning</h3> + <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 network and to the Internet at large.</p> + </div> + +<h3>See also</h3> +<ul> +<li><a href="#forwardreverse">Forward and Reverse Proxies/Gateways</a></li> +</ul> +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="ProxySet" id="ProxySet">ProxySet</a> <a name="proxyset" id="proxyset">Directive</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Set various Proxy balancer or member parameters</td></tr> +<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> +<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory</td></tr> +<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>ProxySet is only available in Apache HTTP Server 2.2 + and later.</td></tr> +</table> + <p>This directive is used as an alternate method of setting any of the + parameters available to Proxy balancers and workers normally done via the + <code class="directive"><a href="#proxypass">ProxyPass</a></code> directive. If used + within a <code><Proxy <var>balancer url|worker url</var>></code> + container directive, the <var>url</var> argument is not required. As a side + effect the respective balancer or worker gets created. This can be useful + when doing reverse proxying via a + <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> instead of a + <code class="directive"><a href="#proxypass">ProxyPass</a></code> directive.</p> + + <div class="example"><pre class="prettyprint lang-config"><Proxy "balancer://hotcluster"> + BalancerMember "http://www2.example.com:8080" loadfactor=1 + BalancerMember "http://www3.example.com:8080" loadfactor=2 + ProxySet lbmethod=bytraffic +</Proxy></pre> +</div> + + <pre class="prettyprint lang-config"><Proxy "http://backend"> + ProxySet keepalive=On +</Proxy></pre> + + + <pre class="prettyprint lang-config">ProxySet "balancer://foo" lbmethod=bytraffic timeout=15</pre> + + + <pre class="prettyprint lang-config">ProxySet "ajp://backend:7001" timeout=15</pre> + + + <div class="warning"><h3>Warning</h3> + <p>Keep in mind that the same parameter key can have a different meaning + depending whether it is applied to a balancer or a worker, as shown by + the two examples above regarding timeout.</p> + </div> + + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="ProxySourceAddress" id="ProxySourceAddress">ProxySourceAddress</a> <a name="proxysourceaddress" id="proxysourceaddress">Directive</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Set local IP address for outgoing proxy connections</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxySourceAddress <var>address</var></code></td></tr> +<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr> +<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in version 2.3.9 and later</td></tr> +</table> + <p>This directive allows to set a specific local address to bind to when connecting + to a backend server.</p> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="ProxyStatus" id="ProxyStatus">ProxyStatus</a> <a name="proxystatus" id="proxystatus">Directive</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Show Proxy LoadBalancer status in mod_status</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyStatus Off|On|Full</code></td></tr> +<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyStatus Off</code></td></tr> +<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr> +<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in version 2.2 and later</td></tr> +</table> + <p>This directive determines whether or not proxy + loadbalancer status data is displayed via the <code class="module"><a href="../mod/mod_status.html">mod_status</a></code> + server-status page.</p> + <div class="note"><h3>Note</h3> + <p><strong>Full</strong> is synonymous with <strong>On</strong></p> + </div> + + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="ProxyTimeout" id="ProxyTimeout">ProxyTimeout</a> <a name="proxytimeout" id="proxytimeout">Directive</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Network timeout for proxied requests</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyTimeout <var>seconds</var></code></td></tr> +<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> +<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr> +<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +</table> + <p>This directive allows a user to specify a timeout on proxy requests. + This is useful 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> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="ProxyVia" id="ProxyVia">ProxyVia</a> <a name="proxyvia" id="proxyvia">Directive</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Information provided in the <code>Via</code> HTTP response +header for proxied requests</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyVia On|Off|Full|Block</code></td></tr> +<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyVia Off</code></td></tr> +<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr> +<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +</table> + <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 + 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 + 14.45 for an explanation of <code>Via:</code> header lines.</p> + + <ul> + <li>If set to <code>Off</code>, 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 <code>On</code>, each request and reply will get a + <code>Via:</code> header line added for the current host.</li> + + <li>If set to <code>Full</code>, each generated <code>Via:</code> header + line will additionally have the Apache httpd server version shown as a + <code>Via:</code> comment field.</li> + + <li>If set to <code>Block</code>, every proxy request will have all its + <code>Via:</code> header lines removed. No new <code>Via:</code> header will + be generated.</li> + </ul> + +</div> +</div> +<div class="bottomlang"> +<p><span>Available Languages: </span><a href="../en/mod/mod_proxy.html" title="English"> en </a> | +<a href="../fr/mod/mod_proxy.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/mod/mod_proxy.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a></p> +</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&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed 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 Libera.chat, or sent to our <a href="https://httpd.apache.org/lists.html">mailing lists</a>.</div> +<script type="text/javascript"><!--//--><![CDATA[//><!-- +var comments_shortname = 'httpd'; +var comments_identifier = 'http://httpd.apache.org/docs/2.4/mod/mod_proxy.html'; +(function(w, d) { + if (w.location.hostname.toLowerCase() == "httpd.apache.org") { + d.write('<div id="comments_thread"><\/div>'); + var s = d.createElement('script'); + s.type = 'text/javascript'; + s.async = true; + s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; + (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); + } + else { + d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); + } +})(window, document); +//--><!]]></script></div><div id="footer"> +<p class="apache">Copyright 2023 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> +<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[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script> +</body></html>
\ No newline at end of file diff --git a/docs/manual/mod/mod_proxy.html.fr.utf8 b/docs/manual/mod/mod_proxy.html.fr.utf8 new file mode 100644 index 0000000..ad4f103 --- /dev/null +++ b/docs/manual/mod/mod_proxy.html.fr.utf8 @@ -0,0 +1,2472 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head> +<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" /> +<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + --> +<title>mod_proxy - Serveur HTTP Apache Version 2.4</title> +<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> +<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> +<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" /> +<script src="../style/scripts/prettify.min.js" type="text/javascript"> +</script> + +<link href="../images/favicon.ico" rel="shortcut icon" /></head> +<body> +<div id="page-header"> +<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">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p> +<p class="apache">Serveur HTTP Apache Version 2.4</p> +<img alt="" src="../images/feather.png" /></div> +<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div> +<div id="path"> +<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Serveur HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.4</a> > <a href="./">Modules</a></div> +<div id="page-content"> +<div id="preamble"><h1>Module Apache mod_proxy</h1> +<div class="toplang"> +<p><span>Langues Disponibles: </span><a href="../en/mod/mod_proxy.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../fr/mod/mod_proxy.html" title="Français"> fr </a> | +<a href="../ja/mod/mod_proxy.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a></p> +</div> +<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Serveur mandataire/passerelle multi-protocole</td></tr> +<tr><th><a href="module-dict.html#Status">Statut:</a></th><td>Extension</td></tr> +<tr><th><a href="module-dict.html#ModuleIdentifier">Identificateur de Module:</a></th><td>proxy_module</td></tr> +<tr><th><a href="module-dict.html#SourceFile">Fichier Source:</a></th><td>mod_proxy.c</td></tr></table> +<h3>Sommaire</h3> + + <div class="warning"><h3>Avertissement</h3> + <p>N'activez pas la fonctionnalité de mandataire avec la directive + <code class="directive"><a href="#proxyrequests">ProxyRequests</a></code> avant + d'avoir <a href="#access">sécurisé votre serveur</a>. Les serveurs + mandataires ouverts sont dangereux pour votre réseau, + mais aussi pour l'Internet au sens large.</p> + </div> + + <p><code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> et ses modules associés implémentent + un mandataire/passerelle pour le serveur HTTP Apache, et supportent + de nombreux protocoles courants, ainsi que plusieurs algorithmes de + répartition de charge. Le support de protocoles et d'algorithmes de + répartition de charge supplémentaires peut être assuré par des + modules tiers.</p> + + <p>Un jeu de modules chargés dans le serveur permet de fournir les + fonctionnalités souhaitées. Ces modules peuvent être inclus + statiquement à la compilation, ou dynamiquement via la directive + <code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code>. Ce jeu de module + doit comporter :</p> + + <ul> + <li><code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code>, qui fournit les fonctionnalités de + base d'un mandataire</li> + + <li><code class="module"><a href="../mod/mod_proxy_balancer.html">mod_proxy_balancer</a></code> et un ou plusieurs modules + de répartition, si la répartition de charge doit être mise en + oeuvre (Voir la documentation de + <code class="module"><a href="../mod/mod_proxy_balancer.html">mod_proxy_balancer</a></code> pour plus de détails).</li> + + <li>un ou plusieurs modules de types de mandataire, ou protocoles + : + + <table class="bordered"> + <tr><th>Protocole</th><th>Module</th></tr> + <tr><td>AJP13 (Protocole Apache JServe version + 1.3)</td><td><code class="module"><a href="../mod/mod_proxy_ajp.html">mod_proxy_ajp</a></code></td></tr> + <tr><td>CONNECT (pour + SSL)</td><td><code class="module"><a href="../mod/mod_proxy_connect.html">mod_proxy_connect</a></code></td></tr> + <tr><td>FastCGI</td><td><code class="module"><a href="../mod/mod_proxy_fcgi.html">mod_proxy_fcgi</a></code></td></tr> + <tr><td>ftp</td><td><code class="module"><a href="../mod/mod_proxy_ftp.html">mod_proxy_ftp</a></code></td></tr> + <tr><td>HTTP/0.9, HTTP/1.0, et + HTTP/1.1</td><td><code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code></td></tr> + <tr><td>HTTP/2.0</td><td><code class="module"><a href="../mod/mod_proxy_http2.html">mod_proxy_http2</a></code></td></tr> + <tr><td>SCGI</td><td><code class="module"><a href="../mod/mod_proxy_scgi.html">mod_proxy_scgi</a></code></td></tr> + <tr><td>UWSGI</td><td><code class="module"><a href="../mod/mod_proxy_uwsgi.html">mod_proxy_uwsgi</a></code></td></tr> + <tr><td>WS and WSS (Web-sockets)</td><td><code class="module"><a href="../mod/mod_proxy_wstunnel.html">mod_proxy_wstunnel</a></code></td></tr> + </table> + </li> + </ul> + + <p>En outre, d'autres modules fournissent des fonctionnalités + étendues. <code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code> et ses modules associés + fournissent la mise en cache. Les directives <code>SSLProxy*</code> + du module <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> permettent de contacter des + serveurs distants en utilisant le protocole SSL/TLS. Ces modules + additionnels devront être chargés et configurés pour pouvoir + disposer de ces fonctionnalités.</p> +</div> +<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><h3>Sujets</h3> +<ul id="topics"> +<li><img alt="" src="../images/down.gif" /> <a href="#forwardreverse">Mandataires directs et + mandataires/passerelles inverses</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#examples">Exemples simples</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#handler">Accès via un gestionnaire</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#workers">Workers</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#access">Contrôler l'accès à votre + mandataire</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#startup">Ralentissement au démarrage</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#intranet">Mandataire en Intranet</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#envsettings">Ajustements relatifs au + protocole</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#request-bodies">Corps de requêtes</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#x-headers">En-têtes de requête du mandataire + inverse</a></li> +</ul><h3 class="directives">Directives</h3> +<ul id="toc"> +<li><img alt="" src="../images/down.gif" /> <a href="#balancergrowth">BalancerGrowth</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#balancerinherit">BalancerInherit</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#balancermember">BalancerMember</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#balancerpersist">BalancerPersist</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#noproxy">NoProxy</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxy"><Proxy></a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxy100continue">Proxy100Continue</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxyaddheaders">ProxyAddHeaders</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxybadheader">ProxyBadHeader</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxyblock">ProxyBlock</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxydomain">ProxyDomain</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxyerroroverride">ProxyErrorOverride</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxyiobuffersize">ProxyIOBufferSize</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxymatch"><ProxyMatch></a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxymaxforwards">ProxyMaxForwards</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxypass">ProxyPass</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxypassinherit">ProxyPassInherit</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxypassinterpolateenv">ProxyPassInterpolateEnv</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxypassmatch">ProxyPassMatch</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxypassreverse">ProxyPassReverse</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxypassreversecookiedomain">ProxyPassReverseCookieDomain</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxypassreversecookiepath">ProxyPassReverseCookiePath</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxypreservehost">ProxyPreserveHost</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxyreceivebuffersize">ProxyReceiveBufferSize</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxyremote">ProxyRemote</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxyremotematch">ProxyRemoteMatch</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxyrequests">ProxyRequests</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxyset">ProxySet</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxysourceaddress">ProxySourceAddress</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxystatus">ProxyStatus</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxytimeout">ProxyTimeout</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxyvia">ProxyVia</a></li> +</ul> +<h3>Traitement des bugs</h3><ul class="seealso"><li><a href="https://www.apache.org/dist/httpd/CHANGES_2.4">Journal des modifications de httpd</a></li><li><a href="https://bz.apache.org/bugzilla/buglist.cgi?bug_status=__open__&list_id=144532&product=Apache%20httpd-2&query_format=specific&order=changeddate%20DESC%2Cpriority%2Cbug_severity&component=mod_proxy">Problèmes connus</a></li><li><a href="https://bz.apache.org/bugzilla/enter_bug.cgi?product=Apache%20httpd-2&component=mod_proxy">Signaler un bug</a></li></ul><h3>Voir aussi</h3> +<ul class="seealso"> +<li><code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code></li> +<li><code class="module"><a href="../mod/mod_proxy_ajp.html">mod_proxy_ajp</a></code></li> +<li><code class="module"><a href="../mod/mod_proxy_balancer.html">mod_proxy_balancer</a></code></li> +<li><code class="module"><a href="../mod/mod_proxy_connect.html">mod_proxy_connect</a></code></li> +<li><code class="module"><a href="../mod/mod_proxy_fcgi.html">mod_proxy_fcgi</a></code></li> +<li><code class="module"><a href="../mod/mod_proxy_ftp.html">mod_proxy_ftp</a></code></li> +<li><code class="module"><a href="../mod/mod_proxy_hcheck.html">mod_proxy_hcheck</a></code></li> +<li><code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code></li> +<li><code class="module"><a href="../mod/mod_proxy_scgi.html">mod_proxy_scgi</a></code></li> +<li><code class="module"><a href="../mod/mod_proxy_wstunnel.html">mod_proxy_wstunnel</a></code></li> +<li><code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code></li> +<li><a href="#comments_section">Commentaires</a></li></ul></div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="forwardreverse" id="forwardreverse">Mandataires directs et + mandataires/passerelles inverses</a></h2> + <p>Le serveur HTTP Apache peut être configuré dans les deux modes mandataire + <dfn>direct</dfn> et mandataire <dfn>inverse</dfn> (aussi nommé + mode <dfn>passerelle</dfn>).</p> + + <p>Un <dfn>mandataire direct</dfn> standard est un serveur + intermédiaire qui s'intercale entre le client et le <em>serveur + demandé</em>. Pour obtenir un contenu hébergé par + le serveur demandé, le client envoie une requête au + mandataire en nommant le serveur demandé comme + cible. Le mandataire extrait alors le contenu depuis le + serveur demandé et le renvoie enfin au client. Le client doit être + configuré de manière appropriée pour pouvoir utiliser le mandataire + direct afin d'accéder à d'autres sites.</p> + + <p>L'accès à Internet depuis des clients situés derrière un + pare-feu est une utilisation typique du mandataire direct. Le + mandataire direct peut aussi utiliser la mise en cache (fournie + par <code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code>) pour réduire la charge du + réseau.</p> + + <p>La fonctionnalité de mandataire direct est activée via la + directive <code class="directive"><a href="#proxyrequests">ProxyRequests</a></code>. + Comme les mandataires directs permettent aux clients d'accéder à + des sites quelconques via votre serveur et de dissimuler leur + véritable origine, il est indispensable de <a href="#access">sécuriser votre serveur</a> de façon à ce que seuls + les clients autorisés puissent accéder à votre serveur avant + d'activer la fonctionnalité de mandataire direct.</p> + + <p>Un <dfn>mandataire inverse</dfn> (ou <dfn>passerelle</dfn>), + quant à lui, apparaît au client comme un serveur web standard. + Aucune configuration particulière du client n'est nécessaire. Le + client adresse ses demandes de contenus ordinaires dans l'espace + de nommage du mandataire inverse. Ce dernier décide alors où + envoyer ces requêtes, et renvoie le contenu au client comme s'il + l'hébergeait lui-même.</p> + + <p>L'accès d'utilisateurs depuis Internet vers un serveur situé + derrière un pare-feu est une utilisation typique du mandataire + inverse. On peut aussi utiliser les mandataires inverses pour + mettre en oeuvre une répartition de charge entre plusieurs + serveurs en arrière-plan, ou fournir un cache pour un serveur + d'arrière-plan plus lent. Les mandataires inverses peuvent aussi + tout simplement servir à rassembler plusieurs serveurs dans le + même espace de nommage d'URLs.</p> + + <p>La fonctionnalité de mandataire inverse est activée via la + directive <code class="directive"><a href="#proxypass">ProxyPass</a></code> ou + le drapeau <code>[P]</code> de la directive <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code>. Il n'est + <strong>pas</strong> nécessaire de définir <code class="directive"><a href="#proxyrequests">ProxyRequests</a></code> pour configurer + un mandataire inverse.</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="examples" id="examples">Exemples simples</a></h2> + + <p>Les exemples ci-dessous illustrent de manière très basique la + mise en oeuvre de la fonctionnalité de mandataire et ne sont là que + pour vous aider à démarrer. Reportez-vous à la documentation de + chaque directive.</p> + + <p>Si en outre, vous désirez activer la mise en cache, consultez la + documentation de <code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code>.</p> + + <div class="example"><h3>Mandataire inverse</h3><pre class="prettyprint lang-config">ProxyPass "/foo" "http://foo.example.com/bar" +ProxyPassReverse "/foo" "http://foo.example.com/bar"</pre> +</div> + + <div class="example"><h3>Mandataire direct</h3><pre class="prettyprint lang-config">ProxyRequests On +ProxyVia On + +<Proxy "*"> + Require host internal.example.com +</Proxy></pre> +</div> + <div class="example"><h3><a id="wsupgrade" name="wsupgrade">Promotion de protocole + vers Websocket (versions 2.4.47 et ultérieures)</a></h3><pre class="prettyprint lang-config">ProxyPass "/some/ws/capable/path/" "http://example.com/some/ws/capable/path/" upgrade=websocket</pre> +</div> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="handler" id="handler">Accès via un gestionnaire</a></h2> + + <p>Vous pouvez aussi forcer le traitement d'une requête en tant que + requête de mandataire inverse en créant un gestionnaire de transfert + approprié. Dans l'exemple suivant, toutes les requêtes pour + des scripts PHP seront transmises au serveur FastCGI + spécifié via un mandat inverse : + </p> + + <div class="example"><h3>Scripts PHP et mandataire inverse</h3><pre class="prettyprint lang-config"><FilesMatch "\.php$"> + # Les sockets Unix nécessitent une version 2.4.7 ou supérieure du + # serveur HTTP Apache + SetHandler "proxy:unix:/path/to/app.sock|fcgi://localhost/" +</FilesMatch></pre> +</div> + + <p>Cette fonctionnalité est disponible à partir de la version + 2.4.10 du serveur HTTP Apache.</p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="workers" id="workers">Workers</a></h2> + <p>Le mandataire gère la configuration et les paramètres de + communication des serveurs originaux au sein d'objets nommés + <dfn>workers</dfn>. Deux types de worker sont fournis : le worker + par défaut du mandataire direct et le worker par défaut du + mandataire inverse. Il est aussi possible de définir explicitement + des workers supplémentaires.</p> + + <p>Les deux workers par défaut possèdent une configuration figée + et seront utilisés si aucun autre worker ne correspond à la + requête. Ils ne réutilisent pas les connexions et n'utilisent pas les + connexions HTTP persistantes (Keep-Alive). En effet, les + connexions TCP vers le serveur original sont fermées et ouvertes + pour chaque requête.</p> + + <p>Les workers définis explicitement sont identifiés par leur URL. + Ils sont en général définis via les directives <code class="directive"><a href="#proxypass">ProxyPass</a></code> ou <code class="directive"><a href="#proxypassmatch">ProxyPassMatch</a></code> lorsqu'on les + utilise dans le cadre d'un mandataire inverse :</p> + + <div class="example"><pre class="prettyprint lang-config">ProxyPass "/example" "http://backend.example.com" connectiontimeout=5 timeout=30</pre> +</div> + + + <p>Cette directive va créer un worker associé à l'URL du serveur + original <code>http://backend.example.com</code> qui utilisera les + valeurs de timeout données. Lorsqu'ils sont utilisés dans le cadre + d'un mandataire direct, les workers sont en général définis via la + directive <code class="directive"><a href="#proxyset">ProxySet</a></code>,</p> + + <div class="example"><pre class="prettyprint lang-config">ProxySet "http://backend.example.com" connectiontimeout=5 timeout=30</pre> +</div> + + + <p>ou encore via les directives <code class="directive"><a href="#proxy">Proxy</a></code> et <code class="directive"><a href="#proxyset">ProxySet</a></code> :</p> + + <pre class="prettyprint lang-config"><Proxy "http://backend.example.com"> + ProxySet connectiontimeout=5 timeout=30 +</Proxy></pre> + + + <p>L'utilisation de workers définis explicitement dans le mode + mandataire direct n'est pas très courante, car les mandataires + directs communiquent en général avec de nombreux serveurs + originaux. La création explicite de workers pour certains serveurs + originaux peut cependant s'avérer utile si ces serveurs sont + très souvent sollicités. A leur niveau, les workers explicitement + définis ne possèdent aucune notion de mandataire direct ou + inverse. Ils encapsulent un concept de communication commun avec + les serveurs originaux. Un worker créé via la directive <code class="directive"><a href="#proxypass">ProxyPass</a></code> pour être utilisé dans le + cadre d'un mandataire inverse sera aussi utilisé dans le cadre + d'un mandataire directe chaque fois que l'URL vers le serveur + original correspondra à l'URL du worker, et vice versa.</p> + + <p>L'URL qui identifie un worker correspond à l'URL de son serveur + original, y compris un éventuel chemin donné :</p> + + <pre class="prettyprint lang-config">ProxyPass "/examples" "http://backend.example.com/examples" +ProxyPass "/docs" "http://backend.example.com/docs"</pre> + + + <p>Dans cet exemple, deux workers différents sont définis, chacun + d'eux utilisant des configurations et jeux de connexions + séparés.</p> + + <div class="warning"><h3>Partage de workers</h3> + <p>Le partage de workers intervient lorsque les URLs des workers + s'entrecoupent, ce qui arrive lorsque l'URL d'un worker + correspond au début de l'URL d'un autre worker défini plus loin + dans le fichier de configuration. Dans l'exemple suivant,</p> + + <pre class="prettyprint lang-config">ProxyPass "/apps" "http://backend.example.com/" timeout=60 +ProxyPass "/examples" "http://backend.example.com/examples" timeout=10</pre> + + + <p>le second worker n'est pas vraiment créé. C'est le premier + worker qui est en fait utilisé. L'avantage de ceci réside dans + le fait qu'il n'existe qu'un seul jeu de connexions, ces + dernières étant donc réutilisées plus souvent. Notez que tous + les attributs de configuration définis explicitement pour le + deuxième worker seront ignorés, ce qui sera journalisé en tant + qu'avertissement. Ainsi, dans l'exemple ci-dessus, la valeur de + timeout retenue pour l'URL <code>/exemples</code> sera + <code>60</code>, et non <code>10</code> !</p> + + <p>Si vous voulez empêcher le partage de workers, classez vos + définitions de workers selon la longueur des URLs, de la plus + longue à la plus courte. Si au contraire vous voulez favoriser + ce partage, utilisez l'ordre de classement inverse. Voir aussi + l'avertissement à propos de l'ordre de classement des directives + <code class="directive"><a href="#proxypass">ProxyPass</a></code>.</p> + + </div> + + <p>Les workers définis explicitement sont de deux sortes : + <dfn>workers directs</dfn> et <dfn>workers de répartition (de + charge)</dfn>. Ils supportent de nombreux attributs de + configuration importants décrits dans la directive <code class="directive"><a href="#proxypass">ProxyPass</a></code>. Ces mêmes attributs + peuvent aussi être définis via la directive <code class="directive"><a href="#proxyset">ProxySet</a></code>.</p> + + <p>Le jeu d'options disponibles pour un worker direct dépend du + protocole spécifié dans l'URL du serveur original. Les protocoles + disponibles comprennent <code>ajp</code>, <code>fcgi</code>, + <code>ftp</code>, <code>http</code> et <code>scgi</code>.</p> + + <p>Les workers de répartition sont des workers virtuels qui + utilisent les workers directs, connus comme faisant partie de leurs + membres, pour le traitement effectif des requêtes. Chaque + répartiteur peut comporter plusieurs membres. Lorsqu'il traite une + requête, il choisit un de ses membres en fonction de l'algorithme + de répartition de charge défini.</p> + + <p>Un worker de répartition est créé si son URL de worker comporte + <code>balancer</code> comme indicateur de protocole. L'URL du + répartiteur permet d'identifier de manière unique le worker de + répartition. La directive <code class="directive"><a href="#balancermember">BalancerMember</a></code> permet d'ajouter des + membres au répartiteur.</p> + + <div class="note"><h3>Résolution DNS pour les domaines originaux</h3> + <p>La résolution DNS s'effectue lorsque le socket vers le + domaine original est créé pour la première fois. Lorsque la réutilisation + des connexions est activée, chaque domaine d'arrière-plan n'est résolu qu'une + seule fois pour chaque processus enfant, et cette résolution est mise en + cache pour toutes les connexions ultérieures jusqu'à ce que le processus enfant + soit recyclé. Ce comportement doit être pris en considération lorsqu'on + planifie des tâches de maintenance du DNS impactant les domaines + d'arrière-plan. Veuillez aussi vous reporter aux paramètres de la + directive <code class="directive"><a href="#proxypass">ProxyPass</a></code> pour plus de + détails à propos de la réutilisation des connexions.</p> + </div> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="access" id="access">Contrôler l'accès à votre + mandataire</a></h2> + <p>Vous pouvez restreindre l'accès à votre mandataire via le bloc + de contrôle <code class="directive"><a href="#proxy"><Proxy></a></code> comme dans + l'exemple suivant :</p> + + <pre class="prettyprint lang-config"><Proxy "*"> + Require ip 192.168.0 +</Proxy></pre> + + + <p>Pour plus de détails sur les directives de contrôle d'accès, + voir la documentation du module + <code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code>.</p> + + <p>Restreindre l'accès de manière stricte est essentiel si vous + mettez en oeuvre un mandataire direct (en définissant la directive + <code class="directive"><a href="#proxyrequests">ProxyRequests</a></code> à "on"). + Dans le cas contraire, votre serveur pourrait être utilisé par + n'importe quel client pour accéder à des serveurs quelconques, + tout en masquant sa véritable identité. Ceci représente un danger + non seulement pour votre réseau, mais aussi pour l'Internet au + sens large. Dans le cas de la mise en oeuvre d'un mandataire + inverse (en utilisant la directive <code class="directive"><a href="#proxypass">ProxyPass</a></code> avec <code>ProxyRequests Off</code>), le contrôle + d'accès est moins critique car les clients ne peuvent contacter + que les serveurs que vous avez spécifiés.</p> + + <p><strong>Voir aussi</strong> la variable d'environnement <a href="mod_proxy_http.html#env">Proxy-Chain-Auth</a>.</p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="startup" id="startup">Ralentissement au démarrage</a></h2> + <p>Si vous utilisez la directive <code class="directive"><a href="#proxyblock">ProxyBlock</a></code>, les noms d'hôtes sont résolus en adresses + IP puis ces dernières mises en cache au cours du démarrage + à des fins de tests de comparaisons ultérieurs. Ce processus peut + durer plusieurs secondes (ou d'avantage) en fonction de la vitesse + à laquelle s'effectue la résolution des noms d'hôtes.</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="intranet" id="intranet">Mandataire en Intranet</a></h2> + <p>Un serveur mandataire Apache httpd situé à l'intérieur d'un Intranet + doit faire suivre les requêtes destinées à un serveur externe à + travers le pare-feu de l'entreprise (pour ce faire, définissez la + directive <code class="directive"><a href="#proxyremote">ProxyRemote</a></code> de + façon à ce qu'elle fasse suivre le <var>protocole</var> concerné + vers le mandataire du pare-feu). Cependant, lorsqu'il doit accéder + à des ressources situées dans l'Intranet, il peut se passer du + pare-feu pour accéder aux serveurs. A cet effet, la directive + <code class="directive"><a href="#noproxy">NoProxy</a></code> permet de + spécifier quels hôtes appartiennent à l'Intranet et peuvent donc + être accédés directement.</p> + + <p>Les utilisateurs d'un Intranet ont tendance à oublier le nom du + domaine local dans leurs requêtes WWW, et demandent par exemple + "http://un-serveur/" au lieu de + <code>http://un-serveur.example.com/</code>. Certains serveurs + mandataires commerciaux acceptent ce genre de requête et les + traitent simplement en utilisant un nom de domaine local + implicite. Lorsque la directive <code class="directive"><a href="#proxydomain">ProxyDomain</a></code> est utilisée et si le + serveur est <a href="#proxyrequests">configuré comme + mandataire</a>, Apache httpd peut renvoyer une réponse de redirection et + ainsi fournir au client l'adresse de serveur correcte, + entièrement qualifiée. C'est la méthode à privilégier car le + fichier des marque-pages de l'utilisateur contiendra alors des + noms de serveurs entièrement qualifiés.</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="envsettings" id="envsettings">Ajustements relatifs au + protocole</a></h2> + <p>Pour les cas où <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> envoie des requêtes + vers un serveur qui n'implémente pas correctement les connexions + persistantes ou le protocole HTTP/1.1, il existe deux variables + d'environnement qui permettent de forcer les requêtes à utiliser + le protocole HTTP/1.0 avec connexions non persistantes. Elles + peuvent être définies via la directive <code class="directive"><a href="../mod/mod_env.html#setenv">SetEnv</a></code>.</p> + + <p>Il s'agit des variables <code>force-proxy-request-1.0</code> et + <code>proxy-nokeepalive</code>.</p> + + <pre class="prettyprint lang-config"><Location "/buggyappserver/"> + ProxyPass "http://buggyappserver:7001/foo/" + SetEnv force-proxy-request-1.0 1 + SetEnv proxy-nokeepalive 1 +</Location></pre> + + + <p>A partir de la version 2.4.26 du serveur HTTP Apache, la définition de + la variable d'environnement "no-proxy" permet de désactiver + <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> dans le traitement de la requête courante. + Cette variable doit être définie via la directive <code class="directive"><a href="../mod/mod_setenvif.html#setenvif">SetEnvIf</a></code> car la directive <code class="directive"><a href="../mod/mod_env.html#setenv">SetEnv</a></code> n'est pas évaluée assez tôt.</p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="request-bodies" id="request-bodies">Corps de requêtes</a></h2> + + <p>Certaines méthodes de requêtes comme POST comportent un corps de + requête. Le protocole HTTP stipule que les requêtes qui comportent + un corps doivent soit utiliser un codage de transmission + fractionnée (chunked transfer encoding), soit envoyer un en-tête de requête + <code>Content-Length</code>. Lorsqu'il fait suivre ce genre de + requête vers le serveur demandé, <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code> + s'efforce toujours d'envoyer l'en-tête <code>Content-Length</code>. + Par contre, si la taille du corps est importante, et si la requête + originale utilise un codage à fractionnement, ce dernier peut aussi + être utilisé dans la requête montante. Ce comportement peut être + contrôlé à l'aide de <a href="../env.html">variables + d'environnement</a>. Ainsi, si elle est définie, la variable + <code>proxy-sendcl</code> assure une compatibilité maximale avec les + serveurs demandés en imposant l'envoi de l'en-tête + <code>Content-Length</code>, alors que + <code>proxy-sendchunked</code> diminue la consommation de ressources + en imposant l'utilisation d'un codage à fractionnement.</p> + + <p>Dans certaines circonstances, le serveur doit mettre en file + d'attente sur disque les corps de requêtes afin de satisfaire le + traitement demandé des corps de requêtes. Par exemple, cette mise en + file d'attente se produira si le corps original a été envoyé selon un + codage morcelé (et possède une taille importante), alors que + l'administrateur a demandé que les requêtes du serveur + d'arrière-plan soient envoyées avec l'en-tête Content-Length ou en + HTTP/1.0. Cette mise en file d'attente se produira aussi si le corps + de la requête contient déjà un en-tête Content-Length, alors que le + serveur est configuré pour filtrer les corps des requêtes entrantes.</p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="x-headers" id="x-headers">En-têtes de requête du mandataire + inverse</a></h2> + + <p>Lorsqu'il est configuré en mode mandataire inverse (en utilisant + par exemple la directive <code class="directive"><a href="#proxypass">ProxyPass</a></code>), + <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code> ajoute plusieurs en-têtes de requête + afin de transmettre des informations au serveur demandé. Ces + en-têtes sont les suivants :</p> + + <dl> + <dt><code>X-Forwarded-For</code></dt> + <dd>L'adresse IP du client.</dd> + <dt><code>X-Forwarded-Host</code></dt> + <dd>L'hôte d'origine demandé par le client dans l'en-tête de + requête HTTP <code>Host</code>.</dd> + <dt><code>X-Forwarded-Server</code></dt> + <dd>Le nom d'hôte du serveur mandataire.</dd> + </dl> + + <p>Ces en-têtes doivent être utilisés avec précautions sur le + serveur demandé, car ils contiendront plus d'une valeur (séparées + par des virgules) si la requête originale contenait déjà un de ces + en-têtes. Par exemple, vous pouvez utiliser + <code>%{X-Forwarded-For}i</code> dans la chaîne de format du journal + du serveur demandé pour enregistrer les adresses IP des clients + originaux, mais il est possible que vous obteniez plusieurs adresses + si la requête passe à travers plusieurs mandataires.</p> + + <p>Voir aussi les directives <code class="directive"><a href="#proxypreservehost">ProxyPreserveHost</a></code> et <code class="directive"><a href="#proxyvia">ProxyVia</a></code> directives, qui permettent + de contrôler d'autres en-têtes de requête.</p> + + <p>Note : Si vous devez ajouter des en-têtes particuliers à la + requête mandatée, utilisez la directive <code class="directive"><a href="../mod/mod_headers.html#requestheader">RequestHeader</a></code>.</p> + + </div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="balancergrowth" id="balancergrowth">Directive</a> <a name="BalancerGrowth" id="BalancerGrowth">BalancerGrowth</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Nombre de membres supplémentaires pouvant être ajoutés +après la configuration initiale</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>BalancerGrowth <var>#</var></code></td></tr> +<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>BalancerGrowth 5</code></td></tr> +<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr> +<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>BalancerGrowth est disponible depuis la version 2.3.13 du +serveur HTTP Apache</td></tr> +</table> + <p>Cette directive permet de définir le nombre de membres pouvant + être ajoutés au groupe de répartition de charge préconfiguré d'un + serveur virtuel. Elle n'est active que si le groupe a été + préconfiguré avec un membre au minimum.</p> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="balancerinherit" id="balancerinherit">Directive</a> <a name="BalancerInherit" id="BalancerInherit">BalancerInherit</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Héritage des membres du groupes de répartition de + charge du mandataire définis au niveau du serveur principal</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>BalancerInherit On|Off</code></td></tr> +<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>BalancerInherit On</code></td></tr> +<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr> +<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible à partir de la version 2.4.5 du serveur + HTTP Apache.</td></tr> +</table> + <p>Cette directive permet d'attribuer au serveur virtuel courant + l'héritage des membres de groupes de répartition de charge + définis au niveau du serveur + principal. Elle ne doit pas être activée si vous + utilisez la fonctionnalité de modifications dynamiques du + gestionnaire de répartition de charge (Balancer Manager) pour + éviter des problèmes et des comportements inattendus.</p> + <p>Les définitions au niveau du serveur principal constituent + les définitions par défaut au niveau des serveurs virtuels.</p> + + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="balancermember" id="balancermember">Directive</a> <a name="BalancerMember" id="BalancerMember">BalancerMember</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Ajoute un membre à un groupe de répartition de +charge</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>BalancerMember [<var>balancerurl</var>] <var>url</var> [<var>clé=valeur [clé=valeur ...]]</var></code></td></tr> +<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>répertoire</td></tr> +<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.2 du serveur HTTP Apache.</td></tr> +</table> + <p>Cette directive permet d'ajouter un membre à un groupe de + répartition de charge. Elle peut se trouver dans un conteneur + <code><Proxy <var>balancer://</var>...></code>, et accepte + tous les paramètres de paires clé/valeur que supporte la directive + <code class="directive"><a href="#proxypass">ProxyPass</a></code>.</p> + <p>La directive <code class="directive">BalancerMember</code> accepte un paramètre + supplémentaire : <var>loadfactor</var>. Il s'agit du facteur de + charge du membre - un nombre décimal entre 1.0 (valeur par défaut) et 100.0, qui + définit la charge à appliquer au membre en question.</p> + <p>L'argument <var>balancerurl</var> n'est requis que s'il ne se trouve pas + dèjà dans la directive de conteneur <code><Proxy + <var>balancer://</var>...></code>. Il correspond à l'URL d'un + répartiteur de charge défini par une directive <code class="directive"><a href="#proxypass">ProxyPass</a></code>.</p> + <p>La partie chemin de l'URL du répartiteur dans toute directive de + conteneur <code><Proxy <var>balancer://</var>...></code> est + ignorée.</p> + <p>En particulier, le slash de fin de l'URL d'un + <code class="directive">BalancerMember</code> doit être supprimé.</p> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="balancerpersist" id="balancerpersist">Directive</a> <a name="BalancerPersist" id="BalancerPersist">BalancerPersist</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Tente de conserver les changements effectués par le + gestionnaire de répartition de charge après un redémarrage du + serveur.</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>BalancerPersist On|Off</code></td></tr> +<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>BalancerPersist Off</code></td></tr> +<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr> +<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>BalancerPersist n'est disponible qu'à partir de la + version 2.4.4 du serveur HTTP Apache.</td></tr> +</table> + <p>Cette directive permet de conserver le contenu de l'espace + mémoire partagé associé aux répartiteurs de charge et à leurs + membres après un redémarrage du serveur. Ces modifications + locales ne sont ainsi pas perdues lors des transitions d'état + dues à un redémarrage.</p> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="noproxy" id="noproxy">Directive</a> <a name="NoProxy" id="NoProxy">NoProxy</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Serveurs, domaines ou réseaux auquels on se connectera +directement</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>NoProxy <var>domaine</var> [<var>domaine</var>] ...</code></td></tr> +<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr> +<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +</table> + <p>Cette directive n'a d'utilité que pour les serveurs mandataires + Apache httpd au sein d'Intranets. La directive + <code class="directive">NoProxy</code> permet de spécifier une liste de + sous-réseaux, d'adresses IP, de serveurs et/ou de domaines séparés + par des espaces. Une requête pour un serveur qui correspond à un ou + plusieurs critères sera toujours servie par ce serveur directement, + sans être redirigée vers le(s) serveur(s) mandataire(s) défini(s) par + la directive <code class="directive"><a href="#proxyremote">ProxyRemote</a></code>.</p> + + <div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config">ProxyRemote "*" "http://firewall.example.com:81" +NoProxy ".example.com" "192.168.112.0/21"</pre> +</div> + + <p>Le type des arguments <var>serveur</var> de la directive + <code class="directive">NoProxy</code> appartiennent à la liste suivante + :</p> + + <dl> + + <dt><var><a name="domain" id="domain">Domaine</a></var></dt> + <dd> + <p>Un <dfn>domaine</dfn> est ici un nom de domaine DNS partiellement + qualifié précédé d'un point. Il représente une liste de serveurs qui + appartiennent logiquement au même domaine ou à la même zonz DNS + (en d'autres termes, les nom des serveurs se terminent tous par + <var>domaine</var>).</p> + + <div class="example"><h3>Exemple</h3><p><code> + .com .example.org. + </code></p></div> + + <p>Pour faire la distinction entre <var>domaine</var>s et <var><a href="#hostname">nom d'hôte</a></var>s (des points de vue à la fois + syntaxique et + sémantique, un domaine DNS pouvant aussi avoir un enregistrement DNS + de type A !), les <var>domaine</var>s sont toujours spécifiés en les + préfixant par un point.</p> + + <div class="note"><h3>Note</h3> + <p>Les comparaisons de noms de domaines s'effectuent sans tenir + compte de la casse, et les parties droites des <var>Domaine</var>s + sont toujours censées correspondre à la racine de l'arborescence + DNS, si bien que les domaines <code>.ExEmple.com</code> et + <code>.exemple.com.</code> (notez le point à la fin du nom) sont + considérés comme identiques. Comme une comparaison de domaines ne + nécessite pas de recherche DNS, elle est beaucoup plus efficace + qu'une comparaison de sous-réseaux.</p> + </div></dd> + + + <dt><var><a name="subnet" id="subnet">Sous-réseau</a></var></dt> + <dd> + <p>Un <dfn>Sous-réseau</dfn> est une adresse internet partiellement + qualifiée sous forme numérique (quatre nombres séparés par des + points), optionnellement suivie d'un slash et du masque de + sous-réseau spécifiant le nombre de bits significatifs dans le + <var>Sous-réseau</var>. Il représente un sous-réseau de serveurs qui + peuvent être atteints depuis la même interface réseau. En l'absence + de masque de sous-réseau explicite, il est sous-entendu que les + digits manquants (ou caractères 0) de fin spécifient le masque de + sous-réseau (Dans ce cas, le masque de sous-réseau ne peut être + qu'un multiple de 8). Voici quelques exemples :</p> + + <dl> + <dt><code>192.168</code> ou <code>192.168.0.0</code></dt> + <dd>le sous-réseau 192.168.0.0 avec un masque de sous-réseau + implicite de 16 bits significatifs (parfois exprimé sous la forme + <code>255.255.0.0</code>)</dd> + <dt><code>192.168.112.0/21</code></dt> + <dd>le sous-réseau <code>192.168.112.0/21</code> avec un masque de + sous-réseau implicite de 21 bits significatifs (parfois exprimé + sous la forme<code>255.255.248.0</code>)</dd> + </dl> + + <p>Comme cas extrêmes, un <em>Sous-réseau</em> avec un masque de + sous-réseau de 32 bits significatifs est équivalent à une <var><a href="#ipaddr">adresse IP</a></var>, alors qu'un <em>Sous-réseau</em> avec un masque de + sous-réseau de 0 bit significatif (c'est à dire 0.0.0.0/0) est + identique à la constante <var>_Default_</var>, et peut correspondre + à toute adresse IP.</p></dd> + + + <dt><var><a name="ipaddr" id="ipaddr">Adresse IP</a></var></dt> + <dd> + <p>Une <dfn>Adresse IP</dfn> est une adresse internet pleinement + qualifiée sous forme numérique (quatre nombres séparés par des + points). En général, cette adresse représente un serveur, mais elle + ne doit pas nécessairement correspondre à un nom de domaine DNS.</p> + <div class="example"><h3>Exemple</h3><p><code> + 192.168.123.7 + </code></p></div> + + <div class="note"><h3>Note</h3> + <p>Une <dfn>Adresse IP</dfn> ne nécessite pas de résolution DNS, + et peut ainsi s'avérer plus efficace quant aux performances + d'Apache.</p> + </div></dd> + + + <dt><var><a name="hostname" id="hostname">Nom de serveur</a></var></dt> + <dd> + <p>Un <dfn>Nom de serveur</dfn> est un nom de domaine DNS pleinement + qualifié qui peut être résolu en une ou plusieurs adresses IP par le + service de noms de domaines DNS. Il représente un hôte logique (par + opposition aux <var><a href="#domain">Domaine</a></var>s, voir + ci-dessus), et doit pouvoir être résolu en une ou plusieurs <var><a href="#ipaddr">adresses IP</a></var> (ou souvent en une liste + d'hôtes avec différentes <var><a href="#ipaddr">adresses + IP</a></var>).</p> + + <div class="example"><h3>Exemples</h3><p><code> + prep.ai.example.edu<br /> + www.example.org + </code></p></div> + + <div class="note"><h3>Note</h3> + <p>Dans de nombreuses situations, il est plus efficace de + spécifier une <var><a href="#ipaddr">adresse IP</a></var> qu'un + <var>Nom de serveur</var> car cela évite d'avoir à effectuer une + recherche DNS. La résolution de nom dans Apache httpd peut prendre un + temps très long lorsque la connexion avec le serveur de noms + utilise une liaison PPP lente.</p> + <p>Les comparaisons de <var>Nom de serveur</var> s'effectuent sans tenir + compte de la casse, et les parties droites des <var>Noms de serveur</var> + sont toujours censées correspondre à la racine de l'arborescence + DNS, si bien que les domaines <code>WWW.ExEmple.com</code> et + <code>www.example.com.</code> (notez le point à la fin du nom) sont + considérés comme identiques.</p> + </div></dd> + </dl> + +<h3>Voir aussi</h3> +<ul> +<li><a href="../dns-caveats.html">Problèmes liés au DNS</a></li> +</ul> +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="proxy" id="proxy">Directive</a> <a name="Proxy" id="Proxy"><Proxy></a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Conteneur de directives s'appliquant à des ressources +mandatées</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code><Proxy <var>url-avec-jokers</var>> ...</Proxy></code></td></tr> +<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr> +<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +</table> + <p>Les directives situées dans une section <code class="directive"><Proxy></code> ne s'appliquent qu'au contenu + mandaté concerné. Les jokers de style shell sont autorisés.</p> + + <p>Par exemple, les lignes suivantes n'autoriseront à accéder à un + contenu via votre serveur mandataire que les hôtes appartenant à + <code>votre-reseau.example.com</code> :</p> + + <pre class="prettyprint lang-config"><Proxy "*"> + Require host votre-reseau.example.com +</Proxy></pre> + + + <p>Dans l'exemple suivant, tous les fichiers du répertoire + <code>foo</code> de <code>example.com</code> seront traités par le + filtre <code>INCLUDES</code> lorsqu'ils seront envoyés par + l'intermédiaire du serveur mandataire :</p> + + <pre class="prettyprint lang-config"><Proxy "http://example.com/foo/*"> + SetOutputFilter INCLUDES +</Proxy></pre> + + + <div class="note"><h3>Différences avec la section de configuration Location</h3> + <p>Une URL d'arrière-plan sera concernée par le conteneur Proxy si + elle commence par la <var>url-avec-jokers</var>, même si le + dernier segment de chemin de la directive ne correspond qu'à un + préfixe de segment dee chemin de l'URL d'arrière-plan. Par exemple, <Proxy + "http://example.com/foo"> correspondra entre autres aux URLs + http://example.com/foo, http://example.com/foo/bar, et + http://example.com/foobar. La correspondance de l'URL finale + diffère du comportement de la section <code class="directive"><a href="../mod/core.html#location"><Location></a></code> qui, pour le cas de cette note, + traitera le segment de chemin final comme s'il se terminait par un + slash.</p> + <p>Pour un contrôle plus fin de la correspondance des URL, voir la + directive <code class="directive"><ProxyMatch></code>.</p> + </div> + + +<h3>Voir aussi</h3> +<ul> +<li><code class="directive"><a href="#proxymatch"><ProxyMatch></a></code></li> +</ul> +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="proxy100continue" id="proxy100continue">Directive</a> <a name="Proxy100Continue" id="Proxy100Continue">Proxy100Continue</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Transmission du message "100-continue" au serveur d'origine</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>Proxy100Continue Off|On</code></td></tr> +<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>Proxy100Continue On</code></td></tr> +<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel, répertoire</td></tr> +<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible à partir de la version 2.4.40 du serveur HTTP Apache</td></tr> +</table> + <p>Cette directive permet de contrôler le transfert par le mandataire du + message "100-continue" (<em>Expect:</em>ation) vers le serveur d'origine. Si + elle est définie à "On", le serveur d'origine décidera lui-même si le corps + de la requête HTTP doit être lu. Si elle est définie à "Off", le mandataire + générera lui-même une réponse intermédiaire <em>100 Continue</em> avant de + transférer le corps de la requête.</p> + <div class="note"><h3>Contexte d'utilisation</h3> + <p>Cette option n'est utilisable qu'avec les mandataires HTTP gérés par + <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code>.</p> + </div> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="proxyaddheaders" id="proxyaddheaders">Directive</a> <a name="ProxyAddHeaders" id="ProxyAddHeaders">ProxyAddHeaders</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Ajoute des informations à propos du mandataire aux +en-têtes X-Forwarded-*</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyAddHeaders Off|On</code></td></tr> +<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>ProxyAddHeaders On</code></td></tr> +<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel, répertoire</td></tr> +<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.3.10</td></tr> +</table> + <p>Cette directive permet de passer au serveur d'arrière-plan des + informations à propos du mandataire via les en-têtes HTTP + X-Forwarded-For, X-Forwarded-Host et X-Forwarded-Server.</p> + <div class="note"><h3>Utilité</h3> + <p>Cette option n'est utile que dans le cas du mandat HTTP traité + par <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code>.</p> + </div> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="proxybadheader" id="proxybadheader">Directive</a> <a name="ProxyBadHeader" id="ProxyBadHeader">ProxyBadHeader</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Détermine la manière de traiter les lignes d'en-tête +incorrectes d'une réponse</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyBadHeader IsError|Ignore|StartBody</code></td></tr> +<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>ProxyBadHeader IsError</code></td></tr> +<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr> +<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +</table> + <p>La directive <code class="directive">ProxyBadHeader</code> permet de + déterminer le comportement de <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> lorsqu'il + reçoit des lignes d'en-tête de réponse dont la syntaxe n'est pas valide (c'est + à dire ne contenant pas de caractère ':') en provenance du serveur + original. Les arguments disponibles sont :</p> + + <dl> + <dt><code>IsError</code></dt> + <dd>Annule la requête et renvoie une réponse de code 502 (mauvaise + passerelle). C'est le comportement par défaut.</dd> + + <dt><code>Ignore</code></dt> + <dd>Traite les lignes d'en-tête incorrectes comme si elles n'avaient + pas été envoyées.</dd> + + <dt><code>StartBody</code></dt> + <dd>A la réception de la première ligne d'en-tête incorrecte, les + autres en-têtes sont lus et ce qui reste est traité en tant que + corps. Ceci facilite la prise en compte des serveurs d'arrière-plan + bogués qui oublient d'insérer une ligne vide entre les + en-têtes et le corps.</dd> + </dl> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="proxyblock" id="proxyblock">Directive</a> <a name="ProxyBlock" id="ProxyBlock">ProxyBlock</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Termes, serveurs ou domaines bloqués par le +mandataire</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyBlock *|<var>terme</var>|<var>serveur</var>|<var>domaine</var> +[<var>terme</var>|<var>serveur</var>|<var>domaine</var>] ...</code></td></tr> +<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr> +<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +</table> + <p>La directive <code class="directive">ProxyBlock</code> permet de + spécifier une liste de termes, serveurs et/ou domaines, séparés par + des espaces. Les requêtes de documents HTTP, HTTPS, FTP vers des + sites dont les noms contiennent des termes, noms de serveur ou + domaine correspondants seront <em>bloqués</em> par le serveur + mandataire. La module proxy va aussi tenter de déterminer les + adresses IP des éléments de la liste qui peuvent correspondre à des + noms d'hôtes au cours du démarrage, et les mettra en cache à des + fins de comparaisons ultérieures. Ceci peut ralentir le démarrage du + serveur.</p> + + <div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config">ProxyBlock "news.example.com" "auctions.example.com" "friends.example.com"</pre> +</div> + + <p>Notez qu'<code>example</code> suffirait aussi pour atteindre + ces sites.</p> + + <p>Hosts conviendrait aussi s'il était référencé par adresse IP.</p> + + <p>Notez aussi que</p> + + <pre class="prettyprint lang-config">ProxyBlock "*"</pre> + + + <p>bloque les connexions vers tous les sites.</p> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="proxydomain" id="proxydomain">Directive</a> <a name="ProxyDomain" id="ProxyDomain">ProxyDomain</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Nom de domaine par défaut pour les requêtes +mandatées</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyDomain <var>Domaine</var></code></td></tr> +<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr> +<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +</table> + <p>Cette directive n'a d'utilité que pour les serveurs mandataires + Apache httpd au sein d'un Intranet. La directive + <code class="directive">ProxyDomain</code> permet de spécifier le domaine + par défaut auquel le serveur mandataire apache appartient. Si le + serveur reçoit une requête pour un hôte sans nom de domaine, il va + générer une réponse de redirection vers le même hôte suffixé par le + <var>Domaine</var> spécifié.</p> + + <div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config">ProxyRemote "*" "http://firewall.example.com:81" +NoProxy ".example.com" "192.168.112.0/21" +ProxyDomain ".example.com"</pre> +</div> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="proxyerroroverride" id="proxyerroroverride">Directive</a> <a name="ProxyErrorOverride" id="ProxyErrorOverride">ProxyErrorOverride</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Outrepasser les pages d'erreur pour les contenus +mandatés</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyErrorOverride Off|On [<var>code</var> ...]</code></td></tr> +<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>ProxyErrorOverride Off</code></td></tr> +<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel, répertoire</td></tr> +<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>La liste de codes d'états a été ajoutée à partir de la version +2.4.47 du serveur HTTP Apache.</td></tr> +</table> + <p>Cette directive est utile pour les configurations de mandataires + inverses, lorsque vous souhaitez que les pages d'erreur envoyées + aux utilisateurs finaux présentent un aspect homogène. Elle permet + aussi l'inclusion de fichiers (via les SSI de + <code class="module"><a href="../mod/mod_include.html">mod_include</a></code>) pour obtenir le code d'erreur et agir + en conséquence (le comportement par défaut afficherait la page + d'erreur du serveur mandaté, alors que c'est le message d'erreur SSI + qui sera affiché si cette directive est à "on").</p> + + <p>Cette directive n'affecte pas le traitement des réponses + informatives (1xx), de type succès normal (2xx), ou de redirection + (3xx).</p> + + <p>Par défaut, <code class="directive">ProxyErrorOverride</code> affecte toutes les + réponses avec un code compris entre 400 inclus et 600 exclus.</p> + + <div class="example"><h3>Exemple de configuration par défaut</h3><pre class="prettyprint lang-config">ProxyErrorOverride On</pre> +</div> + + <p>Pour n'affecter que les réponses possèdant certains codes d'état + particuliers, vous pouvez spécifier ces derniers sous la forme d'une liste + en les séparant par des espaces. Les réponses dont le code d'état ne fait + pas partie de la liste ne seront pas affectées. Vous ne pouvez spécifier que + des codes d'erreurs, donc compris entre 400 inclus et 600 exclus.</p> + + <div class="example"><h3>Exemple de configuration personnalisée</h3><pre class="prettyprint lang-config">ProxyErrorOverride On 403 405 500 501 502 503 504</pre> +</div> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="proxyiobuffersize" id="proxyiobuffersize">Directive</a> <a name="ProxyIOBufferSize" id="ProxyIOBufferSize">ProxyIOBufferSize</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Détermine la taille du tampon interne de transfert de +données</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyIOBufferSize <var>octets</var></code></td></tr> +<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>ProxyIOBufferSize 8192</code></td></tr> +<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr> +<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +</table> + <p>La directive <code class="directive">ProxyIOBufferSize</code> permet + d'ajuster la taille du tampon interne utilisé comme bloc-note pour + les transferts de données entre entrée et sortie. La taille minimale + est de <code>512</code> octets.</p> + + <p>Dans la plupart des cas, il n'y a aucune raison de modifier cette + valeur.</p> + + <p>Si elle est utilisée avec AJP, cette directive permet de définir + la taille maximale du paquet AJP en octets. Si la valeur spécifiée + est supérieure à 65536, elle est corrigée et prend la valeur 65536. + Si vous ne conservez pas + la valeur par défaut, vous devez aussi modifier l'attribut + <code>packetSize</code> de votre connecteur AJP du côté de Tomcat ! + L'attribut <code>packetSize</code> n'est disponible que dans Tomcat + <code>5.5.20+</code> et <code>6.0.2+</code>.</p> + <p>Il n'est normalement pas nécessaire de modifier la taille + maximale du paquet. Des problèmes ont cependant été rapportés avec + la valeur par défaut lors de l'envoi de certificats ou de chaînes de + certificats.</p> + + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="proxymatch" id="proxymatch">Directive</a> <a name="ProxyMatch" id="ProxyMatch"><ProxyMatch></a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Conteneur de directives s'appliquant à des ressources +mandatées correspondant à une expression rationnelle</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code><ProxyMatch <var>regex</var>> ...</ProxyMatch></code></td></tr> +<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr> +<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +</table> + <p>La directive <code class="directive"><ProxyMatch></code> est + identique à la directive <code class="directive"><a href="#proxy"><Proxy></a></code>, à l'exception qu'elle définit + les URLs auxquelles elle s'applique en utilisant une <a class="glossarylink" href="../glossary.html#regex" title="voir glossaire">expression rationnelle</a>.</p> + + <p>A partir de la version 2.4.8, les groupes nommés et les + références arrières sont extraits et enregistrés dans + l'environnement avec leur nom en majuscules et préfixé par "MATCH_". Ceci permet + de référencer des URLs dans des <a href="../expr.html">expressions</a> + ou au sein de modules comme <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>. Pour + éviter toute confusion, les références arrières numérotées (non + nommées) sont ignorées. Vous devez utiliser à la place des groupes + nommés.</p> + +<pre class="prettyprint lang-config"><ProxyMatch "^http://(?<sitename>[^/]+)"> + Require ldap-group cn=%{env:MATCH_SITENAME},ou=combined,o=Example +</ProxyMatch></pre> + + +<h3>Voir aussi</h3> +<ul> +<li><code class="directive"><a href="#proxy"><Proxy></a></code></li> +</ul> +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="proxymaxforwards" id="proxymaxforwards">Directive</a> <a name="ProxyMaxForwards" id="ProxyMaxForwards">ProxyMaxForwards</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Nombre maximum de mandataires à travers lesquelles une +requête peut être redirigée</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyMaxForwards <var>nombre</var></code></td></tr> +<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>ProxyMaxForwards -1</code></td></tr> +<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr> +<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Comportement par défaut +modifié dans 2.2.7</td></tr> +</table> + <p>La directive <code class="directive">ProxyMaxForwards</code> permet de + spécifier le nombre maximum de mandataires à travers lesquels une + requête peut passer dans le cas où la la requête ne contient pas + d'en-tête <code>Max-Forwards</code>. Ceci permet de se prémunir + contre les boucles infinies de mandataires ou contre les attaques de + type déni de service.</p> + + <div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config">ProxyMaxForwards 15</pre> +</div> + + <p>Notez que la définition de la directive + <code class="directive">ProxyMaxForwards</code> constitue une violation du + protocole HTTP/1.1 (RFC2616), qui interdit à un mandataire de + définir <code>Max-Forwards</code> si le client ne l'a pas fait + lui-même. Les versions précédentes d'Apache httpd la définissaient + systématiquement. Une valeur négative de + <code class="directive">ProxyMaxForwards</code>, y compris la valeur par + défaut -1, implique un comportement compatible avec le protocole, + mais vous expose aux bouclages infinis.</p> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="proxypass" id="proxypass">Directive</a> <a name="ProxyPass" id="ProxyPass">ProxyPass</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Référencer des serveurs distants depuis +l'espace d'URLs du serveur local</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyPass [<var>chemin</var>] !|<var>url</var> [<var>clé=valeur</var> + <var>[clé=valeur</var> ...]] [nocanon] [interpolate] [noquery]</code></td></tr> +<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel, répertoire</td></tr> +<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Les sockets de style Unix (Unix Domain Socket - UDS) +sont supportés à partir de la version 2.4.7 du serveur HTTP Apache</td></tr> +</table> + <p>Cette directive permet de référencer des serveurs distants depuis + l'espace d'URLs du serveur local. Le serveur + local n'agit pas en tant que mandataire au sens conventionnel, mais + plutôt comme miroir du serveur distant. Le serveur local est + souvent nommé <dfn>mandataire inverse</dfn> ou + <dfn>passerelle</dfn>. L'argument <var>chemin</var> est le nom d'un + chemin virtuel local ; <var>url</var> est une URL partielle pour le + serveur distant et ne doit pas contenir de chaîne d'arguments.</p> + + <div class="note">Il est fortement recommandé de revoir le concept de <a href="#workers">Worker</a> avant d'aller plus loin.</div> + + <div class="note">Cette directive n'est pas supportée au sein des sections <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code>, <code class="directive"><a href="../mod/core.html#if"><If></a></code> et <code class="directive"><a href="../mod/core.html#files"><Files></a></code>.</div> + + <div class="warning">En général, la directive <code class="directive"><a href="#proxyrequests">ProxyRequests</a></code> doit être définie à + <strong>off</strong> lorsqu'on utilise la directive + <code class="directive">ProxyPass</code>.</div> + + <p>Les sockets de style Unix sont supportés à partir de la version + 2.4.7 du serveur HTTP Apache ; pour utiliser cette fonctionnalité, + il suffit d'utiliser une URL cible préfixée par + <code>unix:/path/lis.sock|</code>. Par exemple, pour mandater HTTP + et cibler l'UDS /home/www.socket, vous devez utiliser + <code>unix:/home/www.socket|http://localhost/whatever/</code>.</p> + + <div class="note"><strong>Note :</strong>Le chemin associé à l'URL + <code>unix:</code> tient compte de la directive + <code class="directive">DefaultRuntimeDir</code>.</div> + + <p>Lorsque cette directive est utilisée dans une section <code class="directive"><a href="../mod/core.html#location"><Location></a></code>, le premier + argument est omis et le répertoire local est obtenu à partir de + l'argument de la directive <code class="directive"><a href="../mod/core.html#location"><Location></a></code>. Il en est de même à l'intérieur + d'une section <code class="directive"><a href="../mod/core.html#locationmatch"><LocationMatch></a></code>, mais le résultat ne sera + probablement pas celui attendu car ProxyPassReverse va interpréter + l'expression rationnelle littéralement comme un chemin ; si besoin + est dans ce cas, définissez la directive ProxyPassReverse en dehors + de la section, ou dans une section <code class="directive"><a href="../mod/core.html#location"><Location></a></code> séparée.</p> + + <p>Supposons que le serveur local a pour adresse + <code>http://example.com/</code> ; alors la ligne</p> + + <pre class="prettyprint lang-config"><Location "/mirror/foo/"> + ProxyPass "http://backend.example.com/" +</Location></pre> + + + <p>va convertir en interne toute requête pour + <code>http://example.com/mirror/foo/bar</code> en une requête + mandatée pour <code>http://backend.example.com/bar</code>.</p> + + <p>Si vous avez besoin d'un configuration de mandataire inverse plus + souple, reportez-vous à la documentaion de la directive <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> et son drapeau + <code>[P]</code>.</p> + + <p>La syntaxe alternative suivante est valide, bien qu'elle puisse + induire une dégradation des performances lorsqu'elle est + présente en très grand nombre. Elle possède l'avantage de + permettre un contrôle dynamique via l'interface <a href="mod_proxy_balancer.html#balancer_manager">Balancer Manager</a> :</p> + + <pre class="prettyprint lang-config">ProxyPass "/mirror/foo/" "http://backend.example.com/"</pre> + + + <div class="warning"> + <p>Si le premier argument se termine par un slash + <strong>/</strong>, il doit en être de même pour le second argument + et vice versa. Dans le cas contraire, il risque de manquer des + slashes nécessaires dans la requête résultante vers le serveur + d'arrière-plan et les résulats ne seront pas ceux attendus. + </p> + </div> + + <p>Le drapeau <code>!</code> permet de soustraire un sous-répertoire + du mandat inverse, comme dans l'exemple suivant :</p> + + <pre class="prettyprint lang-config"><Location "/mirror/foo/"> + ProxyPass "http://backend.example.com/" +</Location> +<Location "/mirror/foo/i"> + ProxyPass "!" +</Location></pre> + + + <pre class="prettyprint lang-config">ProxyPass "/mirror/foo/i" "!" +ProxyPass "/mirror/foo" "http://backend.example.com"</pre> + + + <p>va mandater toutes les requêtes pour <code>/mirror/foo</code> + vers <code>backend.example.com</code>, <em>sauf</em> les requêtes + pour <code>/mirror/foo/i</code>.</p> + + <p>Mélanger plusieurs configurations ProxyPass dans différents contextes ne + fonctionne pas :</p> + <pre class="prettyprint lang-config">ProxyPass "/mirror/foo/i" "!" +<Location "/mirror/foo/"> + ProxyPass "http://backend.example.com/" +</Location></pre> + + <p>Dans ce cas, une requête pour <code>/mirror/foo/i</code> sera tout de + même mandatée car c'est la directive <code class="directive">ProxyPass</code> de la + section Location qui sera évaluée en premier. Le fait que la directive + <code class="directive">ProxyPass</code> supporte les deux contextes serveur + principal et répertoire ne signifie pas que sa portée et sa position dans le + fichier de configuration va garantir une quelconque priorité et/ou + chronologie de prise en compte.</p> + + <div class="warning"><h3>Ordre de classement des directives ProxyPass</h3> + <p>Les directives <code class="directive"><a href="#proxypass">ProxyPass</a></code> et <code class="directive"><a href="#proxypassmatch">ProxyPassMatch</a></code> sont évaluées dans + l'ordre de leur apparition dans le fichier de configuration. La + première règle qui correspond s'applique. Vous devez donc en + général classer les règles <code class="directive"><a href="#proxypass">ProxyPass</a></code> qui entrent en conflit de + l'URL la plus longue à la plus courte. Dans le cas contraire, les + règles situées après une règle dont l'URL correspond au début de + leur propre URL seront ignorées. Notez que tout ceci est en + relation avec le partage de workers.</p> + + </div> + <div class="warning"><h3>Chronologie de prise en compte des directives + ProxyPass au sein des sections Locations</h3> + <p>On ne peut placer + qu'une seule directive <code class="directive"><a href="#proxypass">ProxyPass</a></code> dans une section + <code class="directive"><a href="../mod/core.html#location">Location</a></code>, et c'est la section + la plus spécifique qui l'emportera.</p> + </div> + <div class="warning"><h3>Exclusions et variable d'environnement no-proxy</h3> + <p>Les exclusions doivent se situer <em>avant</em> + les directives <code class="directive">ProxyPass</code> générales. A partir de la + version 2.4.26 du serveur HTTP Apache, la variable + d'environnement "no-proxy" est une alternative aux exclusions et constitue + le seul moyen de configurer une exclusion pour une directive + <code class="directive">ProxyPass</code> dans le contexte d'une section <code class="directive"><a href="../mod/core.html#location">Location</a></code>. Cette variable doit être définie via + la directive <code class="directive"><a href="../mod/mod_setenvif.html#setenvif">SetEnvIf</a></code> car la + directive <code class="directive"><a href="../mod/mod_env.html#setenv">SetEnv</a></code> n'est pas évaluée + assez tôt.</p> + + </div> + + <p><strong>ProxyPass <code>clé=valeur</code> Paramètres</strong></p> + + <p>Depuis la version 2.1 du serveur HTTP Apache, mod_proxy supporte + les groupements de connexions vers un serveur d'arrière-plan. Les + connexions créées à la demande peuvent être enregistrées dans un + groupement pour une utilisation ultérieure. La taille du groupe + ainsi que d'autres caractéristiques peuvent être définies via la + directive <code class="directive">ProxyPass</code> au moyen de paramètres + <code>clé=valeur</code> dont la description fait l'objet des + tableaux ci-dessous.</p> + + <div class="warning"><h3>Nombre maximum de connexions vers + l'arrière-plan</h3> + <p>Par défaut, mod_proxy permet et met en réserve le + nombre maximum de connexions pouvant être utilisées simultanément par le + processus enfant concerné du serveur web. Le paramètre <code>max</code> + permet de réduire cette valeur par défaut. Le jeu de connexions est maintenu + au niveau de chaque processus enfant du serveur web, <code>max</code> et les + autres réglages n'étant pas coordonnés entre ces différents processus, sauf + bien entendu lorsqu'un seul processus enfant n'est autorisé par la + configuration ou le MPM utilisé.</p> </div> + + <p>Le paramètre <code>ttl</code>, + quant à lui, permet de définir une durée de vie optionnelle ; les + connexions qui n'ont pas été utilisées pendant au moins + <code>ttl</code> secondes seront fermées. <code>ttl</code> permet + aussi d'empêcher l'utilisation d'une connexion susceptible d'être + fermée suite à une fin de vie de connexion persistante sur le + serveur d'arrière-plan.</p> + + <div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config">ProxyPass "/example" "http://backend.example.com" max=20 ttl=120 retry=300</pre> +</div> + + <table class="bordered"><tr><th>Paramètres de worker (directive BalancerMember)</th></tr></table> + <table> + <tr><th>Paramètre</th> + <th>Défaut</th> + <th>Description</th></tr> + <tr><td>min</td> + <td>0</td> + <td>Nombre minimum d'entrées dans le pool de connexions, + distinct du nombre de connexions effectif. La valeur par défaut + ne doit être modifiée que dans des circonstances particulières + où la mémoire associée aux connexions avec le serveur + d'arrière-plan doit être préallouée ou réservée dans le tas.</td></tr> + <tr><td>max</td> + <td>1...n</td> + <td>Nombre maximum de connexions autorisées vers le serveur + d'arrière-plan. La valeur par défaut correspond au nombre de + threads par processus pour le MPM (Module Multi Processus) + actif. La valeur sera toujours 1 pour le MPM Prefork, alors + qu'elle dépendra de la définition de la directive + <code class="directive">ThreadsPerChild</code> pour les autres MPMs.</td></tr> + <tr><td>smax</td> + <td>max</td> + <td>Les entrées du pool de connexions conservées au delà de + cette limite sont libérées au cours de certaines opérations si + elles n'ont pas été utilisées au cours de leur durée de vie, + définie par le paramètre <code>ttl</code>. Si l'entrée du pool + de connexions est associée à une connexion, cette dernière sera + fermée. La valeur par défaut ne doit être modifiée que dans des + circonstances particulières où les entrées du pool de connexions + et toutes connexions associées qui ont dépassé leur durée de vie + doivent être libérées ou fermées de manière plus autoritaire.</td></tr> + <tr><td>acquire</td> + <td>-</td> + <td>Cette clé permet de définir le délai maximum d'attente pour + une connexion libre dans le jeu de connexions, en millisecondes. + S'il n'y a pas de connexion libre dans le jeu, Apache httpd renverra + l'état <code>SERVER_BUSY</code> au client. + </td></tr> + <tr><td>connectiontimeout</td> + <td>timeout</td> + <td>Délai d'attente d'une connexion en secondes. + La durée en secondes pendant laquelle Apache httpd va attendre pour + l'établissement d'une connexion vers le serveur d'arrière-plan. + Le délai peut être spécifié en millisecondes en ajoutant le + suffixe ms. + </td></tr> + <tr><td>disablereuse</td> + <td>Off</td> + <td>Vous pouvez utiliser cette clé pour forcer mod_proxy à + fermer immédiatement une connexion vers le serveur + d'arrière-plan après utilisation, et ainsi désactiver le jeu de + connexions permanentes vers ce serveur. Ceci peut s'avérer utile + dans des situations où un pare-feu situé entre Apache httpd et le + serveur d'arrière-plan (quelque soit le protocole) interrompt + des connexions de manière silencieuse, ou lorsque le serveur + d'arrière-plan lui-même est accessible par rotation de DNS + (round-robin DNS). Lorsque la réutilisation des connexions est activée, + chaque domaine d'arrière-plan n'est résolu (via une requête DNS) qu'une + seule fois par chaque processus enfant et mis en cache pour toutes les + connexions ultérieures jusqu'au recyclage du processus concerné. + Pour désactiver la réutilisation du jeu de + connexions, définissez cette clé à <code>On</code>. + </td></tr> + <tr><td>enablereuse</td> + <td>On</td> + <td>Ce paramètre est utilisé par les gestionnaires de protocole pour + lesquels la réutilisation des connexions est optionnelle (comme + <code class="module"><a href="../mod/mod_proxy_fcgi.html">mod_proxy_fcgi</a></code>). C'est le contraire du + paramètre 'disablereuse' ci-dessus, et il est supporté par les + versions 2.4.11 et supérieures du serveur HTTP Apache. + </td></tr> + <tr><td>flushpackets</td> + <td>off</td> + <td>Permet de définir si le module mandataire doit vider + automatiquement le tampon de sortie après chaque tronçon de + données. 'off' signifie que le tampon sera vidé si + nécessaire ; + 'on' signifie que le tampon sera vidé après chaque envoi d'un + tronçon de données, et 'auto' que le tampon sera vidé après un + délai de 'flushwait' millisecondes si aucune entrée n'est reçue. + Actuellement, cette clé n'est supportée que par mod_proxy_ajp et + mod_proxy_fcgi. + </td></tr> + <tr><td>flushwait</td> + <td>10</td> + <td>Le délai d'attente pour une entrée additionnelle, en + millisecondes, avant le vidage du tampon en sortie dans le cas + où 'flushpackets' est à 'auto'. + </td></tr> + <tr><td>iobuffersize</td> + <td>8192</td> + <td>Permet de définir la taille du tampon d'entrées/sorties du + bloc-notes interne. Cette clé vous permet d'outrepasser la + directive <code class="directive">ProxyIOBufferSize</code> pour un + serveur cible spécifique. La valeur doit être au minimum 512 ou définie + à 0 pour la valeur par défaut du système de 8192. + </td></tr> + <tr><td>responsefieldsize</td> + <td>8192</td> + <td>Contrôle la taille du tampon pour le champ de la réponse mandatée. + Cette taille doit être au moins égale à la taille attendue du plus grand + en-tête d'une réponse mandatée. Une valeur de 0 implique l'utilisation + de la valeur par défaut du système, à savoir 8192 octets.<br /> + Disponible à partir de la version 2.4.34 du serveur HTTP Apache. + </td></tr> + <tr><td>keepalive</td> + <td>Off</td> + <td><p>Cette clé doit être utilisée lorsque vous avez un pare-feu + entre Apache httpd et le serveur d'arrière-plan, et si ce dernier tend + à interrompre les connexions inactives. Cette clé va faire en + sorte que le système d'exploitation envoie des messages + <code>KEEP_ALIVE</code> sur chacune des connexions inactives et + ainsi éviter la fermeture de la connexion par le pare-feu. + Pour conserver les connexions persistantes, definissez cette + propriété à <code>On</code>.</p> + <p>La fréquence de vérification des connexions TCP persistantes + initiale et subséquentes dépend de la configuration globale de l'OS, + et peut atteindre 2 heures. Pour être utile, la fréquence configurée + dans l'OS doit être inférieure au seuil utilisé par le pare-feu.</p> + + </td></tr> + <tr><td>lbset</td> + <td>0</td> + <td>Définit le groupe de répartition de charge dont le serveur cible + est membre. Le répartiteur de charge va essayer tous les membres + d'un groupe de répartition de charge de numéro inférieur avant + d'essayer ceux dont le groupe possède un numéro supérieur. + </td></tr> + <tr><td>ping</td> + <td>0</td> + <td>Avec la clé Ping, le serveur web va "tester" la connexion + vers le serveur d'arrière-plan avant de transmettre la requête. + Avec AJP, <code class="module"><a href="../mod/mod_proxy_ajp.html">mod_proxy_ajp</a></code> envoie une requête + <code>CPING</code> sur la connexion ajp13 (implémenté sur Tomcat + 3.3.2+, 4.1.28+ et 5.0.13+). Avec HTTP, + <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code> envoie <code>100-Continue</code> + au serveur d'arrière-plan (seulement avecHTTP/1.1 - pour les + serveurs d'arrière-plan non HTTP/1.1, cette clé ne produit + aucun effet). Dans les deux cas, ce paramètre correspond au + délai en secondes pour l'attente de la réponse. Cette + fonctionnalité a été ajoutée pour éviter les problèmes avec les + serveurs d'arrière-plan bloqués ou surchargés. + + Le trafic + réseau peut s'en trouver augmenté en fonctionnement normal, ce + qui peut poser problème, mais peut s'en trouver diminué dans les + cas où les noeuds de cluster sont arrêtés ou + surchargés. Le délai peut + aussi être défini en millisecondes en ajoutant le suffixe + ms. + </td></tr> + <tr><td>receivebuffersize</td> + <td>0</td> + <td>Définit la taille du tampon réseau explicite (TCP/IP) pour + les connexions mandatées. Cette clé vous permet d'outrepasser la + directive <code class="directive">ProxyReceiveBufferSize</code> pour un + serveur cible spécifique. Sa valeur doit être au minimum 512 ou définie + à 0 pour la valeur par défaut du système. + </td></tr> + <tr><td>redirect</td> + <td>-</td> + <td>Route pour la redirection du serveur cible. Cette valeur est en + général définie dynamiquement pour permettre une suppression + sécurisée du noeud du cluster. Si cette clé est définie, toutes + les requêtes sans identifiant de session seront redirigées vers + le membre de groupe de répartition de charge dont la route + correspond à la valeur de la clé. + </td></tr> + <tr><td>retry</td> + <td>60</td> + <td>Délai entre deux essais du serveur cible du jeu de connexions en + secondes. Si le serveur cible du jeu de connexions vers le serveur + d'arrière-plan est dans un état d'erreur, Apache httpd ne redirigera + pas de requête vers ce serveur avant l'expiration du délai + spécifié. Ceci permet d'arrêter le serveur d'arrière-plan pour + maintenance, et de le remettre en ligne plus tard. Une valeur de + 0 implique de toujours essayer les serveurs cibles dans un état d'erreur + sans délai. + </td></tr> + <tr><td>route</td> + <td>-</td> + <td>La route du serveur cible lorsqu'il est utilisé au sein d'un + répartiteur de charge. La route est une valeur ajoutée à + l'identifiant de session. + </td></tr> + <tr><td><a name="status_table">status</a></td> + <td>-</td> + <td>Valeur constituée d'une simple lettre et définissant l'état + initial de ce serveur cible. + <table> + <tr><td>D: le serveur cible est désactivé et n'accepte aucune requête.</td></tr> + <tr><td>S: le serveur cible est arrêté.</td></tr> + <tr><td>I: le serveur cible est en mode "erreurs ignorées", + et sera toujours considéré comme disponible.</td></tr> + <tr><td>R: Le serveur cible sert de remplaçant à + chaud. Lorsqu'un serveur cible avec un lbset donné est inutilisable + (maintenance, arrêt, en erreur, etc...), un serveur de remplacement à + chaud libre de même lbset sera utilisé à sa place. Les remplaçants à + chaud permettent de s'assurer qu'un nombre déterminé de serveurs cibles + sera toujours disponible pour un répartiteur de charge.</td></tr> + <tr><td>H: le serveur cible est en mode d'attente et ne sera + utilisé que si aucun autre serveur ou remplaçant à chaud n'est + disponible dans le jeu de serveurs cibles.</td></tr> + <tr><td>E: le serveur cible est en erreur.</td></tr> + <tr><td>N: le serveur cible est en mode vidage, n'acceptera que + les sessions persistantes qui lui appartiennent, et refusera + toutes les autres requêtes.</td></tr> + </table> + Une valeur d'état peut être définie (ce qui + correspond au comportement par défaut) en préfixant la valeur + par '+', ou annulée en préfixant la valeur par '-'. Ainsi, la + valeur 'S-E' définit l'état de ce serveur cible à "arrêté" et supprime + le drapeau "en-erreur". + </td></tr> + <tr><td>timeout</td> + <td><code class="directive"><a href="#proxytimeout">ProxyTimeout</a></code></td> + <td>Délai d'attente de la connexion en secondes. Le nombre de + secondes pendant lesquelles Apache httpd attend l'envoi de + données vers le serveur d'arrière-plan. + </td></tr> + <tr><td>ttl</td> + <td>-</td> + <td>Durée de vie des connexions inactives et des entrées du pool + de connexions associées en secondes. Une fois cette + limite atteinte, une connexion ne sera pas réutilisée ; elle + sera fermée après un délai variable. + </td></tr> + <tr><td>flusher</td> + <td>flush</td> + <td><p>Nom du fournisseur utilisé par <code class="module"><a href="../mod/mod_proxy_fdpass.html">mod_proxy_fdpass</a></code>. + Voir la documentation de ce module pour plus de détails.</p> + </td></tr> + <tr><td>secret</td> + <td>-</td> + <td>Le mot de passe utilisé par <code class="module"><a href="../mod/mod_proxy_ajp.html">mod_proxy_ajp</a></code>. Il doit + identique au mot de passe configuré sur le côté serveur de la connexion + AJP.<br /> + Disponible à partir de la version 2.4.42 du serveur HTTP Apache. + </td></tr> + <tr><td><a id="upgrade" name="upgrade">upgrade</a></td> + <td>-</td> + <td><p>Protocole pris en charge par <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code> ou + <code class="module"><a href="../mod/mod_proxy_wstunnel.html">mod_proxy_wstunnel</a></code> pour le mécanisme de promotion de + protocole HTTP lors d'une négociation du client/navigateur HTTP (en + accord avec <a href="https://www.ietf.org/rfc/rfc9110.html#name-upgrade">RFC 9110 - + Upgrade</a>). Voir la note <a href="#protoupgrade">Promotion de + protocole</a> ci-dessous</p> + </td></tr> + <tr><td>mapping</td> + <td>-</td> + <td><p>Type de mappage entre le <var>chemin</var> et l'<var>url</var>. + Détermine la normalisation et/ou le (non-)décodage que + <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> appliquera au <var>chemin de l'uri</var> + demandé avant de rechercher une correspondance avec le <var>chemin</var>. + Si un mappage correspond, il est appliqué au <var>chemin de l'uri</var> + de façon à ce que tous les contextes de répertoire qui utilisent un + chemin (comme <code><Location></code>) fassent l'objet d'une + recherche de correspondance en utilisant le même mappage.</p> + <p><code>mapping=encoded</code> empêche le décodage des caractères % + contenus dans le <var>chemin de l'uri</var> de façon à ce que l'on + puisse par exemple utiliser des configurations telles que :</p> + <pre class="prettyprint lang-config">ProxyPass "/special%3Fsegment" "https://example.com/special%3Fsegment" mapping=encoded</pre> + + <pre class="prettyprint lang-config"><Location "/special%3Fsegment"> + Require ip 172.17.2.0/24 +</Location></pre> + + <p><code>mapping=servlet</code> se réfère à la normalisation définie par + la spécification de la Servlet qui sera par exemple appliquée par Apache + Tomcat pour les conteneurs de servlet (en particulier, les paramètres du + chemin sont ignorés pour le mappage). Un <var>chemin d'uri</var> comme + <code>/some;foo/path</code> sera alors mappé comme + <code>/some/path</code> et correspondra donc à tout ce qui suit sans + tenir compte des paramètres du chemin demandé :</p> + <pre class="prettyprint lang-config">ProxyPass "/some/path" "https://servlet.example.com/some/path" mapping=servlet</pre> + + <pre class="prettyprint lang-config"><Location "/some/path"> + Require valid-user +</Location></pre> + + <div class="note"><h3>Note</h3> + <p>Il est recommandé d'utiliser le même mappage côté Apache httpd + que celui utilisé côté arrière-plan. Par exemple, lors de la + configuration des autorisations dans les sections + <code><Location></code> pour des chemins mappés par + <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> comme conteneurs de servlet (comme les + applications s'exécutant sous Apache Tomcat), on doit utiliser la + définition <code>mapping=servlet</code> pour éviter que les + paramètres du chemin et similaires n'interfèrent avec les + autorisations qui doivent être définies par Apache httpd.</p> + </div> + </td></tr> + + </table> + + <p>Si l'URL de la directive Proxy débute par + <code>balancer://</code> (par exemple: + <code>balancer://cluster</code>, toute information relative au + chemin est ignorée), alors un serveur cible virtuel ne communiquant pas + réellement avec le serveur d'arrière-plan sera créé. Celui-ci sera + en fait responsable de la gestion de plusieurs serveurs cibles "réels". Dans + ce cas, un jeu de paramètres particuliers s'applique à ce serveur cible + virtuel. Voir <code class="module"><a href="../mod/mod_proxy_balancer.html">mod_proxy_balancer</a></code> pour plus + d'informations à propos du fonctionnement du répartiteur de + charge. + </p> + <table class="bordered"><tr><th>Paramètres du répartiteur</th></tr></table> + <table> + <tr><th>Paramètre</th> + <th>Défaut</th> + <th>Description</th></tr> + <tr><td>lbmethod</td> + <td>byrequests</td> + <td>Méthode de répartition de charge utilisée. Permet de + sélectionner la méthode de planification de la répartition de + charge à utiliser. La valeur est soit <code>byrequests</code>, + pour effectuer un décompte de requêtes pondérées, soit + <code>bytraffic</code>, pour effectuer une répartition en + fonction du décompte des octets transmis, soit + <code>bybusyness</code>, pour effectuer une répartition en + fonction des requêtes en attente. La valeur par défaut est + <code>byrequests</code>. + </td></tr> + <tr><td>maxattempts</td> + <td>1 de moins que le nombre de workers, ou 1 avec un seul + worker</td> + <td>Nombre maximum d'échecs avant abandon. + </td></tr> + <tr><td>nofailover</td> + <td>Off</td> + <td>Si ce paramètre est défini à <code>On</code>, la session va + s'interrompre si le serveur cible est dans un état d'erreur ou + désactivé. Définissez ce paramètre à <code>On</code> si le serveur + d'arrière-plan ne supporte pas la réplication de session. + </td></tr> + <tr><td>stickysession</td> + <td>-</td> + <td>Nom de session persistant du répartiteur. La valeur est + généralement du style <code>JSESSIONID</code> ou + <code>PHPSESSIONID</code>, et dépend du serveur d'application + d'arrière-plan qui supporte les sessions. Si le serveur + d'application d'arrière-plan utilise un nom différent pour + les cookies et les identifiants codés d'URL (comme les + conteneurs de servlet), séparez-les par le caractère '|'. La + première partie contient le cookie et la seconde le chemin.<br /> + Disponible depuis la version 2.4.4 du serveur HTTP Apache. + </td></tr> + <tr><td>stickysessionsep</td> + <td>"."</td> + <td>Définit le caractère de séparation dans le cookie de + session. Certains serveurs d'application d'arrière-plan + n'utilisent pas le caractère '.' comme séparateur. Par exemple + le serveur Oracle Weblogic utilise le caractère '!'. Cette + option permet d'attribuer au caractère de séparation la valeur + appropriée. Si elle est définie à 'Off', aucun caractère de + séparation n'est utilisé. + </td></tr> + <tr><td>scolonpathdelim</td> + <td>Off</td> + <td>Si ce paramètre est défini à <code>On</code>, le caractère + ';' sera utilisé comme séparateur de chemin de session + persistante additionnel. Ceci permet principalement de simuler + le comportement de mod_jk lorsqu'on utilise des chemins du style + <code>JSESSIONID=6736bcf34;foo=aabfa</code>. + </td></tr> + <tr><td>timeout</td> + <td>0</td> + <td>Délai du répartiteur en secondes. Si ce paramètre est + défini, sa valeur correspond à la durée maximale d'attente pour + un serveur cible libre. Le comportement par défaut est de ne pas + attendre. + </td></tr> + <tr><td>failonstatus</td> + <td>-</td> + <td>Une liste de codes d'état HTTP séparés par des virgules. Si + ce paramètre est présent, le worker se mettra en erreur si le + serveur d'arrière-plan renvoie un des codes d'état spécifiés + dans la liste. La récupération du worker s'effectue comme dans + le cas des autres erreurs de worker. + </td></tr> + <tr><td>failontimeout</td> + <td>Off</td> + <td>Si ce paramètre est défini à "On", un délai d'attente + dépassé en entrée/sortie après envoi d'une requête au serveur + d'arrière-plan va mettre le processus en état d'erreur. La + sortie de cet état d'erreur se passe de la même façon que pour + les autres erreurs.<br /> + Disponible à partir de la version 2.4.5 du serveur HTTP Apache. + </td></tr> + <tr><td>nonce</td> + <td><auto></td> + <td>Le nombre à usage unique de protection utilisé dans la page + de l'application <code>balancer-manager</code>. Par défaut, la + protection de la page est assurée par un nombre à usage unique + automatique à base d'UUID. Si une valeur est précisée, elle sera + utilisée comme nombre à usage unique. La valeur + <code>None</code> désactive la vérification du nombre à usage + unique. + <div class="note"><h3>Note</h3> + <p>En plus du nombre à usage unique, la page de l'application + <code>balancer-manager</code> peut être protégée par une ACL.</p> + </div> + </td></tr> + <tr><td>growth</td> + <td>0</td> + <td>Nombre de membres supplémentaires que l'on peut ajouter à ce + répartiteur en plus de ceux définis au niveau de la + configuration. + </td></tr> + <tr><td>forcerecovery</td> + <td>On</td> + <td>Force la relance immédiate de tous les membres sans tenir + compte de leur paramètre retry dans le cas où ils sont tous en + état d'erreur. Il peut cependant arriver qu'un membre déjà + surchargé entre dans une situation critique si la relance de + tous les membres est forcée sans tenir compte du paramètre retry + de chaque membre. Dans ce cas, définissez ce paramètre à + <code>Off</code>.<br /> + Disponible depuis la version 2.4.2 du serveur HTTP Apache. + </td></tr> + + </table> + <p>Exemple de configuration d'un répartiteur de charge</p> + <pre class="prettyprint lang-config">ProxyPass "/special-area" "http://special.example.com" smax=5 max=10 +ProxyPass "/" "balancer://mycluster/" stickysession=JSESSIONID|jsessionid nofailover=On +<Proxy "balancer://mycluster"> + BalancerMember "ajp://1.2.3.4:8009" + BalancerMember "ajp://1.2.3.5:8009" loadfactor=20 + # Less powerful server, don't send as many requests there, + BalancerMember "ajp://1.2.3.6:8009" loadfactor=5 +</Proxy></pre> + + + <p>La définition de remplaçants à chaud permet de s'assurer qu'un nombre + déterminé de serveurs sera toujours disponible dans le jeu de serveurs + cibles :</p> + <pre class="prettyprint lang-config">ProxyPass "/" "balancer://sparecluster/" +<Proxy balancer://sparecluster> + BalancerMember ajp://1.2.3.4:8009 + BalancerMember ajp://1.2.3.5:8009 + # Les serveurs ci-dessous sont des remplaçants à chaud. Pour chaque serveur + # ci-dessus qui viendrait à être inutilisable (maintenance, arrêt, non + # contactable, en erreur, etc...), un de ces remplaçants à chaud prendra sa + # place. Deux serveurs seront toujours disponibles pour traiter une requête + # (à moins qu'un ou plusieurs remplaçant à chaud soit lui aussi + # indisponible). + BalancerMember ajp://1.2.3.6:8009 status=+R + BalancerMember ajp://1.2.3.7:8009 status=+R +</Proxy></pre> + + + <p>Configuration d'un serveur cible de réserve qui ne sera utilisé que si + aucun autre serveur cible ou remplaçant à chaud n'est disponible dans le jeu + de serveurs cibles :</p> + <pre class="prettyprint lang-config">ProxyPass "/" "balancer://hotcluster/" +<Proxy "balancer://hotcluster"> + BalancerMember "ajp://1.2.3.4:8009" loadfactor=1 + BalancerMember "ajp://1.2.3.5:8009" loadfactor=2.25 + # The server below is on hot standby + BalancerMember "ajp://1.2.3.6:8009" status=+H + ProxySet lbmethod=bytraffic +</Proxy></pre> + + + <p><strong>Mots-clés additionnels de ProxyPass</strong></p> + + <p>Normalement, mod_proxy va mettre sous leur forme canonique les + URLs traitées par ProxyPass. Mais ceci peut être incompatible avec + certains serveurs d'arrière-plan, et en particulier avec ceux qui + utilisent <var>PATH_INFO</var>. Le mot-clé optionnel + <var>nocanon</var> modifie ce comportement et permet de transmettre + le chemin d'URL sous sa forme brute au serveur d'arrière-plan. Notez + que ceci peut affecter la sécurité de votre serveur d'arrière-plan, + car la protection limitée contre les attaques à base d'URL que + fournit le mandataire est alors supprimée.</p> + + <p>Par défaut, mod_proxy inclut la chaîne de paramètres lors de la + génération de la variable d'environnement + <var>SCRIPT_FILENAME</var>. Le mot-clé optionnel <var>noquery</var> + (disponible à partir de la version 2.4.1) permet d'exclure cette + chaîne.</p> + + <p>Lorsque la directive ProxyPass est utilisée à l'intérieur d'une + section <code class="directive"><a href="../mod/core.html#location"><Location></a></code>, le premier argument est omis et le répertoire + local est obtenu à partir de la section <code class="directive"><a href="../mod/core.html#location"><Location></a></code>. Il en sera de même dans une + section <code class="directive"><a href="../mod/core.html#locationmatch"><LocationMatch></a></code> ; cependant, ProxyPass + n'interprète pas les expressions rationnelles, et il sera ici + nécessaire d'utiliser la directive + <code class="directive">ProxyPassMatch</code> à la place.</p> + + <p>Cette directive ne peut pas être placée dans une section + <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> ou + <code class="directive"><a href="../mod/core.html#files"><Files></a></code>.</p> + + <p>Si vous avez besoin d'un configuration de mandataire inverse plus + souple, reportez-vous à la documentaion de la directive <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> et son drapeau + <code>[P]</code>.</p> + + <p>Le mot-clé optionnel <code>interpolate</code>, en combinaison avec la directive + <code class="directive"><a href="#proxypassinterpolateenv">ProxyPassInterpolateEnv</a></code>, permet à ProxyPass + d'interpoler les variables d'environnement à l'aide de la syntaxe + <var>${VARNAME}</var>. Notez que de nombreuses variables + d'environnement standard dérivées de CGI n'existeront pas lorsque + l'interpolation se produit ; vous devrez alors encore avoir avoir + recours à <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> pour des règles + complexes. Notez aussi que l'interpolation n'est supportée dans + la partie protocole/hostname/port d'une URL que pour les variables qui sont + disponibles au moment où la directive est interprétée (comme pour la + directive <code class="directive"><a href="../mod/core.html#define">Define</a></code>). La détermination + dynamique de ces champs peut être effectuée à l'aide de + <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>, et l'exemple suivant décrit comment utiliser + <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> pour définir dynamiquement le protocole à http + ou https :</p> + + <pre class="prettyprint lang-config">RewriteEngine On + +RewriteCond "%{HTTPS}" =off +RewriteRule "". "-" [E=protocol:http] +RewriteCond "%{HTTPS}" =on +RewriteRule "." "-" [E=protocol:https] + +RewriteRule "^/mirror/foo/(.*)" "%{ENV:protocol}://backend.example.com/$1" [P] +ProxyPassReverse "/mirror/foo/" "http://backend.example.com/" +ProxyPassReverse "/mirror/foo/" "https://backend.example.com/"</pre> + + + <div class="note"><h3><a id="protoupgrade" name="protoupgrade">Promotion de + protocole</a></h3> + <p>Depuis la version 2.4.47 du serveur HTTP Apache, la promotion de + protocole (tunneling) peut être géré bout à bout par + <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code> en utilisant le paramètre <var><a href="#upgrade">upgrade</a></var>.</p> + <p>Bout à bout signifie que la requête de promotion de protocole en + provenance du client/navigateur est tout d'abord transmise par + <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code> au serveur origine et que le protocole de + la connexion ne sera modifié (et « tunnelisé » par + <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code>) que si le serveur origine accepte/initie + la promotion (réponse HTTP <code>101 Switching Protocols</code>). Si le + serveur origine renvoie une réponse différente, + <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code> continuera la transmission en utilisant + (et en forçant) le protocole HTTP habituel pour cette connexion.</p> + <p>Voir <a href="#wsupgrade">Promotion de protocole vers Websocket + (versions 2.4.47 et ultérieures)</a> pour un exemple de configuration qui + utilise<code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code>.</p> + <p>Avec les versions 2.4.46 et antérieures du serveur HTTP Apache (ou si + la directive <code class="directive"><a href="../mod/mod_proxy_wstunnel.html#proxywebsocketfallbacktoproxyhttp">ProxyWebsocketFallbackToProxyHttp</a></code> + des versions 2.4.48 et ultérieures désactive la prise en charge par + <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code>), voir la documentation de + <code class="module"><a href="../mod/mod_proxy_wstunnel.html">mod_proxy_wstunnel</a></code> pour la méthode permettant de mandater + le protocole WebSocket.</p> + </div> + + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="proxypassinherit" id="proxypassinherit">Directive</a> <a name="ProxyPassInherit" id="ProxyPassInherit">ProxyPassInherit</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Héritage des directives ProxyPass définies au niveau du +serveur principal</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyPassInherit On|Off</code></td></tr> +<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>ProxyPassInherit On</code></td></tr> +<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr> +<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible à partir de la version 2.4.5 du serveur +HTTP Apache.</td></tr> +</table> + <p>Cette directive permet à un serveur virtuel d'hériter des + directives <code class="directive"><a href="#proxypass">ProxyPass</a></code> définies + au niveau du serveur principal. Si vous utilisez la fonctionnalité de + modifications dynamiques du Balancer Manager, cette directive peut + causer des problèmes et des comportements inattendus et doit donc + être désactivée.</p> + <p>Les valeurs définies au niveau du serveur principal + constituent les valeurs par défaut pour tous les serveurs virtuels.</p> + <p>La désactivation de ProxyPassInherit désactive aussi la + directive <code class="directive"><a href="#balancerinherit">BalancerInherit</a></code>.</p> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="proxypassinterpolateenv" id="proxypassinterpolateenv">Directive</a> <a name="ProxyPassInterpolateEnv" id="ProxyPassInterpolateEnv">ProxyPassInterpolateEnv</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Active l'interpolation des variables d'environnement dans +les configurations de mandataires inverses</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyPassInterpolateEnv On|Off</code></td></tr> +<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>ProxyPassInterpolateEnv Off</code></td></tr> +<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel, répertoire</td></tr> +<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.2.9 d'Apache</td></tr> +</table> + <p>Cette directive, ainsi que l'argument <code>interpolate</code> des + directives <code class="directive">ProxyPass</code>, + <code class="directive">ProxyPassReverse</code>, + <code class="directive">ProxyPassReverseCookieDomain</code> et + <code class="directive">ProxyPassReverseCookiePath</code>, permet de + configurer dynamiquement un mandataire inverse à l'aide de + variables d'environnement, ces dernières pouvant être définies par un + autre module comme <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>. Elle affecte les + directives <code class="directive">ProxyPass</code>, + <code class="directive">ProxyPassReverse</code>, + <code class="directive">ProxyPassReverseCookieDomain</code>, et + <code class="directive">ProxyPassReverseCookiePath</code>, en leur indiquant + de remplacer la chaîne <code>${nom_var}</code> dans les directives + de configuration par la valeur de la variable d'environnement + <code>nom_var</code> (si l'option <code>interpolate</code> est + spécifiée).</p> + <p>La partie protocole/hostname/port de <code class="directive">ProxyPass</code> + peut contenir des variables, mais seulement celles qui sont accessibles au + moment où la directive est interprétée (similairement à la directive + <code class="directive"><a href="../mod/core.html#define">Define</a></code>). Pour tous les autres cas, + utilisez plutôt <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>.</p> + <div class="warning"><h3>Avertissement concernant les performances</h3> + <p>Laissez cette directive à off, à moins que vous n'en ayez réellemnt + besoin ! Par exemple, ajouter des variables à + <code class="directive">ProxyPass</code> peut entraîner l'utilisation des serveurs + d'arrière-plan de mod_proxy configurés par défaut, et ceux-ci ne permettent + pas un réglage fin comme la réutilisation des connexions, entre + autres...).</p> </div> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="proxypassmatch" id="proxypassmatch">Directive</a> <a name="ProxyPassMatch" id="ProxyPassMatch">ProxyPassMatch</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Fait correspondre des serveurs distants dans l'espace d'URL +du serveur local en utilisant des expressions rationnelles</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyPassMatch [<var>regex</var>] !|<var>url</var> +[<var>clé=valeur</var> + <var>[clé=valeur</var> ...]]</code></td></tr> +<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel, répertoire</td></tr> +<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +</table> + <p>Cette directive est identique à la directive <code class="directive"><a href="#proxypass">ProxyPass</a></code>, mais fait usage des + expressions rationnelles, au lieu d'une simple comparaison de + préfixes. L'expression rationnelle spécifiée est comparée à + l'<var>url</var>, et si elle correspond, le serveur va substituer + toute correspondance entre parenthèses dans la chaîne donnée et + l'utiliser comme nouvelle <var>url</var>.</p> + + <div class="note"><strong>Note : </strong>Cette directive ne peut pas être + utilisée dans un contexte de niveau répertoire.</div> + + <p>Supposons que le serveur local a pour adresse + <code>http://example.com/</code> ; alors</p> + + <pre class="prettyprint lang-config">ProxyPassMatch "^(/.*\.gif)$" "http://backend.example.com/$1"</pre> + + + <p>va provoquer la conversion interne de la requête locale + <code>http://example.com/foo/bar.gif</code> en une requête mandatée + pour <code>http://backend.example.com/foo/bar.gif</code>.</p> + + <div class="note"><h3>Note</h3> + <p>L'argument URL doit pouvoir être interprété en tant qu'URL + <em>avant</em> les substitutions d'expressions rationnelles (et + doit aussi l'être après). Ceci limite les correspondances que vous + pouvez utiliser. Par exemple, si l'on avait utilisé</p> + <pre class="prettyprint lang-config"> ProxyPassMatch "^(/.*\.gif)$" + "http://backend.example.com:8000$1"</pre> + + <p>dans l'exemple précédent, nous aurions provoqué une erreur de + syntaxe au démarrage du serveur. C'est une bogue (PR 46665 dans + ASF bugzilla), et il est possible de la contourner en reformulant + la correspondance :</p> + <pre class="prettyprint lang-config">ProxyPassMatch "^/(.*\.gif)$" "http://backend.example.com:8000/$1"</pre> + + </div> + + <p>Le drapeau <code>!</code> vous permet de ne pas mandater un + sous-répertoire donné.</p> + + <p>Dans une section <code class="directive"><a href="../mod/core.html#locationmatch"><LocationMatch></a></code>, le premier argument est + omis et l'expression rationnelle est obtenue à partir de la directive + <code class="directive"><a href="../mod/core.html#locationmatch"><LocationMatch></a></code>.</p> + + <p>Si vous avez besoin d'une configuration du mandataire inverse + plus flexible, voyez la directive <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> avec le drapeau + <code>[P]</code>.</p> + + <div class="note"> + <h3>Substitution par défaut</h3> + <p>Lorsque le paramètre URL n'utilise pas de références arrières + dans l'expression rationnelle, l'URL originale sera ajoutée au + paramètre URL. + </p> + </div> + + <div class="warning"> + <h3>Avertissement à propos de la sécurité</h3> + <p>Lors de la construction de l'URL cible de la règle, il convient + de prendre en compte l'impact en matière de sécurité qu'aura le + fait de permettre au client d'influencer le jeu d'URLs pour + lesquelles votre serveur agira en tant que mandataire. + Assurez-vous que la partie protocole://nom-serveur de l'URL soit + fixe, ou ne permette pas au client de l'influencer induement.</p> + </div> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="proxypassreverse" id="proxypassreverse">Directive</a> <a name="ProxyPassReverse" id="ProxyPassReverse">ProxyPassReverse</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Ajuste l'URL dans les en-têtes de la réponse HTTP envoyée +par un serveur mandaté en inverse</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyPassReverse [<var>chemin</var>] <var>url</var> +[interpolate]</code></td></tr> +<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel, répertoire</td></tr> +<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +</table> + <p>Cette directive permet de faire en sorte qu'Apache httpd ajuste l'URL + dans les en-têtes <code>Location</code>, + <code>Content-Location</code> et <code>URI</code> des réponses de + redirection HTTP. Ceci est essentiel lorsqu'Apache httpd est utilisé en + tant que mandataire inverse (ou passerelle), afin d'éviter de + court-circuiter le mandataire inverse suite aux redirections HTTP + sur le serveur d'arrière-plan qui restent derrière le mandataire + inverse.</p> + + <p>Seuls les en-têtes de réponse HTTP spécialement mentionnés + ci-dessus seront réécrits. Apache httpd ne réécrira ni les autres en-têtes + de réponse, ni par défaut les références d'URLs dans les pages HTML. Cela + signifie que dans le cas où un contenu mandaté contient des + références à des URLs absolues, elles court-circuiteront le + mandataire. Pour réécrire un contenu HTML afin qu'il corresponde au + mandataire, vous devez charger et activer le module + <code class="module"><a href="../mod/mod_proxy_html.html">mod_proxy_html</a></code>. + </p> + + <p><var>chemin</var> est le nom d'un chemin virtuel local. + <var>url</var> est une URL partielle pour le serveur distant. Ces + paramètres s'utilisent de la même façon qu'avec la + directive <code class="directive"><a href="#proxypass">ProxyPass</a></code>.</p> + + <p>Supposons par exemple que le serveur local a pour adresse + <code>http://example.com/</code> ; alors</p> + + <pre class="prettyprint lang-config">ProxyPass "/mirror/foo/" "http://backend.example.com/" +ProxyPassReverse "/mirror/foo/" "http://backend.example.com/" +ProxyPassReverseCookieDomain "backend.example.com" "public.example.com" +ProxyPassReverseCookiePath "/" "/mirror/foo/"</pre> + + + <p>ne va pas seulement provoquer la conversion interne d'une requête + locale pour <code>http://example.com/mirror/foo/bar</code> en une + requête mandatée pour <code>http://backend.example.com/bar</code> + (la fonctionnalité fournie par <code>ProxyPass</code>). Il va + aussi s'occuper des redirections que le serveur + <code>backend.example.com</code> envoie lorsqu'il redirige + <code>http://backend.example.com/bar</code> vers + <code>http://backend.example.com/quux</code>. Apache + httpd corrige ceci en <code>http://example.com/mirror/foo/quux</code> + avant de faire suivre la redirection HTTP au client. Notez que le + nom d'hôte utilisé pour construire l'URL est choisi en respectant la + définition de la directive <code class="directive"><a href="../mod/core.html#usecanonicalname">UseCanonicalName</a></code>.</p> + + <p>Notez que la directive <code class="directive">ProxyPassReverse</code> + peut aussi être utilisée en conjonction avec la + fonctionnalité de mandataire + (<code>RewriteRule ... [P]</code>) du module + <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code>, car elle ne dépend pas d'une directive + <code class="directive"><a href="#proxypass">ProxyPass</a></code> + correspondante.</p> + + <p>Le mot-clé optionnel <code>interpolate</code>, en combinaison avec la + directive <code class="directive"><a href="#proxypassinterpolateenv">ProxyPassInterpolateEnv</a></code>, + permet l'interpolation des variables d'environnement spécifiées en utilisant + le format <var>${VARNAME}</var> Notez que l'interpolation n'est pas + supportée dans la partie protocole d'une URL. </p> + + <p>Lorsque cette directive est utilisée dans une section <code class="directive"><a href="../mod/core.html#location"><Location></a></code>, le premier + argument est omis et le répertoire local est obtenu à partir de + l'argument de la directive <code class="directive"><a href="../mod/core.html#location"><Location></a></code>. Il en est de même à l'intérieur + d'une section <code class="directive"><a href="../mod/core.html#locationmatch"><LocationMatch></a></code>, mais le résultat ne sera + probablement pas celui attendu car ProxyPassReverse va interpréter + l'expression rationnelle littéralement comme un chemin ; si besoin + est dans ce cas, définissez la directive ProxyPassReverse en dehors + de la section, ou dans une section <code class="directive"><a href="../mod/core.html#location"><Location></a></code> séparée.</p> + + <p>Cette directive ne peut pas être placée dans une section + <code class="directive"><a href="../mod/core.html#directory"><Directory></a></code> ou + <code class="directive"><a href="../mod/core.html#files"><Files></a></code>.</p> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="proxypassreversecookiedomain" id="proxypassreversecookiedomain">Directive</a> <a name="ProxyPassReverseCookieDomain" id="ProxyPassReverseCookieDomain">ProxyPassReverseCookieDomain</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Ajuste la chaîne correspondant au domaine dans les en-têtes +Set-Cookie en provenance d'un serveur mandaté</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyPassReverseCookieDomain <var>domaine-interne</var> +<var>domaine-public</var> [interpolate]</code></td></tr> +<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel, répertoire</td></tr> +<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +</table> +<p>L'utilisation de cette directive est similaire à celle de la +directive <code class="directive"><a href="#proxypassreverse">ProxyPassReverse</a></code>, +mais au lieu de réécrire des en-têtes qui contiennent des URLs, elle +réécrit la chaîne correspondant au domaine dans les en-têtes +<code>Set-Cookie</code>.</p> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="proxypassreversecookiepath" id="proxypassreversecookiepath">Directive</a> <a name="ProxyPassReverseCookiePath" id="ProxyPassReverseCookiePath">ProxyPassReverseCookiePath</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Ajuste la chaîne correspondant au chemin dans les en-têtes +Set-Cookie en provenance d'un serveur mandaté</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyPassReverseCookiePath <var>chemin-interne</var> +<var>chemin-public</var> [interpolate]</code></td></tr> +<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel, répertoire</td></tr> +<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +</table> +<p> +Cette directive s'avère utile en conjonction avec la directive +<code class="directive"><a href="#proxypassreverse">ProxyPassReverse</a></code> dans les +situations où les chemins d'URL d'arrière-plan correspondent à des +chemins publics sur le mandataire inverse. Cette directive permet de +réécrire la chaîne <code>path</code> dans les en-têtes +<code>Set-Cookie</code>. Si le début du chemin du cookie correspond à +<var>chemin-interne</var>, le chemin du cookie sera remplacé par +<var>chemin-public</var>. +</p><p> +Dans l'exemple fourni avec la directive <code class="directive"><a href="#proxypassreverse">ProxyPassReverse</a></code>, la directive : +</p> + <pre class="prettyprint lang-config">ProxyPassReverseCookiePath "/" "/mirror/foo/"</pre> + +<p> +va réécrire un cookie possédant un chemin d'arrière-plan <code>/</code> +(ou <code>/example</code> ou en fait tout chemin) +en <code>/mirror/foo/</code>.. +</p> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="proxypreservehost" id="proxypreservehost">Directive</a> <a name="ProxyPreserveHost" id="ProxyPreserveHost">ProxyPreserveHost</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Utilise l'en-tête de requête entrante Host pour la requête +du mandataire</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyPreserveHost On|Off</code></td></tr> +<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>ProxyPreserveHost Off</code></td></tr> +<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel, répertoire</td></tr> +<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Utilisable +dans un contexte de répertoire depuis la version 2.3.3.</td></tr> +</table> + <p>Lorsqu'elle est activée, cette directive va transmettre l'en-tête + <code>Host:</code> de la requête entrante vers le serveur mandaté, au lieu + du nom d'hôte spécifié par la directive <code class="directive"><a href="#proxypass">ProxyPass</a></code>.</p> + + <p>Cette directive est habituellement définie à <code>Off</code>. + Elle est principalement utile dans les configurations particulières + comme l'hébergement virtuel mandaté en masse à base de nom, où + l'en-tête Host d'origine doit être évalué par le serveur + d'arrière-plan.</p> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="proxyreceivebuffersize" id="proxyreceivebuffersize">Directive</a> <a name="ProxyReceiveBufferSize" id="ProxyReceiveBufferSize">ProxyReceiveBufferSize</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Taille du tampon réseau pour les connexions mandatées HTTP +et FTP</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyReceiveBufferSize <var>octets</var></code></td></tr> +<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>ProxyReceiveBufferSize 0</code></td></tr> +<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr> +<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +</table> + <p>La directive <code class="directive">ProxyReceiveBufferSize</code> permet + de spécifier une taille de tampon réseau explicite (TCP/IP) pour les + connexions mandatées HTTP et FTP, afin d'améliorer le débit de + données. Elle doit être supérieure à <code>512</code> ou définie à + <code>0</code> pour indiquer que la taille de tampon par défaut du + système doit être utilisée.</p> + + <div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config">ProxyReceiveBufferSize 2048</pre> +</div> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="proxyremote" id="proxyremote">Directive</a> <a name="ProxyRemote" id="ProxyRemote">ProxyRemote</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Mandataire distant à utiliser pour traiter certaines +requêtes</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyRemote <var>comparaison</var> <var>serveur-distant</var></code></td></tr> +<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr> +<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +</table> + <p>Cette directive permet de définir des mandataires distants pour + ce mandataire. <var>comparaison</var> est soit le nom d'un protocole + que supporte le serveur distant, soit une URL partielle pour + laquelle le serveur distant devra être utilisé, soit <code>*</code> + pour indiquer que le serveur distant doit être utilisé pour toutes + les requêtes. <var>serveur-distant</var> est une URL partielle + correspondant au serveur distant. Syntaxe : </p> + + <div class="example"><p><code> + <dfn>serveur-distant</dfn> = + <var>protocole</var>://<var>nom-serveur</var>[:<var>port</var>] + </code></p></div> + + <p><var>protocole</var> est effectivement le protocole à utiliser + pour communiquer avec le serveur distant ; ce module ne supporte que + <code>http</code> et <code>https</code>. Lorsqu'on utilise + <code>https</code>, les requêtes sont redirigées par le mandataire + distant en utilisant la méthode HTTP CONNECT.</p> + + <div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config">ProxyRemote "http://goodguys.example.com/" "http://mirrorguys.example.com:8000" +ProxyRemote "*" "http://cleverproxy.localdomain" +ProxyRemote "ftp" "http://ftpproxy.mydomain:8080"</pre> +</div> + + <p>Dans la dernière ligne de l'exemple, le mandataire va faire + suivre les requêtes FTP, encapsulées dans une autre requête mandatée + HTTP, vers un autre mandataire capable de les traiter.</p> + + <p>Cette directive supporte aussi les configurations de mandataire + inverse ; un serveur web d'arrière-plan peut être intégré dans + l'espace d'URL d'un serveur virtuel, même si ce serveur est caché + par un autre mandataire direct.</p> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="proxyremotematch" id="proxyremotematch">Directive</a> <a name="ProxyRemoteMatch" id="ProxyRemoteMatch">ProxyRemoteMatch</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Le mandataire distant à utiliser pour traiter les requêtes +correspondant à une expression rationnelle</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyRemoteMatch <var>regex</var> <var>serveur-distant</var></code></td></tr> +<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr> +<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +</table> + <p>La directive <code class="directive">ProxyRemoteMatch</code> est + identique à la directive <code class="directive"><a href="#proxyremote">ProxyRemote</a></code>, à l'exception du + premier argument qui est une <a class="glossarylink" href="../glossary.html#regex" title="voir glossaire">expression + rationnelle</a> à mettre en correspondance avec l'URL de la + requête.</p> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="proxyrequests" id="proxyrequests">Directive</a> <a name="ProxyRequests" id="ProxyRequests">ProxyRequests</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Active la fonctionnalité (standard) de mandataire +direct</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyRequests On|Off</code></td></tr> +<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>ProxyRequests Off</code></td></tr> +<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr> +<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +</table> + <p>Cette directive permet d'activer/désactiver la fonctionnalité de + serveur mandataire direct d'Apache httpd. Définir ProxyRequests à + <code>Off</code> n'interdit pas l'utilisation de la directive + <code class="directive"><a href="#proxypass">ProxyPass</a></code>.</p> + + <p>Pour une configuration typique de mandataire inverse ou + passerelle, cette directive doit être définie à + <code>Off</code>.</p> + + <p>Afin d'activer la fonctionnalité de mandataire pour des sites + HTTP et/ou FTP, les modules <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code> et/ou + <code class="module"><a href="../mod/mod_proxy_ftp.html">mod_proxy_ftp</a></code> doivent également être chargés dans le + serveur.</p> + + <p>Pour activer la fonctionnalité de mandataire sur les sites chiffrés en HTTPS, le module + <code class="module"><a href="../mod/mod_proxy_connect.html">mod_proxy_connect</a></code> doit également être chargé dans le serveur.</p> + + <div class="warning"><h3>Avertissement</h3> + <p>N'activez pas la fonctionnalité de mandataire avec la directive + <code class="directive"><a href="#proxyrequests">ProxyRequests</a></code> avant + d'avoir <a href="#access">sécurisé votre serveur</a>. Les serveurs + mandataires ouverts sont dangereux non seulement pour votre + réseau, mais aussi pour l'Internet au sens large.</p> + </div> + +<h3>Voir aussi</h3> +<ul> +<li><a href="#forwardreverse">Mandataires/Passerelles directs et +inverses</a></li> +</ul> +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="proxyset" id="proxyset">Directive</a> <a name="ProxySet" id="ProxySet">ProxySet</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit différents paramètres relatifs à la répartition de +charge des mandataires et aux membres des groupes de répartition de +charge</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxySet <var>url</var> <var>clé=valeur [clé=valeur ...]</var></code></td></tr> +<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel, répertoire</td></tr> +<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>ProxySet n'est disponible que depuis la version 2.2 +du serveur HTTP Apache.</td></tr> +</table> + <p>Cette directive propose une méthode alternative pour définir tout + paramètre relatif aux répartiteurs de charge et serveurs cibles de + mandataires normalement définis via la directive <code class="directive"><a href="#proxypass">ProxyPass</a></code>. Si elle se trouve dans un + conteneur <code><Proxy <var>url de répartiteur|url de + serveur cible</var>></code>, l'argument <var>url</var> n'est pas + nécessaire. Comme effet de bord, le répartiteur ou serveur cible respectif + est créé. Ceci peut s'avérer utile pour la mise en oeuvre d'un + mandataire inverse via une directive <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> au lieu de <code class="directive"><a href="#proxypass">ProxyPass</a></code>.</p> + + <div class="example"><pre class="prettyprint lang-config"><Proxy "balancer://hotcluster"> + BalancerMember "http://www2.example.com:8080" loadfactor=1 + BalancerMember "http://www3.example.com:8080" loadfactor=2 + ProxySet lbmethod=bytraffic +</Proxy></pre> +</div> + + <pre class="prettyprint lang-config"><Proxy "http://backend"> + ProxySet keepalive=On +</Proxy></pre> + + + <pre class="prettyprint lang-config">ProxySet "balancer://foo" lbmethod=bytraffic timeout=15</pre> + + + <pre class="prettyprint lang-config">ProxySet "ajp://backend:7001" timeout=15</pre> + + + <div class="warning"><h3>Avertissement</h3> + <p>Gardez à l'esprit qu'une même clé de paramètre peut avoir + différentes significations selon qu'elle s'applique à un + répartiteur ou à un serveur cible, et ceci est illustré par les deux + exemples précédents où il est question d'un timeout.</p> + </div> + + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="proxysourceaddress" id="proxysourceaddress">Directive</a> <a name="ProxySourceAddress" id="ProxySourceAddress">ProxySourceAddress</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Définit l'adresse IP locale pour les connexions mandatées +sortantes</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxySourceAddress <var>adresse</var></code></td></tr> +<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr> +<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.3.9</td></tr> +</table> + <p>Cette directive permet de définir une adresse IP locale + spécifique à laquelle faire référence lors d'une connexion à un + serveur d'arrière-plan.</p> + + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="proxystatus" id="proxystatus">Directive</a> <a name="ProxyStatus" id="ProxyStatus">ProxyStatus</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Affiche l'état du répartiteur de charge du mandataire dans +mod_status</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyStatus Off|On|Full</code></td></tr> +<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>ProxyStatus Off</code></td></tr> +<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr> +<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible depuis la version 2.2 d'Apache</td></tr> +</table> + <p>Cette directive permet de spécifier si les données d'état du + répartiteur de charge du mandataire doivent être affichées via la + page d'état du serveur du module <code class="module"><a href="../mod/mod_status.html">mod_status</a></code>.</p> + <div class="note"><h3>Note</h3> + <p>L'argument <strong>Full</strong> produit le même effet que + l'argument <strong>On</strong>.</p> + </div> + + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="proxytimeout" id="proxytimeout">Directive</a> <a name="ProxyTimeout" id="ProxyTimeout">ProxyTimeout</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Délai d'attente réseau pour les requêtes +mandatées</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyTimeout <var>secondes</var></code></td></tr> +<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>Valeur de la directive <code class="directive"><a href="../mod/core.html#timeout">Timeout</a></code></code></td></tr> +<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr> +<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +</table> + <p>Cette directive permet à l'utilisateur de spécifier un délai pour + les requêtes mandatées. Ceci s'avère utile dans le cas d'un serveur + d'applications lent et bogué qui a tendance à se bloquer, et si vous + préférez simplement renvoyer une erreur timeout et abandonner la + connexion en douceur plutôt que d'attendre jusqu'à ce que le serveur + veuille bien répondre.</p> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="proxyvia" id="proxyvia">Directive</a> <a name="ProxyVia" id="ProxyVia">ProxyVia</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Information fournie dans l'en-tête de réponse HTTP +<code>Via</code> pour les requêtes mandatées</td></tr> +<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>ProxyVia On|Off|Full|Block</code></td></tr> +<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>ProxyVia Off</code></td></tr> +<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr> +<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_proxy</td></tr> +</table> + <p>Cette directive permet de contrôler l'utilisation de l'en-tête + HTTP <code>Via:</code> par le mandataire. Le but recherché est de + contrôler le flux des requêtes mandatées tout au long d'une chaîne + de serveurs mandataires. Voir <a href="http://www.ietf.org/rfc/rfc2616.txt">RFC 2616</a> (HTTP/1.1), + section 14.45 pour une description des lignes d'en-tête + <code>Via:</code>.</p> + + <ul> + <li>Si elle est définie à <code>Off</code>, valeur par défaut, cette + directive n'effectue aucun traitement particulier. Si une requête ou + une réponse contient un en-tête <code>Via:</code>, il est transmis + sans modification.</li> + + <li>Si elle est définie à <code>On</code>, chaque requête ou réponse + se verra ajouter une ligne d'en-tête <code>Via:</code> pour le + serveur courant.</li> + + <li>Si elle est définie à <code>Full</code>, chaque ligne d'en-tête + <code>Via:</code> se verra ajouter la version du serveur Apache + httpd sous la forme d'un champ de commentaire <code>Via:</code>.</li> + + <li>Si elle est définie à <code>Block</code>, chaque requête + mandatée verra ses lignes d'en-tête <code>Via:</code> supprimées. + Aucun nouvel en-tête <code>Via:</code> ne sera généré.</li> + </ul> + +</div> +</div> +<div class="bottomlang"> +<p><span>Langues Disponibles: </span><a href="../en/mod/mod_proxy.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../fr/mod/mod_proxy.html" title="Français"> fr </a> | +<a href="../ja/mod/mod_proxy.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a></p> +</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">Commentaires</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed 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 Libera.chat, or sent to our <a href="https://httpd.apache.org/lists.html">mailing lists</a>.</div> +<script type="text/javascript"><!--//--><![CDATA[//><!-- +var comments_shortname = 'httpd'; +var comments_identifier = 'http://httpd.apache.org/docs/2.4/mod/mod_proxy.html'; +(function(w, d) { + if (w.location.hostname.toLowerCase() == "httpd.apache.org") { + d.write('<div id="comments_thread"><\/div>'); + var s = d.createElement('script'); + s.type = 'text/javascript'; + s.async = true; + s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; + (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); + } + else { + d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); + } +})(window, document); +//--><!]]></script></div><div id="footer"> +<p class="apache">Copyright 2023 The Apache Software Foundation.<br />Autorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p> +<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">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script> +</body></html>
\ No newline at end of file diff --git a/docs/manual/mod/mod_proxy.html.ja.utf8 b/docs/manual/mod/mod_proxy.html.ja.utf8 new file mode 100644 index 0000000..0de94ef --- /dev/null +++ b/docs/manual/mod/mod_proxy.html.ja.utf8 @@ -0,0 +1,1288 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head> +<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" /> +<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + --> +<title>mod_proxy - Apache HTTP サーバ バージョン 2.4</title> +<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> +<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> +<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" /> +<script src="../style/scripts/prettify.min.js" type="text/javascript"> +</script> + +<link href="../images/favicon.ico" rel="shortcut icon" /></head> +<body> +<div id="page-header"> +<p class="menu"><a href="../mod/">モジュール</a> | <a href="../mod/directives.html">ディレクティブ</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">用語</a> | <a href="../sitemap.html">サイトマップ</a></p> +<p class="apache">Apache HTTP サーバ バージョン 2.4</p> +<img alt="" src="../images/feather.png" /></div> +<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div> +<div id="path"> +<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP サーバ</a> > <a href="http://httpd.apache.org/docs/">ドキュメンテーション</a> > <a href="../">バージョン 2.4</a> > <a href="./">モジュール</a></div> +<div id="page-content"> +<div id="preamble"><h1>Apache モジュール mod_proxy</h1> +<div class="toplang"> +<p><span>翻訳済み言語: </span><a href="../en/mod/mod_proxy.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../fr/mod/mod_proxy.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/mod/mod_proxy.html" title="Japanese"> ja </a></p> +</div> +<div class="outofdate">この日本語訳はすでに古くなっている + 可能性があります。 + 最近更新された内容を見るには英語版をご覧下さい。 + </div> +<table class="module"><tr><th><a href="module-dict.html#Description">説明:</a></th><td>HTTP/1.1 プロキシ/ゲートウェイサーバ</td></tr> +<tr><th><a href="module-dict.html#Status">ステータス:</a></th><td>Extension</td></tr> +<tr><th><a href="module-dict.html#ModuleIdentifier">モジュール識別子:</a></th><td>proxy_module</td></tr> +<tr><th><a href="module-dict.html#SourceFile">ソースファイル:</a></th><td>mod_proxy.c</td></tr></table> +<h3>概要</h3> + + <div class="warning"><h3>警告</h3> + <p><a href="#access">サーバを安全にする</a>まで <code class="directive"><a href="#proxyrequests">ProxyRequests</a></code> は有効にしないでください。 + オープンプロキシサーバはあなた自身のネットワークにとっても、 + インターネット全体にとっても危険です。</p> + </div> + + <p>このモジュールは Apache のプロキシ/ゲートウェイ機能を実装しています。 + <code>AJP13</code> (Apache JServe Protocol version 1.3), + <code>FTP</code>, <code>CONNECT</code> (SSL 用), + <code>HTTP/0.9</code>, <code>HTTP/1.0</code>, <code>HTTP/1.1</code> + のプロキシ機能を実装しています。これらのプロトコルやその他のプロトコル用の + プロキシ機能を持った、他のモジュールに接続するようにも設定できます。</p> + + <p>Apache のプロキシ機能は <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> の他に、 + いくつかのモジュールに分割されています: + <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code>, <code class="module"><a href="../mod/mod_proxy_ftp.html">mod_proxy_ftp</a></code>, + <code class="module"><a href="../mod/mod_proxy_ajp.html">mod_proxy_ajp</a></code>, <code class="module"><a href="../mod/mod_proxy_balancer.html">mod_proxy_balancer</a></code>, + <code class="module"><a href="../mod/mod_proxy_connect.html">mod_proxy_connect</a></code> です。ですから、 + 特定のプロキシの機能を使いたい場合は、<code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> <em>と</em> + 該当するモジュールをサーバに (コンパイル時に静的に行なうか + <code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code> で動的に読み込むかして) + 組み込む必要があります。</p> + + <p>これに加えて、他のモジュールによって拡張機能が提供されています。 + キャッシュは <code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code> と関連モジュールで + 提供されています。SSL/TLS で遠隔サーバに接続する機能は + <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code> の <code>SSLProxy*</code> ディレクティブで + 提供されています。これらの機能を利用するためには、該当するモジュールを + 組み込んで設定しなければなりません。</p> +</div> +<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><h3>トピック</h3> +<ul id="topics"> +<li><img alt="" src="../images/down.gif" /> <a href="#forwardreverse">フォワードプロキシとリバースプロキシ</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#examples">基本の例</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#access">プロキシへのアクセス制御</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#startup">遅い起動</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#intranet">イントラネットプロキシ</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#envsettings">プロトコルの調整</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#request-bodies">リクエストボディ</a></li> +</ul><h3 class="directives">ディレクティブ</h3> +<ul id="toc"> +<li><img alt="" src="../images/down.gif" /> <a href="#balancergrowth">BalancerGrowth</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#balancerinherit">BalancerInherit</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#balancermember">BalancerMember</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#balancerpersist">BalancerPersist</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#noproxy">NoProxy</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxy"><Proxy></a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxy100continue">Proxy100Continue</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxyaddheaders">ProxyAddHeaders</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxybadheader">ProxyBadHeader</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxyblock">ProxyBlock</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxydomain">ProxyDomain</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxyerroroverride">ProxyErrorOverride</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxyiobuffersize">ProxyIOBufferSize</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxymatch"><ProxyMatch></a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxymaxforwards">ProxyMaxForwards</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxypass">ProxyPass</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxypassinherit">ProxyPassInherit</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxypassinterpolateenv">ProxyPassInterpolateEnv</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxypassmatch">ProxyPassMatch</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxypassreverse">ProxyPassReverse</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxypassreversecookiedomain">ProxyPassReverseCookieDomain</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxypassreversecookiepath">ProxyPassReverseCookiePath</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxypreservehost">ProxyPreserveHost</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxyreceivebuffersize">ProxyReceiveBufferSize</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxyremote">ProxyRemote</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxyremotematch">ProxyRemoteMatch</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxyrequests">ProxyRequests</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxyset">ProxySet</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxysourceaddress">ProxySourceAddress</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxystatus">ProxyStatus</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxytimeout">ProxyTimeout</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#proxyvia">ProxyVia</a></li> +</ul> +<h3>Bugfix checklist</h3><ul class="seealso"><li><a href="https://www.apache.org/dist/httpd/CHANGES_2.4">httpd changelog</a></li><li><a href="https://bz.apache.org/bugzilla/buglist.cgi?bug_status=__open__&list_id=144532&product=Apache%20httpd-2&query_format=specific&order=changeddate%20DESC%2Cpriority%2Cbug_severity&component=mod_proxy">Known issues</a></li><li><a href="https://bz.apache.org/bugzilla/enter_bug.cgi?product=Apache%20httpd-2&component=mod_proxy">Report a bug</a></li></ul><h3>参照</h3> +<ul class="seealso"> +<li><code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code></li> +<li><code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code></li> +<li><code class="module"><a href="../mod/mod_proxy_ftp.html">mod_proxy_ftp</a></code></li> +<li><code class="module"><a href="../mod/mod_proxy_connect.html">mod_proxy_connect</a></code></li> +<li><code class="module"><a href="../mod/mod_proxy_balancer.html">mod_proxy_balancer</a></code></li> +<li><code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code></li> +<li><a href="#comments_section">コメント</a></li></ul></div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="forwardreverse" id="forwardreverse">フォワードプロキシとリバースプロキシ</a></h2> + <p>Apache は<dfn>フォワード</dfn>プロキシとしても、 + <dfn>リバース</dfn>プロキシとしても設定することができます。</p> + + <p>通常の<dfn>フォワードプロキシ</dfn>はクライアントと + <em>オリジンサーバ</em> <span class="transnote">(<em>訳注:</em> コンテンツ生成元のサーバ)</span> + の間に位置する中間サーバです。 + オリジンサーバからコンテンツを取得する過程では、クライアントは + 行き先としてオリジンサーバを指定しつつプロキシにリクエストを送り、 + プロキシはオリジンサーバからコンテンツ取得のリクエストを送り、 + コンテンツが取得できればそれをクライアントに返します。 + クライアントが他のサイトにフォワードプロクシ経由でアクセスするには、 + 特別にそれ用の設定をしなければなりません。</p> + + <p>フォワードプロキシの一般的な使用方法は、ファイアウォールによって + 制限されている内部のクライアントにインターネットへのアクセスを + 提供するものです。フォワードプロキシはネットワークの使用量を + 減らすために (<code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code> で提供されている) + キャッシュ機能を用いることもできます。</p> + + <p>フォワードプロキシは <code class="directive"><a href="#proxyrequests">ProxyRequests</a></code> ディレクティブで + 有効になります。フォワードプロキシでは、クライアントは本当の身元を + 隠して任意のサイトにアクセスできるようになるため、フォワードプロキシを + 有効にする前に、承認されたクライアントのみがプロキシにアクセスできるように + <a href="#access">サーバを安全にする</a>ことが重要です。</p> + + <p>一方<dfn>リバースプロキシ</dfn>は、クライアントには普通の + ウェブサーバのように見えます。クライアント側に特別な設定は必要ありません。 + クライアントはリバースプロキシの名前空間に対して通常のコンテンツへの + リクエストを行ないます。プロキシはリクエストをどこに送れば良いかを判定し、 + あたかも自分自身がオリジンサーバであったかのようにクライアントに + コンテンツを返します。</p> + + <p>リバースプロキシのよくある利用方法は、インターネットユーザに + ファイアウォールの中にあるサーバにアクセスを与えるというものです。 + リバースプロキシは複数のバックエンドサーバへ負荷分散をするために + 使ったり、遅いバックエンドエンドサーバのためにキャッシュ機能を提供したり + するために使えます。また、リバースプロキシは複数のサーバを + 同じ URL 空間にまとめるために使うこともできます。</p> + + <p>リバースプロキシは <code class="directive"><a href="#proxypass">ProxyPass</a></code> ディレクティブや + <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> ディレクティブの + <code>[P]</code> フラグを使うことで有効になります。リバースプロキシの + 設定のために <code class="directive"><a href="#proxyrequests">ProxyRequests</a></code> を設定する必要は + <em>ありません</em>。</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="examples" id="examples">基本の例</a></h2> + + <p>以下の例は手始めの簡単な例です。個々のディレクティブの意味は + それぞれの説明をお読みください。</p> + + <p>またキャッシュ機能を有効にしたい場合は、<code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code> + の説明を読んでください。</p> + + <div class="example"><h3>フォワードプロキシ</h3><p><code> + ProxyRequests On<br /> + ProxyVia On<br /> + <br /> + <Proxy *><br /> + <span class="indent"> + Order deny,allow<br /> + Deny from all<br /> + Allow from internal.example.com<br /> + </span> + </Proxy> + </code></p></div> + + <div class="example"><h3>リバースプロキシ</h3><p><code> + ProxyRequests Off<br /> + <br /> + <Proxy *><br /> + <span class="indent"> + Order deny,allow<br /> + Allow from all<br /> + </span> + </Proxy><br /> + <br /> + ProxyPass /foo http://foo.example.com/bar<br /> + ProxyPassReverse /foo http://foo.example.com/bar + </code></p></div> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="access" id="access">プロキシへのアクセス制御</a></h2> + <p>プロキシのアクセスは以下のように <code class="directive"><a href="#proxy"><Proxy></a></code> コンテナの中に + ディレクティブを書くことで制御できます:</p> + + <div class="example"><p><code> + <Proxy *><br /> + <span class="indent"> + Order Deny,Allow<br /> + Deny from all<br /> + Allow from 192.168.0<br /> + </span> + </Proxy> + </code></p></div> + + <p>アクセス制御のためのディレクティブのより詳しい情報は + <code class="module"><a href="../mod/mod_authz_host.html">mod_authz_host</a></code> をお読みください。</p> + + <p>(<code class="directive"><a href="#proxyrequests">ProxyRequests</a></code> ディレクティブを + 使って) フォワードプロキシを設定している場合は、厳しくアクセス + 制限を行なうことが非常に大切です。そうしないと、任意のクライアントが + 身元を明かすことなく任意のホストにアクセスするためにサーバを使うことが + できてしまいます。これはあなた自身のネットワークにとっても、インターネット + 全体にとっても危険なことです。(<code>ProxyRequests Off</code> にして + <code class="directive"><a href="#proxypass">ProxyPass</a></code> ディレクティブを使って) + リバースプロキシを使っている場合には、クライアントはあなたが明示的に + 設定したホストにしかアクセスできないため、フォワードプロキシのとき + ほどアクセス制御に力を注がなくても大丈夫です。</p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="startup" id="startup">遅い起動</a></h2> + <p><code class="directive"><a href="#proxyblock">ProxyBlock</a></code> ディレクティブを使っている場合、 + 後のテストのために起動時にホストの + IP アドレスが調べられてキャッシュされます。ホスト名のルックアップの + 速さによっては、数秒 (かそれ以上) かかるかもしれません。</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="intranet" id="intranet">イントラネットプロキシ</a></h2> + <p>イントラネットにある Apache プロキシサーバは外部へのリクエストを + 会社のファイアウォールを通して送らなければなりません。(このためには + 個々の <var>scheme</var> についてそれぞれ、ファイアウォールの + プロキシにフォワードされるように + <code class="directive"><a href="#proxyremote">ProxyRemote</a></code> ディレクティブを + 設定してください)。しかしイントラネット内のリソースにアクセスするときは、 + ファイアウォールを通さないでもアクセスできます。 + どのホストがイントラネットに属し、直接アクセスすべきかを指定するには、 + <code class="directive"><a href="#noproxy">NoProxy</a></code> ディレクティブが + 役に立ちます。</p> + + <p>イントラネット内のユーザは WWW のリクエストでローカルドメインを + 省略することがよくあります。<code>http://somehost.example.com/</code> + というリクエストの代わりに "http://somehost/" をリクエストしたりします。 + このようなリクエストを受け付け、サーバに設定されているローカルドメインが + 暗黙のうちに使われていると解釈して、単純にリクエストを処理するものも + 商用プロキシサーバの中にはあります。 + サーバが <a href="#proxyrequests">プロキシのサービス用に設定されていて</a> + <code class="directive"><a href="#proxydomain">ProxyDomain</a></code> ディレクティブが + 使用された場合には、Apache はクライアントにリダイレクト応答を送って、 + 正しい、完全な (<span class="transnote">(<em>訳注:</em> fully qualified)</span>) + サーバのアドレスに送ることができます。このように + リダイレクトすると、ユーザのブックマークが正しい完全なホスト名を含む + ことにもなるため、より好ましい方法と言えるでしょう。</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="envsettings" id="envsettings">プロトコルの調整</a></h2> + <p>Keepalive や HTTP/1.1 を適切に実装していないアプリケーションサーバに対して + <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> がリクエストを送信する場合、 + HTTP/1.0 を使って keepalive を無しにしてリクエストを送るようにする + 環境変数が二つあります。これらは <code class="directive"><a href="../mod/mod_env.html#setenv">SetEnv</a></code> ディレクティブで設定します。</p> + + <p><code>force-proxy-request-1.0</code> と <code>proxy-nokeepalive</code> + がその環境変数です。</p> + + <div class="example"><p><code> + <Location /buggyappserver/><br /> + <span class="indent"> + ProxyPass http://buggyappserver:7001/foo/<br /> + SetEnv force-proxy-request-1.0 1<br /> + SetEnv proxy-nokeepalive 1<br /> + </span> + </Location> + </code></p></div> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="request-bodies" id="request-bodies">リクエストボディ</a></h2> + + <p>POST メソッドなどのリクエストには、リクエストボディがあります。 + HTTP プロトコル仕様によると、ボディのあるリクエストは chunked + 転送を使うか、<code>Content-Length</code> + ヘッダを送信しなければなりません。 + このようなリクエストをオリジンサーバに送信する場合、 + <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code> は常に <code>Content-Length</code> + を送ろうと試みます。しかし。ボディが大きく、オリジナルのリクエストで + chunked 転送が使われている場合、上流へのリクエストに + chunked 転送も使われます。 + この挙動は <a href="../env.html">環境変数</a>で制御できます。 + <code>proxy-sendcl</code> を設定すると、可能な限り常に + <code>Content-Length</code> を付与して、 + 上流サーバに送信するようになります。 + 逆に <code>proxy-sendchunked</code> を設定すると、リソース消費を抑え、 + chnked エンコードを使って送信するようになります。</p> + + </div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="BalancerGrowth" id="BalancerGrowth">BalancerGrowth</a> <a name="balancergrowth" id="balancergrowth">ディレクティブ</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>Number of additional Balancers that can be added Post-configuration</td></tr> +<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>BalancerGrowth <var>#</var></code></td></tr> +<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>BalancerGrowth 5</code></td></tr> +<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr> +<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_proxy</td></tr> +<tr><th><a href="directive-dict.html#Compatibility">互換性:</a></th><td>BalancerGrowth is only available in Apache HTTP Server 2.3.13 + and later.</td></tr> +</table><p>このディレクティブの解説文書は + まだ翻訳されていません。英語版をご覧ください。 + </p></div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="BalancerInherit" id="BalancerInherit">BalancerInherit</a> <a name="balancerinherit" id="balancerinherit">ディレクティブ</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>Inherit ProxyPassed Balancers/Workers from the main server</td></tr> +<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>BalancerInherit On|Off</code></td></tr> +<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>BalancerInherit On</code></td></tr> +<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr> +<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_proxy</td></tr> +<tr><th><a href="directive-dict.html#Compatibility">互換性:</a></th><td>BalancerInherit is only available in Apache HTTP Server 2.4.5 and later.</td></tr> +</table><p>このディレクティブの解説文書は + まだ翻訳されていません。英語版をご覧ください。 + </p></div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="BalancerMember" id="BalancerMember">BalancerMember</a> <a name="balancermember" id="balancermember">ディレクティブ</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>Add a member to a load balancing group</td></tr> +<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code /></td></tr> +<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>ディレクトリ</td></tr> +<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_proxy</td></tr> +</table><p>Documentation not yet translated. Please see English version of document.</p> +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="BalancerPersist" id="BalancerPersist">BalancerPersist</a> <a name="balancerpersist" id="balancerpersist">ディレクティブ</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>Attempt to persist changes made by the Balancer Manager across restarts.</td></tr> +<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>BalancerPersist On|Off</code></td></tr> +<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>BalancerPersist Off</code></td></tr> +<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr> +<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_proxy</td></tr> +<tr><th><a href="directive-dict.html#Compatibility">互換性:</a></th><td>BalancerPersist is only available in Apache HTTP Server 2.4.4 and later.</td></tr> +</table><p>このディレクティブの解説文書は + まだ翻訳されていません。英語版をご覧ください。 + </p></div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="NoProxy" id="NoProxy">NoProxy</a> <a name="noproxy" id="noproxy">ディレクティブ</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>直接接続する ホスト、ドメイン、ネットワーク</td></tr> +<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>NoProxy <var>host</var> [<var>host</var>] ...</code></td></tr> +<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr> +<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_proxy</td></tr> +</table> + <p>このディレクティブはイントラネット中の Apache プロキシサーバにのみ + 有用です。<code class="directive">NoProxy</code> ディレクティブは空白区切りで、 + サブネット、IP アドレス、ホスト、ドメインのリストを指定します。 + これらのどれかにマッチするホストへのリクエストは <code class="directive"><a href="#proxyremote">ProxyRemote</a></code> で設定されたプロキシサーバに + フォワードされず、直接処理されます。</p> + + <div class="example"><h3>例</h3><p><code> + ProxyRemote * http://firewall.mycompany.com:81<br /> + NoProxy .mycompany.com 192.168.112.0/21 + </code></p></div> + + <p><code class="directive">NoProxy</code> ディレクティブの <var>host</var> 引数は + 以下の種類のどれかです:</p> + + <dl> + + <dt><var><a name="domain" id="domain">Domain</a></var></dt> + <dd> + <p><dfn>Domain</dfn> は先頭にピリオドの着いた部分 DNS ドメイン名です。 + 同一 DNS ドメイン及びゾーン (<em>すなわち</em>、ホスト名の末尾がすべて + <var>Domain</var> で終わっているということ) に属するホストのリストを + 表します)。</p> + + <div class="example"><h3>例</h3><p><code> + .com .apache.org. + </code></p></div> + + <p><var>Domain</var> を <a href="#hostname">Hostname</a> と区別するために (意味的にも構文的にも。DNS ドメインも + DNS の A レコードを持つことができるのです!)、<var>Domain</var> は + 常にピリオドで始まります。</p> + + <div class="note"><h3>注</h3> + <p>ドメイン名の比較は大文字小文字を区別せずに行なわれ、<var>Domain</var> + は常に DNS ツリーのルートから始まるものとみなされます。ですから、 + 次の二つのドメイン <code>.MyDomain.com</code> と + <code>.mydomain.com.</code> (最後のピリオドに注目) は同一であると + みなされます。ドメインの比較は DNS ルックアップなしで行なわれるため、 + サブネットの比較よりもずっと効率的です。</p> + </div></dd> + + + <dt><var><a name="subnet" id="subnet">SubNet</a></var></dt> + <dd> + <p><dfn>SubNet</dfn> は数値形式 (ドットで区切られた四つの数字) の + 部分インターネットアドレスです。後にスラッシュと <var>Subnet</var> + の意味のあるビット数を指定するネットマスクとを続けることができます。 + 共通のネットワークインタフェースを使って到達することのできるサブネットを + 表すために使われます。明示的にネットマスクを指定しない場合は + 最後の省略された (もしくは値が 0 の) 数字がマスクを指定します。 + (この場合は、ネットマスクは 8 ビット単位でしか指定できません。) + 例:</p> + + <dl> + <dt><code>192.168</code> もしくは <code>192.168.0.0</code></dt> + <dd>サブネット 192.168.0.0 と暗黙の 16 ビット有効なネットマスク + (<code>255.255.0.0</code> というネットマスクの形式で使われることも + あります)</dd> + <dt><code>192.168.112.0/21</code></dt> + <dd>サブネット<code>192.168.112.0/21</code> と 21 ビット有効な + ネットマスク (<code>255.255.248.0</code> という形式で使われることも + あります)</dd> + </dl> + + <p>特別な場合に、32 ビット有効な <em>SubNet</em> は + <var><a href="#ipadr">IPAddr</a></var> と同等で、 + 0 ビット有効な <var>SubNet</var> (<em>例えば</em>、0.0.0.0/0) は + すべての IP アドレスにマッチする定数 <var>_Default_</var> と同じです。</p> + </dd> + + + <dt><var><a name="ipaddr" id="ipaddr">IPAddr</a></var></dt> + <dd> + <p><dfn>IPAddr</dfn> は数値形式 (ドットで区切られた四つの数字) の + 完全インターネットアドレスです。通常はこのアドレスはホストを + 表しますが、必ずしもアドレスに対応する DNS ドメイン名があるわけでは + ありません。</p> + + <div class="example"><h3>例</h3><p><code> + 192.168.123.7 + </code></p></div> + + <div class="note"><h3>注</h3> + <p><var>IPAddr</var> は DNS システムにより解決される必要がないので、 + apache の性能が向上するかもしれません。</p> + </div></dd> + + + <dt><var><a name="hostname" id="hostname">Hostname</a></var></dt> + <dd> + <p><dfn>Hostname</dfn> は DNS ドメインサービスにより一つもしくは + 複数の <var><a href="#ipaddr">IPAddr</a></var> に解決可能な + 完全な DNS ドメイン名です。これは (<var><a href="#domain">Domain</a></var> + と違って、説明は上記を参照) 論理的なホストを表し、少くとも一つの + <var><a href="#ipaddr">IPAddr</a></var> (もしくは違う + <var><a href="#ipaddr">IPAddr</a></var> のホストのリスト) に解決 + されなければなりません)。</p> + + <div class="example"><h3>例</h3><p><code> + prep.ai.mit.edu<br /> + www.apache.org + </code></p></div> + + <div class="note"><h3>注</h3> + <p>多くの場合、<var>Hostname</var> の代わりに <var><a href="#ipaddr">IPAddr</a></var> を指定した方が、DNS ルックアップを + 避けることができるため、効率が良くなります。Apache の名前解決は + ネームサーバへの接続が遅い PPP 上の場合などにかなり時間を取られる + ことがあります。</p> + <p><var>Hostname</var> の比較は大文字小文字を区別せずに行なわれ、 + <var>Hostname</var> は常に DNS ツリーのルートから始まるものとみなされます。 + ですから、二つのドメイン <code>WWW.MyDomain.com</code> と + <code>www.mydomain.com.</code> (最後のピリオドに注目) は同一であると + みなされます。</p> + </div></dd> + </dl> + +<h3>参照</h3> +<ul> +<li><a href="../dns-caveats.html">DNS に関する問題</a></li> +</ul> +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="Proxy" id="Proxy"><Proxy></a> <a name="proxy" id="proxy">ディレクティブ</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>プロキシされるリソースに適用されるコンテナ</td></tr> +<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code><Proxy <var>wildcard-url</var>> ...</Proxy></code></td></tr> +<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr> +<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_proxy</td></tr> +</table> + <p><code class="directive"><Proxy></code> セクション中の + ディレクティブはマッチするプロキシされるコンテンツにのみ適用されます。 + シェル形式のワイルドカードが使えます。</p> + + <p>例えば、次の設定は <code>yournetwork.example.com</code> の + ホストにのみプロキシサーバを経由したアクセスを許可します:</p> + + <div class="example"><p><code> + <Proxy *><br /> + <span class="indent"> + Order Deny,Allow<br /> + Deny from all<br /> + Allow from yournetwork.example.com<br /> + </span> + </Proxy> + </code></p></div> + + <p>次の例は <code>example.com</code> の <code>foo</code> ディレクトリの + すべてのファイルに対して、プロキシサーバを通して送られたときには + <code>INCLUDES</code> フィルタを通して送るように設定します:</p> + + <div class="example"><p><code> + <Proxy http://example.com/foo/*><br /> + <span class="indent"> + SetOutputFilter INCLUDES<br /> + </span> + </Proxy> + </code></p></div> + + + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="Proxy100Continue" id="Proxy100Continue">Proxy100Continue</a> <a name="proxy100continue" id="proxy100continue">ディレクティブ</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>Forward 100-continue expectation to the origin server</td></tr> +<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>Proxy100Continue Off|On</code></td></tr> +<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>Proxy100Continue On</code></td></tr> +<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト, ディレクトリ</td></tr> +<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_proxy</td></tr> +<tr><th><a href="directive-dict.html#Compatibility">互換性:</a></th><td>Available in version 2.4.40 and later</td></tr> +</table><p>このディレクティブの解説文書は + まだ翻訳されていません。英語版をご覧ください。 + </p></div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="ProxyAddHeaders" id="ProxyAddHeaders">ProxyAddHeaders</a> <a name="proxyaddheaders" id="proxyaddheaders">ディレクティブ</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>Add proxy information in X-Forwarded-* headers</td></tr> +<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>ProxyAddHeaders Off|On</code></td></tr> +<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>ProxyAddHeaders On</code></td></tr> +<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト, ディレクトリ</td></tr> +<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_proxy</td></tr> +<tr><th><a href="directive-dict.html#Compatibility">互換性:</a></th><td>Available in version 2.3.10 and later</td></tr> +</table><p>このディレクティブの解説文書は + まだ翻訳されていません。英語版をご覧ください。 + </p></div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="ProxyBadHeader" id="ProxyBadHeader">ProxyBadHeader</a> <a name="proxybadheader" id="proxybadheader">ディレクティブ</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>応答におかしなヘッダがある場合の扱い方を決める</td></tr> +<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>ProxyBadHeader IsError|Ignore|StartBody</code></td></tr> +<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>ProxyBadHeader IsError</code></td></tr> +<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr> +<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_proxy</td></tr> +<tr><th><a href="directive-dict.html#Compatibility">互換性:</a></th><td>2.0.44 以降</td></tr> +</table> + <p><code class="directive">ProxyBadHeader</code> ディレクティブは構文的に + 間違ったヘッダ (<em>つまり</em> コロンを含まないもの) を受け取ったときに + <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> がどう振る舞うかを決めます。以下の引数を + 取ることができます:</p> + + <dl> + <dt><code>IsError</code></dt> + <dd>リクエストを中止して 502 (Bad Gateway) 応答を返す。 + これがデフォルトの動作です。</dd> + + <dt><code>Ignore</code></dt> + <dd>間違ったヘッダ行をそもそも存在しなかったものとして扱う。</dd> + + <dt><code>StartBody</code></dt> + <dd>間違ったヘッダ行を受け取ったら、ヘッダの読み込みを終了して、 + それ以降の残りをボディとして扱う。これはヘッダとボディの間に空行を入れ忘れて + しまっているような、きちんと動作していないバックエンドサーバがあるときに、 + 問題を回避するのに役に立ちます。</dd> + </dl> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="ProxyBlock" id="ProxyBlock">ProxyBlock</a> <a name="proxyblock" id="proxyblock">ディレクティブ</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>プロキシ接続を禁止する語句、ホスト名、ドメインを指定する</td></tr> +<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>ProxyBlock *|<var>word</var>|<var>host</var>|<var>domain</var> +[<var>word</var>|<var>host</var>|<var>domain</var>] ...</code></td></tr> +<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr> +<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_proxy</td></tr> +</table> + <p><code class="directive">ProxyBlock</code> ディレクティブは空白で区切られた + 語句、ホスト名、ドメインのリストを指定します。サイト名にその語句、ホスト名、 + ドメインを含むサイトへの HTTP、HTTPS、FTP によるドキュメントのリクエストは + プロキシサーバにより<em>ブロックされます</em>。プロキシモジュールは + 起動時にホスト名と思しき項目の IP アドレスを調べ、後のテストのために + キャッシュします。これにより、サーバの起動が少し遅くなるかもしれません。</p> + + <div class="example"><h3>Example</h3><p><code> + ProxyBlock joes-garage.com some-host.co.uk rocky.wotsamattau.edu + </code></p></div> + + <p><code>rocky.wotsamattau.edu</code> が IP アドレスで参照されたときでも + マッチします。</p> + + <p><code>wotsamattau.edu</code> のマッチには <code>wotsamattau</code> + だけでも十分です。</p> + + <div class="example"><p><code> + ProxyBlock * + </code></p></div> + + <p>はすべてのサイトへの接続をブロックすることに注意してください。</p> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="ProxyDomain" id="ProxyDomain">ProxyDomain</a> <a name="proxydomain" id="proxydomain">ディレクティブ</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>プロキシされたリクエストのデフォルトのドメイン名</td></tr> +<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>ProxyDomain <var>Domain</var></code></td></tr> +<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr> +<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_proxy</td></tr> +</table> + <p>このディレクティブはイントラネット内の Apache プロキシサーバにのみ + 有用です。<code class="directive">ProxyDomain</code> ディレクティブは + apache プロキシサーバが属するデフォルトのドメインを指定します。 + ドメイン名の無いリクエストを受けた場合、設定された <var>Domain</var> + が追加された同じホストへのリダイレクト応答が返されます。</p> + + <div class="example"><h3>例</h3><p><code> + ProxyRemote * http://firewall.mycompany.com:81<br /> + NoProxy .mycompany.com 192.168.112.0/21<br /> + ProxyDomain .mycompany.com + </code></p></div> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="ProxyErrorOverride" id="ProxyErrorOverride">ProxyErrorOverride</a> <a name="proxyerroroverride" id="proxyerroroverride">ディレクティブ</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>プロキシされたコンテンツのエラーページを上書きする</td></tr> +<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>ProxyErrorOverride On|Off</code></td></tr> +<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>ProxyErrorOverride Off</code></td></tr> +<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr> +<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_proxy</td></tr> +<tr><th><a href="directive-dict.html#Compatibility">互換性:</a></th><td>バージョン 2.0 以降で使用可能</td></tr> +</table> + <p>このディレクティブはリバースプロキシを使用していて、 + エンドユーザに送られるエラーページの外見を共通のものにしたいときに + 有用です。このディレクティブは (<code class="module"><a href="../mod/mod_include.html">mod_include</a></code> の SSI によって) + インクルードされたファイルがエラーコードを取得して、正しく動作を + するようにもします (デフォルトの動作は、プロキシされたサーバの + エラーページの表示で、このディレクティブを有効にすると SSI のエラー + メッセージを表示します)。</p> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="ProxyIOBufferSize" id="ProxyIOBufferSize">ProxyIOBufferSize</a> <a name="proxyiobuffersize" id="proxyiobuffersize">ディレクティブ</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>内部データスループットバッファのサイズを決定する</td></tr> +<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>ProxyIOBufferSize <var>bytes</var></code></td></tr> +<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>ProxyIOBufferSize 8192</code></td></tr> +<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr> +<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_proxy</td></tr> +</table> + <p><code class="directive">ProxyIOBufferSize</code> ディレクティブは入力と + 出力用の一時メモリとして使われる内部バッファのサイズを調整します。 + サイズは <code>8192</code> 以下でなければなりません。</p> + + <p>ほとんどすべての場合、この値を変更する理由はありません。</p> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="ProxyMatch" id="ProxyMatch"><ProxyMatch></a> <a name="proxymatch" id="proxymatch">ディレクティブ</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>正規表現でのマッチによるプロキシリソース用のディレクティブコンテナ</td></tr> +<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code><ProxyMatch <var>regex</var>> ...</ProxyMatch></code></td></tr> +<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr> +<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_proxy</td></tr> +</table> + <p><code class="directive"><ProxyMatch></code> は URL のマッチに + <a class="glossarylink" href="../glossary.html#regex" title="用語集を参照">正規表現</a> を用いることを除いて + <code class="directive"><Proxy></code> ディレクティブと同じです。</p> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="ProxyMaxForwards" id="ProxyMaxForwards">ProxyMaxForwards</a> <a name="proxymaxforwards" id="proxymaxforwards">ディレクティブ</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>リクエストがフォワードされるプロキシの最大数</td></tr> +<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>ProxyMaxForwards <var>number</var></code></td></tr> +<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>ProxyMaxForwards 10</code></td></tr> +<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr> +<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_proxy</td></tr> +<tr><th><a href="directive-dict.html#Compatibility">互換性:</a></th><td>Apache 2.0 以降で使用可能</td></tr> +</table> + <p><code class="directive">ProxyMaxForwards</code> ディレクティブは + リクエストに <code>Max-Forwards</code> ヘッダが指定されていない場合に + リクエストが通過可能なプロキシの最大数を設定します。これは + プロキシの無限ループや DoS 攻撃を防ぐために設定されています。</p> + + <div class="example"><h3>例</h3><p><code> + ProxyMaxForwards 15 + </code></p></div> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="ProxyPass" id="ProxyPass">ProxyPass</a> <a name="proxypass" id="proxypass">ディレクティブ</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>リモートサーバをローカルサーバの URL 空間にマップする</td></tr> +<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>ProxyPass [<var>path</var>] !|<var>url</var> [<var>key=value</var> <var>key=value</var> ...]]</code></td></tr> +<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト, ディレクトリ</td></tr> +<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_proxy</td></tr> +</table> + <p>このディレクティブはリモートサーバをローカルサーバの名前空間に + マップできるようにします。ローカルサーバは通常の意味でのプロキシと + しては動作せず、リモートサーバのミラーとして振る舞います。 + <var>path</var> はローカルの仮想パスの名前です。<var>url</var> は + リモートサーバの部分 URL になり、クエリー文字列を含むことはできません。</p> + + <div class="warning"><code class="directive">ProxyPass</code> ディレクティブを + 使っているときは <code class="directive"><a href="#proxyrequests">ProxyRequests</a></code> ディレクティブは通常は + <strong>off</strong> に設定されているべきです。</div> + + <p>ローカルサーバのアドレスが <code>http://example.com/</code> であると + します。すると、</p> + + <div class="example"><p><code> + ProxyPass /mirror/foo/ http://backend.example.com/ + </code></p></div> + + <p>と設定すると <code>http://example.com/mirror/foo/bar</code> への + リクエストが内部的に <code>http://backend.example.com/bar</code> への + プロキシリクエストに変換されることになります。</p> + + <p>サブディレクトリをリバースプロキシしたくないときに <code>!</code> は + 役に立ちます。<em>例えば</em>、</p> + + <div class="example"><p><code> + ProxyPass /mirror/foo/i !<br /> + ProxyPass /mirror/foo http://backend.example.com + </code></p></div> + + <p>は <code>/mirror/foo/i</code> を<em>除く</em> + <code>/mirror/foo</code> へのすべてのリクエストを + <code>backend.example.com</code> にプロキシします。</p> + + <div class="note"><h3>注</h3> + <p>順番は重要です。一般的な <code class="directive">ProxyPass</code> + ディレクティブの<em>前に</em> + 除外ディレクティブを置く必要があります。</p> + </div> + + <p>2.1 の機能で、バックエンドサーバとの接続にプールされたコネクションを + 使えるようになりました。<code>key=value</code> 形式のパラメータで + このコネクションプーリングの調整ができます。<code>Hard Maximum</code> + のデフォルト値は、有効になっている MPM でのプロセス当たりのスレッド数と + 同じ数のコネクション数です。prefork MPM では通常は 1 で、worker MPM では + <code class="directive">ThreadsPerChild</code> で調整されます。</p> + + <p><code>min</code> の設定で、バックエンドサーバとの間に何本のコネクションを + 常時開くかが決まります。Soft Maximum <code>smax</code> の数に + 達するまで必要に応じてコネクションは生成されます。<code>smax</code> + を超えた数のコネクションは、生存時間 <code>ttl</code> で切断されます。 + バックエンドサーバと Hard Maximum <code>max</code> の数以上のコネクションを + 生成することはありません。</p> + + <div class="example"><p><code> + ProxyPass /example http://backend.example.com smax=5 max=20 ttl=120 retry=300 + </code></p></div> + + <table> + <tr><th>パラメータ</th> + <th>デフォルト値</th> + <th>説明</th></tr> + <tr><td>min</td> + <td>0</td> + <td>バックエンドサーバとの接続で + 常に開いているコネクション数の最小値</td></tr> + <tr><td>max</td> + <td>1...n</td> + <td>バックエンドサーバとの接続数の Hard Maximum + <span class="transnote">(<em>訳注:</em> ハードリミット)</span>。 + デフォルト値は、使用している MPM のプロセスあたりのスレッド数になっています。 + Prefork MPM では常に 1 で、Worker MPM では <code class="directive">ThreadsPerChild</code> + で調節できます。Hard Maximum 以上にバックエンドサーバとのコネクションを + 生成することはありません。</td></tr> + <tr><td>smax</td> + <td>max</td> + <td>接続数の Soft Maximum <span class="transnote">(<em>訳注:</em> ソフトリミット)</span>まで、 + コネクションは必要に応じて生成されます。 + <code>smax</code> を超えた数のコネクションは生存時間 <code>ttl</code> + で切断されます。 + </td></tr> + <tr><td>ttl</td> + <td>-</td> + <td><code>smax</code> 数を超えた非活動状態のコネクションの生存時間を、 + 秒で指定します。この期間内に使用されなかったコネクションは、 + 全て閉じられます。 + </td></tr> + <tr><td>timeout</td> + <td><code class="directive">Timeout</code></td> + <td>コネクションタイムアウトを秒で指定します。特に指定されなければ、 + フリーなコネクションを取得できるまで待ちます。このディレクティブは + <code>max</code> パラメータと合わせて使うことで、バックエンドサーバとの + 接続数を制御するのに使います。 + </td></tr> + <tr><td>acquire</td> + <td>-</td> + <td>設定すると、コネクションプールからフリーのコネクションを取得するために + 待機する待ち時間の最大値になります。フリーのコネクションがプールになかった場合は、 + <code>SERVER_BUSY</code> ステータスがクライアントに返されます。 + </td></tr> + <tr><td>keepalive</td> + <td>Off</td> + <td>バックエンドサーバと Apache の間にファイアーウォールがある場合には、 + このパラメータを使ってください。ファイアウォールは往々にして、 + 非活動状態のコネクションを落とそうとします。 + このフラグは OS に指示して、<code>KEEP_ALIVE</code> メッセージを非活動状態の + コネクションでも送るようにします (間隔は OS のグローバル設定に依存し、 + 通常は 120ms 間隔) 。これによってファイアウォールによってコネクションが + 落とされることを防げます。keepalive を有効にするには、このプロパティを + <code>On</code> にしてください。 + </td></tr> + <tr><td>retry</td> + <td>60</td> + <td>コネクションをプーリングするための、リトライのタイムアウトを秒で + 指定します。バックエンドサーバへのコネクションプーリングが失敗した場合は、 + タイムアウトの期間が過ぎるまで、そのサーバにリクエストをフォワードしません。 + この機能を使うと、バックエンドサーバをメンテナンスのためにシャットダウンし、 + 後でオンラインに復帰させるといったことができます。 + </td></tr> + <tr><td>loadfactor</td> + <td>1</td> + <td>ワーカーあたりの負荷係数です。BalancerMember で使います。 + 1 から 100 までの数字でそのワーカーに対する正規化された負荷率を指定します。 + </td></tr> + <tr><td>route</td> + <td>-</td> + <td>ロードバランサで使った場合、ワーカーのルーティングをします。 + ルートはセッション ID に付加された値になります。 + </td></tr> + <tr><td>redirect</td> + <td>-</td> + <td>ワーカーのリダイレクション経路です。この値は通常は、 + 安全にクラスタからノードを取り去る設定を動的に入れるために使います。 + セッション ID の無いリクエスト全てを指定した場合は、 + この値と同じルーティングパラメータを持つ + BalancerMember にリダイレクトされます。 + </td></tr> + + </table> + + <p>Proxy ディレクティブのスキームが <code>balancer://</code> になっている場合は、 + バックエンドサーバと実際には通信しない仮想ワーカーが生成されます。 + このワーカーは幾つかの "本物の" ワーカーの管理をつかさどります。 + この場合パラメータは、この仮想ワーカーに対して設定されます。 + </p> + <table> + <tr><th>パラメータ</th> + <th>デフォルト値</th> + <th>説明</th></tr> + <tr><td>lbmethod</td> + <td>-</td> + <td>Balancer のロードバランス方法。使用するロードバランスの + スケジューリング方法を選びます。処理したリクエストの数で重み付けする + <code>byrequests</code> か、転送量のバイト数で重み付けする + <code>bytraffic</code> を設定できます。デフォルトは + <code>byrequests</code> です。 + </td></tr> + <tr><td>stickysession</td> + <td>-</td> + <td>バランサーのスティッキーセッション名です。通常はこの値は <code>JSESSIONID</code> + や <code>PHPSESSIONID</code> といったものになりますが、この値は + バックエンドアプリケーションのサポートするセッションに依存します。 + </td></tr> + <tr><td>nofailover</td> + <td>Off</td> + <td><code>On</code> になっていると、ワーカーがエラーを起こしたり + 無効になっている場合にセッションが切れます。 + バックエンドサーバがセッションレプリケーションをサポートしていない場合は、 + On にしてください。 + </td></tr> + <tr><td>timeout</td> + <td>0</td> + <td>バランサーのタイムアウトを秒で指定します。 + この値を設定すると、フリーのワーカーを取得するまでの最大待機時間になります。 + デフォルトでは待機しません。 + </td></tr> + <tr><td>maxattempts</td> + <td>1</td> + <td>フェイルオーバーを試みる最大の回数を指定します。 + </td></tr> + + </table> + <div class="example"><p><code> + ProxyPass /special-area http://special.example.com/ smax=5 max=10<br /> + ProxyPass / balancer://mycluster stickysession=jsessionid nofailover=On<br /> + <Proxy balancer://mycluster><br /> + <span class="indent"> + BalancerMember http://1.2.3.4:8009<br /> + BalancerMember http://1.2.3.5:8009 smax=10<br /> + # Less powerful server, don't send as many requests there<br /> + BalancerMember http://1.2.3.6:8009 smax=1 loadfactor=20<br /> + </span> + </Proxy> + </code></p></div> + + <p><code class="directive"><a href="../mod/core.html#location"><Location></a></code> セクションの中で使われた場合、最初の引数は + 省略され、ローカルディレクトリは <code class="directive"><a href="../mod/core.html#location"><Location></a></code> から取得されます。</p> + + <p>より柔軟なリバースプロキシの設定が必要な場合は、<code>[P]</code> + フラグ付きの <code class="directive"><a href="../mod/mod_rewrite.html#rewriterule">RewriteRule</a></code> + ディレクティブを参照してください。</p> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="ProxyPassInherit" id="ProxyPassInherit">ProxyPassInherit</a> <a name="proxypassinherit" id="proxypassinherit">ディレクティブ</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>Inherit ProxyPass directives defined from the main server</td></tr> +<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>ProxyPassInherit On|Off</code></td></tr> +<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>ProxyPassInherit On</code></td></tr> +<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr> +<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_proxy</td></tr> +<tr><th><a href="directive-dict.html#Compatibility">互換性:</a></th><td>ProxyPassInherit is only available in Apache HTTP Server 2.4.5 and later. + </td></tr> +</table><p>このディレクティブの解説文書は + まだ翻訳されていません。英語版をご覧ください。 + </p></div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="ProxyPassInterpolateEnv" id="ProxyPassInterpolateEnv">ProxyPassInterpolateEnv</a> <a name="proxypassinterpolateenv" id="proxypassinterpolateenv">ディレクティブ</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>Enable Environment Variable interpolation in Reverse Proxy configurations</td></tr> +<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code /></td></tr> +<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト, ディレクトリ</td></tr> +<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_proxy</td></tr> +</table><p>Documentation not yet translated. Please see English version of document.</p> +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="ProxyPassMatch" id="ProxyPassMatch">ProxyPassMatch</a> <a name="proxypassmatch" id="proxypassmatch">ディレクティブ</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>Maps remote servers into the local server URL-space using regular expressions</td></tr> +<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code /></td></tr> +<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト, ディレクトリ</td></tr> +<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_proxy</td></tr> +</table><p>Documentation not yet translated. Please see English version of document.</p> +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="ProxyPassReverse" id="ProxyPassReverse">ProxyPassReverse</a> <a name="proxypassreverse" id="proxypassreverse">ディレクティブ</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>リバースプロキシされたサーバから送られた HTTP 応答ヘッダの +URL を調整する</td></tr> +<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>ProxyPassReverse [<var>path</var>] <var>url</var></code></td></tr> +<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト, ディレクトリ</td></tr> +<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_proxy</td></tr> +</table> + <p>このディレクティブは Apache に HTTP リダイレクト応答の + <code>Location</code>, <code>Content-Location</code>, <code>URI</code> + ヘッダの調整をさせます。これは、Apache がリバースプロキシとして使われている + ときに、リバースプロキシを通さないでアクセスすることを防ぐために + 重要です。これによりバックエンドサーバの HTTP リダイレクトが + リバースプロキシとバックエンドの間で扱われるようになります。</p> + + <p>ディレクティブで明示されている HTTP 応答ヘッダのみが書き換えられます。 + Apache は他の応答ヘッダを書き換えたり、HTML ページの中の URL 参照を + 書き換えたりすることはありません。HTML の中を見て、URL 参照を書き換える + モジュールに Nick Kew さんの <a href="http://apache.webthing.com/mod_proxy_html/">mod_proxy_html</a> があります。</p> + + <p><var>path</var> はローカル仮想パスの名前です。<var>url</var> は + リモートサーバの部分 URL です。これらは <code class="directive"><a href="#proxypass">ProxyPass</a></code> ディレクティブと同様です。</p> + + <p>例えば、ローカルサーバのアドレスが <code>http://example.com/</code> + だとします。すると</p> + + <div class="example"><p><code> + ProxyPass /mirror/foo/ http://backend.example.com/<br /> + ProxyPassReverse /mirror/foo/ http://backend.example.com/<br /> + ProxyPassReverseCookieDomain backend.example.com public.example.com<br /> + ProxyPassReverseCookiePath / /mirror/foo/ + </code></p></div> + + <p>という設定をすると、<code>http://example.com/mirror/foo/bar</code> + へのローカルリクエストが <code>http://backend.example.com/bar</code> + へのプロキシリクエストに内部でリダイレクトされるだけではありません + (これは <code>ProxyPass</code> の機能です)。<code>backend.example.com</code> + が送るリダイレクトの面倒もみます。<code>http://backend.example.com/bar</code> + が <code>http://backend.example.com/quux</code> にリダイレクトされたとき、 + Apache は HTTP リダイレクト応答をクライアントに送る前に、 + <code>http://example.com/mirror/foo/quux</code> に変更します。 + URL を構成するのに使われるホスト名は <code class="directive"><a href="../mod/core.html#usecanonicalname">UseCanonicalName</a></code> の設定に応じて選択されることに + 注意してください。</p> + + <p><code class="directive">ProxyPassReverse</code> ディレクティブは + 対応する <code class="directive"><a href="#proxypass">ProxyPass</a></code> ディレクティブには依存しないため、 + <code class="module"><a href="../mod/mod_rewrite.html">mod_rewrite</a></code> のプロキシ通過機能 + (<code>RewriteRule ... [P]</code>) と併せて使用することができます。</p> + + <p><code class="directive"><a href="../mod/core.html#location"><Location></a></code> セクションの中で使われた場合は、 + 最初の引数は省略され、ローカルディレクトリは <code class="directive"><a href="../mod/core.html#location"><Location></a></code> から取得されます。</p> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="ProxyPassReverseCookieDomain" id="ProxyPassReverseCookieDomain">ProxyPassReverseCookieDomain</a> <a name="proxypassreversecookiedomain" id="proxypassreversecookiedomain">ディレクティブ</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>リバースプロキシサーバからの Set-Cookie ヘッダの Domain 文字列を +調整する</td></tr> +<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>ProxyPassReverseCookieDomain <var>internal-domain</var> <var>public-domain</var></code></td></tr> +<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト, ディレクトリ</td></tr> +<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_proxy</td></tr> +</table> +<p>使用法は基本的に +<code class="directive"><a href="#proxypassreverse">ProxyPassReverse</a></code> と同じですが、 +ヘッダの URL の代わりに <code>Set-Cookie</code> ヘッダの +<code>domain</code> 文字列を書き換えます。</p> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="ProxyPassReverseCookiePath" id="ProxyPassReverseCookiePath">ProxyPassReverseCookiePath</a> <a name="proxypassreversecookiepath" id="proxypassreversecookiepath">ディレクティブ</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>Reverse プロキシサーバからの Set-Cookie ヘッダの Path 文字列を +調整する</td></tr> +<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>ProxyPassReverseCookiePath <var>internal-path</var> <var>public-path</var></code></td></tr> +<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト, ディレクトリ</td></tr> +<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_proxy</td></tr> +</table> +<p>使用法は基本的に +<code class="directive"><a href="#proxypassreverse">ProxyPassReverse</a></code> と同じですが、 +ヘッダの URL の代わりに <code>Set-Cookie</code> ヘッダの +<code>path</code> 文字列を書き換えます。</p> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="ProxyPreserveHost" id="ProxyPreserveHost">ProxyPreserveHost</a> <a name="proxypreservehost" id="proxypreservehost">ディレクティブ</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>プロキシリクエストに、受け付けた Host HTTP ヘッダを使う</td></tr> +<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>ProxyPreserveHost On|Off</code></td></tr> +<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>ProxyPreserveHost Off</code></td></tr> +<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr> +<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_proxy</td></tr> +<tr><th><a href="directive-dict.html#Compatibility">互換性:</a></th><td>Apache 2.0.31 以降で使用可能</td></tr> +</table> + <p>このオプションが有効になっている場合、<code class="directive">ProxyPass</code> + で指定したホスト名の代わりに、受け付けたリクエストの Host: 行を + プロキシ先のホストに送ります。</p> + + <p>このオプションは通常は <code>Off</code> に設定してください。 + ほとんどの場合、これは大量の名前ベースのバーチャルホスティングを行なっていて、 + 元々の Host ヘッダをバックエンドサーバが解釈する必要のあるときのような、 + 特別な設定が必要な場合にのみ有用です。</p> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="ProxyReceiveBufferSize" id="ProxyReceiveBufferSize">ProxyReceiveBufferSize</a> <a name="proxyreceivebuffersize" id="proxyreceivebuffersize">ディレクティブ</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>プロキシされる HTTP と FTP 接続のためのネットワークバッファサイズ</td></tr> +<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>ProxyReceiveBufferSize <var>bytes</var></code></td></tr> +<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>ProxyReceiveBufferSize 0</code></td></tr> +<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr> +<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_proxy</td></tr> +</table> + <p><code class="directive">ProxyReceiveBufferSize</code> ディレクティブは + スループットを上げるために明示的に (TCP/IP) ネットワークバッファのサイズを + 設定します。値は <code>512</code> 以上か、システムのデフォルトのバッファ + サイズを意味する <code>0</code> でなければなりません。</p> + + <div class="example"><h3>例</h3><p><code> + ProxyReceiveBufferSize 2048 + </code></p></div> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="ProxyRemote" id="ProxyRemote">ProxyRemote</a> <a name="proxyremote" id="proxyremote">ディレクティブ</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>特定のリクエストを扱う時に使われるリモートプロキシを指定する</td></tr> +<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>ProxyRemote <var>match</var> <var>remote-server</var></code></td></tr> +<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr> +<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_proxy</td></tr> +</table> + <p>このディレクティブはこのプロキシに対するリモートプロキシを定義します。 + <var>match</var> はリモートサーバがサポートする URL スキーム、 + リモートサーバが使うはずの URL の一部分、サーバがすべての + リクエストに使われることを示す <code>*</code> のどれかになります。 + <var>remote-server</var> はリモートサーバの部分 URL です。構文:</p> + + <div class="example"><p><code> + <dfn>remote-server</dfn> = + <var>scheme</var>://<var>hostname</var>[:<var>port</var>] + </code></p></div> + + <p><var>scheme</var> は実際上リモートサーバとの通信に使われるプロトコルを + 決定します。このモジュールでは <code>http</code> だけがサポートされて + います。</p> + + <div class="example"><h3>例</h3><p><code> + ProxyRemote http://goodguys.com/ http://mirrorguys.com:8000<br /> + ProxyRemote * http://cleversite.com<br /> + ProxyRemote ftp http://ftpproxy.mydomain.com:8080 + </code></p></div> + + <p>この例では、プロキシは FTP リクエストを別の HTTP リクエストで包んで + そのようなリクエストを扱える別のプロキシに転送します。</p> + + <p>このオプションはリバースプロキシの設定もサポートします。 + サーバが別のフォワードプロキシの後ろに隠されている場合でも + バックエンドウェブサーバをバーチャルホストの URL 空間に入れることが + できます。</p> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="ProxyRemoteMatch" id="ProxyRemoteMatch">ProxyRemoteMatch</a> <a name="proxyremotematch" id="proxyremotematch">ディレクティブ</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>正規表現でのマッチによるリクエストを扱うリモートプロキシの指定</td></tr> +<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>ProxyRemoteMatch <var>regex</var> <var>remote-server</var></code></td></tr> +<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr> +<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_proxy</td></tr> +</table> + <p><code class="directive">ProxyRemoteMatch</code> は最初の引数がリクエストされた + URL にマッチする<a class="glossarylink" href="../glossary.html#regex" title="用語集を参照">正規表現</a>であることを除けば <code class="directive"><a href="#proxyremote">ProxyRemote</a></code> ディレクティブと同じです。</p> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="ProxyRequests" id="ProxyRequests">ProxyRequests</a> <a name="proxyrequests" id="proxyrequests">ディレクティブ</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>フォワード (標準の) プロキシリクエストを有効にする</td></tr> +<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>ProxyRequests On|Off</code></td></tr> +<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>ProxyRequests Off</code></td></tr> +<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr> +<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_proxy</td></tr> +</table> + <p>これは Apache のフォワードプロキシサーバとしての動作を + 有効もしくは無効にします。(ProxyRequests を <code>Off</code> に + 設定しても、<code class="directive"><a href="#proxypass">ProxyPass</a></code> + の設定は無効になりません。)</p> + + <p>通常のリバースプロキシの設定では、このオプションは <code>Off</code> + に設定してください。</p> + + <p>HTTP や FTP サイトへのプロキシの機能を有効にしたい場合は、 + <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code> や <code class="module"><a href="../mod/mod_proxy_ftp.html">mod_proxy_ftp</a></code> が + サーバに組み込まれていなければなりません。</p> + + <div class="warning"><h3>警告</h3> + <p><a href="#access">サーバを安全にする</a>まで <code class="directive"><a href="#proxyrequests">ProxyRequests</a></code> は有効にしないでください。 + オープンプロキシサーバはあなた自身のネットワークにとっても、 + インターネット全体にとっても危険です。</p> + </div> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="ProxySet" id="ProxySet">ProxySet</a> <a name="proxyset" id="proxyset">ディレクティブ</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>Set various Proxy balancer or member parameters</td></tr> +<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code /></td></tr> +<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>ディレクトリ</td></tr> +<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_proxy</td></tr> +</table><p>Documentation not yet translated. Please see English version of document.</p> +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="ProxySourceAddress" id="ProxySourceAddress">ProxySourceAddress</a> <a name="proxysourceaddress" id="proxysourceaddress">ディレクティブ</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>Set local IP address for outgoing proxy connections</td></tr> +<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>ProxySourceAddress <var>address</var></code></td></tr> +<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr> +<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_proxy</td></tr> +<tr><th><a href="directive-dict.html#Compatibility">互換性:</a></th><td>Available in version 2.3.9 and later</td></tr> +</table><p>このディレクティブの解説文書は + まだ翻訳されていません。英語版をご覧ください。 + </p></div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="ProxyStatus" id="ProxyStatus">ProxyStatus</a> <a name="proxystatus" id="proxystatus">ディレクティブ</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>Show Proxy LoadBalancer status in mod_status</td></tr> +<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code /></td></tr> +<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr> +<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_proxy</td></tr> +</table><p>Documentation not yet translated. Please see English version of document.</p> +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="ProxyTimeout" id="ProxyTimeout">ProxyTimeout</a> <a name="proxytimeout" id="proxytimeout">ディレクティブ</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>プロキシされたリクエストのネットワークタイムアウト</td></tr> +<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>ProxyTimeout <var>seconds</var></code></td></tr> +<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>ProxyTimeout 300</code></td></tr> +<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr> +<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_proxy</td></tr> +<tr><th><a href="directive-dict.html#Compatibility">互換性:</a></th><td>Apache 2.0.31 以降で使用可能</td></tr> +</table> + <p>このディレクティブはユーザがプロキシリクエストのタイムアウトを + 指定できるようにします。これはハングしてしまう遅い、もしくは挙動の + 怪しいサーバがあり、サーバがデータを返すまでひたすら待ち続けるよりも + タイムアウトを返してより緩やかに<span class="transnote">(<em>訳注:</em> graceful に)</span> + 失敗させたい場合に役に立ちます。</p> + +</div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="directive-section"><h2><a name="ProxyVia" id="ProxyVia">ProxyVia</a> <a name="proxyvia" id="proxyvia">ディレクティブ</a></h2> +<table class="directive"> +<tr><th><a href="directive-dict.html#Description">説明:</a></th><td>プロキシされたリクエストの <code>Via</code> HTTP 応答ヘッダ +により提供される情報</td></tr> +<tr><th><a href="directive-dict.html#Syntax">構文:</a></th><td><code>ProxyVia On|Off|Full|Block</code></td></tr> +<tr><th><a href="directive-dict.html#Default">デフォルト:</a></th><td><code>ProxyVia Off</code></td></tr> +<tr><th><a href="directive-dict.html#Context">コンテキスト:</a></th><td>サーバ設定ファイル, バーチャルホスト</td></tr> +<tr><th><a href="directive-dict.html#Status">ステータス:</a></th><td>Extension</td></tr> +<tr><th><a href="directive-dict.html#Module">モジュール:</a></th><td>mod_proxy</td></tr> +</table> + <p>このディレクティブはプロキシの <code>Via:</code> HTTP ヘッダの使用を + 制御します。想定されている使い方は、プロキシサーバがいくつも繋がっているときに + プロキシリクエストの流れを制御することです。<code>Via:</code> ヘッダ行の + 説明は <a href="http://www.ietf.org/rfc/rfc2616.txt">RFC 2616</a> (HTTP/1.1) + の 14.45 節を読んでください。</p> + + <ul> + <li>デフォルトの <code>Off</code> に設定されていると、特別な処理は + 行なわれません。リクエストやリプライに <code>Via:</code> ヘッダがあれば、 + 変更されずにそのまま渡します。</li> + + <li><code>On</code> に設定されていれば、各リクエストとリプライに + <code>Via:</code> 行が追加されます。</li> + + <li><code>Full</code> に設定されていれば、<code>Via:</code> ヘッダは + コメント部分に Apache サーバのバージョンも含むようになります。</li> + + <li><code>Block</code> に設定されていれば、すべてのプロキシリクエストから + <code>Via:</code> ヘッダが取り除かれます。新たに <code>Via:</code> が + 生成されることはありません。</li> + </ul> + +</div> +</div> +<div class="bottomlang"> +<p><span>翻訳済み言語: </span><a href="../en/mod/mod_proxy.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../fr/mod/mod_proxy.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/mod/mod_proxy.html" title="Japanese"> ja </a></p> +</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">コメント</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed 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 Libera.chat, or sent to our <a href="https://httpd.apache.org/lists.html">mailing lists</a>.</div> +<script type="text/javascript"><!--//--><![CDATA[//><!-- +var comments_shortname = 'httpd'; +var comments_identifier = 'http://httpd.apache.org/docs/2.4/mod/mod_proxy.html'; +(function(w, d) { + if (w.location.hostname.toLowerCase() == "httpd.apache.org") { + d.write('<div id="comments_thread"><\/div>'); + var s = d.createElement('script'); + s.type = 'text/javascript'; + s.async = true; + s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; + (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); + } + else { + d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); + } +})(window, document); +//--><!]]></script></div><div id="footer"> +<p class="apache">Copyright 2023 The Apache Software Foundation.<br />この文書は <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a> のライセンスで提供されています。.</p> +<p class="menu"><a href="../mod/">モジュール</a> | <a href="../mod/directives.html">ディレクティブ</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">用語</a> | <a href="../sitemap.html">サイトマップ</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script> +</body></html>
\ No newline at end of file |