<?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_http - Apache HTTP Server Version 2.5</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/quickreference.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.5</p>
<img alt="" src="../images/feather.png" /></div>
<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
<div id="path">
<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="../">Version 2.5</a> &gt; <a href="./">Modules</a></div>
<div id="page-content">
<div id="preamble"><h1>Apache Module mod_proxy_http</h1>
<div class="toplang">
<p><span>Available Languages: </span><a href="../en/mod/mod_proxy_http.html" title="English">&nbsp;en&nbsp;</a> |
<a href="../fr/mod/mod_proxy_http.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a></p>
</div>
<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>HTTP support module for
<code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code></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_http_module</td></tr>
<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_proxy_http.c</td></tr></table>
<h3>Summary</h3>

    <p>This module <em>requires</em> the service of <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code>. It provides the features used for
    proxying HTTP and HTTPS requests. <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code>
    supports HTTP/0.9, HTTP/1.0 and HTTP/1.1. It does <em>not</em>
    provide any caching abilities. If you want to set up a caching
    proxy, you might want to use the additional service of the
    <code class="module"><a href="../mod/mod_cache.html">mod_cache</a></code> module.</p>

    <p>Thus, in order to get the ability of handling HTTP proxy requests,
    <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> and <code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code>
    have to be present in the server.</p>

    <div class="warning"><h3>Warning</h3>
      <p>Do not enable proxying until you have <a href="mod_proxy.html#access">secured your server</a>. Open proxy
      servers are dangerous both to your network and to the Internet at
      large.</p>
    </div>
</div>
<div id="quickview"><h3>Topics</h3>
<ul id="topics">
<li><img alt="" src="../images/down.gif" /> <a href="#env">Environment Variables</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#notes">Request notes</a></li>
</ul><h3 class="directives">Directives</h3>
<p>This module provides no
            directives.</p>
<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__&amp;list_id=144532&amp;product=Apache%20httpd-2&amp;query_format=specific&amp;order=changeddate%20DESC%2Cpriority%2Cbug_severity&amp;component=mod_proxy_http">Known issues</a></li><li><a href="https://bz.apache.org/bugzilla/enter_bug.cgi?product=Apache%20httpd-2&amp;component=mod_proxy_http">Report a bug</a></li></ul><h3>See also</h3>
<ul class="seealso">
<li><code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code></li>
<li><code class="module"><a href="../mod/mod_proxy_connect.html">mod_proxy_connect</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="env" id="env">Environment Variables</a> <a title="Permanent link" href="#env" class="permalink">&para;</a></h2>
    <p>In addition to the configuration directives that control the
    behaviour of <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code>, there are a number of
    <dfn>environment variables</dfn> that control the HTTP protocol
    provider. Environment variables below that don't specify specific values
    are enabled when set to any value.</p>
    <dl>
        <dt>proxy-sendextracrlf</dt>
        <dd>Causes proxy to send an extra CR-LF newline on the end of a
        request.  This is a workaround for a bug in some browsers.</dd>
        <dt>force-proxy-request-1.0</dt>
        <dd>Forces the proxy to send requests to the backend as HTTP/1.0
        and disables HTTP/1.1 features.</dd>
        <dt>proxy-nokeepalive</dt>
        <dd>Forces the proxy to close the backend connection after
        each request.</dd>
        <dt>proxy-chain-auth</dt>
        <dd>If the proxy requires authentication, it will read and
        consume the proxy authentication credentials sent by the client.
        With <var>proxy-chain-auth</var> it will <em>also</em> forward
        the credentials to the next proxy in the chain.  This may
        be necessary if you have a chain of proxies that share
        authentication information.  <strong>Security Warning:</strong>
        Do not set this unless you know you need it, as it forwards
        sensitive information!</dd>
        <dt>proxy-sendcl</dt>
        <dd>HTTP/1.0 required all HTTP requests that include a body
        (e.g. POST requests) to include a <var>Content-Length</var>
        header.  This environment variable forces the Apache proxy to
        send this header to the backend server, regardless of what the
        Client sent to the proxy.  It ensures compatibility when
        proxying for an HTTP/1.0 or unknown backend.  However, it
        may require the entire request to be buffered by the proxy,
        so it becomes very inefficient for large requests.</dd>
        <dt>proxy-sendchunks or proxy-sendchunked</dt>
        <dd>This is the opposite of <var>proxy-sendcl</var>.  It allows
        request bodies to be sent to the backend using chunked transfer
        encoding.  This allows the request to be efficiently streamed,
        but requires that the backend server supports HTTP/1.1.</dd>
        <dt>proxy-interim-response</dt>
        <dd>This variable takes values <code>RFC</code> (the default) or
        <code>Suppress</code>.  Earlier httpd versions would suppress
        HTTP interim (1xx) responses sent from the backend.  This is
        technically a violation of the HTTP protocol.  In practice,
        if a backend sends an interim response, it may itself be
        extending the protocol in a manner we know nothing about,
        or just broken.  So this is now configurable: set
        <code>proxy-interim-response RFC</code> to be fully protocol
        compliant, or <code>proxy-interim-response Suppress</code>
        to suppress interim responses.</dd>
        <dt>proxy-initial-not-pooled</dt>
        <dd>If this variable is set, no pooled connection will be reused
        if the client request is the initial request on the frontend connection. This avoids
        the "proxy: error reading status line from remote server" error message
        caused by the race condition that the backend server closed the
        pooled connection after the connection check by the proxy and
        before data sent by the proxy reached the backend. It has to be
        kept in mind that setting this variable downgrades performance,
        especially with HTTP/1.0 clients.
        </dd>
    </dl>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="notes" id="notes">Request notes</a> <a title="Permanent link" href="#notes" class="permalink">&para;</a></h2>
    <p><code class="module"><a href="../mod/mod_proxy_http.html">mod_proxy_http</a></code> creates the following request notes for
        logging using the <code>%{VARNAME}n</code> format in
        <code class="directive"><a href="../mod/mod_log_config.html#logformat">LogFormat</a></code> or
        <code class="directive"><a href="../mod/core.html#errorlogformat">ErrorLogFormat</a></code>:
    </p>
    <dl>
        <dt>proxy-source-port</dt>
        <dd>The local port used for the connection to the backend server.</dd>
        <dt>proxy-status</dt>
        <dd>The HTTP status received from the backend server.</dd>
    </dl>
</div>
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_proxy_http.html" title="English">&nbsp;en&nbsp;</a> |
<a href="../fr/mod/mod_proxy_http.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</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&amp;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/trunk/mod/mod_proxy_http.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/quickreference.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>