<?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_fcgi - 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="&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.4</a> &gt; <a href="./">Modules</a></div>
<div id="page-content">
<div id="preamble"><h1>Apache Module mod_proxy_fcgi</h1>
<div class="toplang">
<p><span>Available Languages: </span><a href="../en/mod/mod_proxy_fcgi.html" title="English">&nbsp;en&nbsp;</a> |
<a href="../fr/mod/mod_proxy_fcgi.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>FastCGI 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_fcgi_module</td></tr>
<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_proxy_fcgi.c</td></tr>
<tr><th><a href="module-dict.html#Compatibility">Compatibility:</a></th><td>Available in version 2.3 and later</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 support for the
    <a href="http://www.fastcgi.com/">FastCGI</a> protocol.</p>

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

    <p>Unlike <a href="http://httpd.apache.org/mod_fcgid/">mod_fcgid</a>
    and <a href="http://www.fastcgi.com/">mod_fastcgi</a>,
    <code class="module"><a href="../mod/mod_proxy_fcgi.html">mod_proxy_fcgi</a></code> has no provision for starting the
    application process; <code class="program"><a href="../programs/fcgistarter.html">fcgistarter</a></code> is provided
    (on some platforms) for that purpose. Alternatively, external launching
    or process management may be available in the FastCGI application
    framework in use.</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"><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="#examples">Examples</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#env">Environment Variables</a></li>
</ul><h3 class="directives">Directives</h3>
<ul id="toc">
<li><img alt="" src="../images/down.gif" /> <a href="#proxyfcgibackendtype">ProxyFCGIBackendType</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#proxyfcgisetenvif">ProxyFCGISetEnvIf</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__&amp;list_id=144532&amp;product=Apache%20httpd-2&amp;query_format=specific&amp;order=changeddate%20DESC%2Cpriority%2Cbug_severity&amp;component=mod_proxy_fcgi">Known issues</a></li><li><a href="https://bz.apache.org/bugzilla/enter_bug.cgi?product=Apache%20httpd-2&amp;component=mod_proxy_fcgi">Report a bug</a></li></ul><h3>See also</h3>
<ul class="seealso">
<li><code class="program"><a href="../programs/fcgistarter.html">fcgistarter</a></code></li>
<li><code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code></li>
<li><code class="module"><a href="../mod/mod_authnz_fcgi.html">mod_authnz_fcgi</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="examples" id="examples">Examples</a></h2>
    <p>Remember, in order to make the following examples work, you have to
    enable <code class="module"><a href="../mod/mod_proxy.html">mod_proxy</a></code> and <code class="module"><a href="../mod/mod_proxy_fcgi.html">mod_proxy_fcgi</a></code>.</p>

    <div class="example"><h3>Single application instance</h3><pre class="prettyprint lang-config">ProxyPass "/myapp/" "fcgi://localhost:4000/"</pre>
</div>

    <p> <code class="module"><a href="../mod/mod_proxy_fcgi.html">mod_proxy_fcgi</a></code> disables connection reuse by
    default, so after a request has been completed the connection will NOT be
    held open by that httpd child process and won't be reused.  If the
    FastCGI application is able to handle concurrent connections
    from httpd, you can opt-in to connection reuse as shown in the following
    example:</p>

    <div class="example"><h3>Single application instance, connection reuse (2.4.11 and later)</h3><pre class="prettyprint lang-config">ProxyPass "/myapp/" "fcgi://localhost:4000/" enablereuse=on</pre>
</div>

    <div class="note"><h3>Enable connection reuse to a FCGI backend like PHP-FPM</h3>
    <p>Please keep in mind that PHP-FPM (at the time of writing, February 2018)
    uses a prefork model, namely each of its worker processes can handle one
    connection at the time.<br /> 
    By default mod_proxy (configured with <code>enablereuse=on</code>)
    allows a connection pool of
    <code class="directive"><a href="../mod/mpm_common.html#threadsperchild">ThreadsPerChild</a></code> connections to the
    backend for each httpd process when using a threaded mpm (like
    <code class="module"><a href="../mod/worker.html">worker</a></code> or <code class="module"><a href="../mod/event.html">event</a></code>),
    so the following use cases should be taken into account:</p>
    <ul>
      <li>Under HTTP/1.1 load it will likely cause the creation of up to
      <code class="directive"><a href="../mod/mpm_common.html#maxrequestworkers">MaxRequestWorkers</a></code>
      connections to the FCGI backend.</li>
      <li>Under HTTP/2 load, due to how <code class="module"><a href="../mod/mod_http2.html">mod_http2</a></code> is implemented,
      there are additional h2 worker threads that may force the creation of other
      backend connections. The overall count of connections in the pools may raise
      to more than <code class="directive"><a href="../mod/mpm_common.html#maxrequestworkers">MaxRequestWorkers</a></code>.</li>
    </ul>
    <p>The maximum number of PHP-FPM worker processes needs to be configured wisely,
    since there is the chance that they will all end up "busy" handling idle
    persistent connections, without any room for new ones to be established,
    and the end user experience will be a pile of HTTP request timeouts.</p>
    </div>

    <p> The following example passes the request URI as a filesystem
    path for the PHP-FPM daemon to run. The request URL is implicitly added
    to the 2nd parameter. The hostname and port following fcgi:// are where
    PHP-FPM is listening.  Connection pooling/reuse is enabled.</p>
    <div class="example"><h3>PHP-FPM</h3><pre class="prettyprint lang-config">ProxyPassMatch "^/myapp/.*\.php(/.*)?$" "fcgi://localhost:9000/var/www/" enablereuse=on</pre>
</div>

    <p> The following example passes the request URI as a filesystem
    path for the PHP-FPM daemon to run. In this case, PHP-FPM is listening on
    a unix domain socket (UDS).  Requires 2.4.9 or later. With this syntax,
    the hostname and optional port following fcgi:// are ignored.</p>
    <div class="example"><h3>PHP-FPM with UDS</h3><pre class="prettyprint lang-config">ProxyPassMatch "^/(.*\.php(/.*)?)$" "unix:/var/run/php5-fpm.sock|fcgi://localhost/var/www/"</pre>
</div>

    <p>The balanced gateway needs <code class="module"><a href="../mod/mod_proxy_balancer.html">mod_proxy_balancer</a></code> and
    at least one load balancer algorithm module, such as
    <code class="module"><a href="../mod/mod_lbmethod_byrequests.html">mod_lbmethod_byrequests</a></code>, in addition to the proxy
    modules listed above.  <code class="module"><a href="../mod/mod_lbmethod_byrequests.html">mod_lbmethod_byrequests</a></code> is the
    default, and will be used for this example configuration.</p>

    <div class="example"><h3>Balanced gateway to multiple application instances</h3><pre class="prettyprint lang-config">ProxyPass "/myapp/" "balancer://myappcluster/"
&lt;Proxy "balancer://myappcluster/"&gt;
    BalancerMember "fcgi://localhost:4000"
    BalancerMember "fcgi://localhost:4001"
&lt;/Proxy&gt;</pre>
</div>

      <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.
        This feature is available in Apache HTTP Server 2.4.10 and later. For performance
       reasons, you will want to define a <a href="mod_proxy.html#workers">worker</a>
       representing the same fcgi:// backend. The benefit of this form is that it
       allows the normal mapping of URI to filename to occur in the server, and the
       local filesystem result is passed to the backend.  When FastCGI is
       configured this way, the server can calculate the most accurate
       PATH_INFO.
      </p>
    <div class="example"><h3>Proxy via Handler</h3><pre class="prettyprint lang-config">&lt;FilesMatch "\.php$"&gt;
    # Note: The only part that varies is /path/to/app.sock
    SetHandler  "proxy:unix:/path/to/app.sock|fcgi://localhost/"
&lt;/FilesMatch&gt;

# Define a matching worker.
# The part that is matched to the SetHandler is the part that
# follows the pipe. If you need to distinguish, "localhost; can
# be anything unique.
&lt;Proxy "fcgi://localhost/" enablereuse=on max=10&gt;
&lt;/Proxy&gt;

&lt;FilesMatch ...&gt;
    SetHandler  "proxy:fcgi://localhost:9000"
&lt;/FilesMatch&gt;

&lt;FilesMatch ...&gt;
    SetHandler  "proxy:balancer://myappcluster/"
&lt;/FilesMatch&gt;</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="env" id="env">Environment Variables</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 FCGI protocol
    provider:</p>
    <dl>
        <dt>proxy-fcgi-pathinfo</dt>
        <dd>When configured via <code class="directive"><a href="../mod/mod_proxy.html#proxypass">ProxyPass</a></code> or  <code class="directive"><a href="../mod/mod_proxy.html#proxypassmatch">ProxyPassMatch</a></code>, <code class="module"><a href="../mod/mod_proxy_fcgi.html">mod_proxy_fcgi</a></code> will not
        set the <var>PATH_INFO</var> environment variable. This allows
        the backend FCGI server to correctly determine <var>SCRIPT_NAME</var>
        and <var>Script-URI</var> and be compliant with RFC 3875 section 3.3.
        If instead you need <code class="module"><a href="../mod/mod_proxy_fcgi.html">mod_proxy_fcgi</a></code> to generate
        a "best guess" for <var>PATH_INFO</var>, set this env-var.
        This is a workaround for a bug in some FCGI implementations.  This
        variable can be set to multiple values to tweak at how the best guess
        is chosen (In 2.4.11 and later only):
        <dl>
          <dt>first-dot</dt>
          <dd>PATH_INFO is split from the slash following the
              <em>first</em> "." in the URL.</dd>
          <dt>last-dot</dt>
          <dd>PATH_INFO is split from the slash following the
              <em>last</em> "." in the URL.</dd>
          <dt>full</dt>
          <dd>PATH_INFO is calculated by an attempt to map the URL to the
              local filesystem.</dd>
          <dt>unescape</dt>
          <dd>PATH_INFO is the path component of the URL, unescaped /
              decoded.</dd>
          <dt>any other value</dt>
          <dd>PATH_INFO is the same as the path component of the URL.
              Originally, this was the only proxy-fcgi-pathinfo option.</dd>
         </dl>
        </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="ProxyFCGIBackendType" id="ProxyFCGIBackendType">ProxyFCGIBackendType</a> <a name="proxyfcgibackendtype" id="proxyfcgibackendtype">Directive</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Specify the type of backend FastCGI application</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyFCGIBackendType FPM|GENERIC</code></td></tr>
<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>ProxyFCGIBackendType FPM</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</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_fcgi</td></tr>
<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in version 2.4.26 and later</td></tr>
</table>
<p>This directive allows the type of backend FastCGI application to be
specified. Some FastCGI servers, such as PHP-FPM,  use historical quirks of
environment variables to identify the type of proxy server being used.  Set
this directive to "GENERIC" if your non PHP-FPM application has trouble
interpreting environment variables such as SCRIPT_FILENAME or PATH_TRANSLATED
as set by the server.</p>

<p>One example of values that change based on the setting of this directive is
SCRIPT_FILENAME. When using <code class="module"><a href="../mod/mod_proxy_fcgi.html">mod_proxy_fcgi</a></code> historically,
SCRIPT_FILENAME was prefixed with the string "proxy:fcgi://". This variable is
what some generic FastCGI applications would read as their script input, but
PHP-FPM would strip the prefix then remember it was talking to Apache.  In
2.4.21 through 2.4.25, this prefix was automatically stripped by the server,
breaking the ability of PHP-FPM to detect and interoperate with Apache in some
scenarios.</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="ProxyFCGISetEnvIf" id="ProxyFCGISetEnvIf">ProxyFCGISetEnvIf</a> <a name="proxyfcgisetenvif" id="proxyfcgisetenvif">Directive</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Allow variables sent to FastCGI servers to be fixed up</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ProxyFCGISetEnvIf <var>conditional-expression</var>
    [!]<var>environment-variable-name</var>
    [<var>value-expression</var>]</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</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_fcgi</td></tr>
<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in version 2.4.26 and later</td></tr>
</table>
<p>Just before passing a request to the configured FastCGI server, the core of
the web server sets a number of environment variables based on details of the
current request. FastCGI programs often uses these environment variables
as inputs that determine what underlying scripts they will process, or what
output they directly produce.</p>
<p>Examples of noteworthy environment variables are:</p>
<ul>
  <li>SCRIPT_NAME</li>
  <li>SCRIPT_FILENAME</li>
  <li>REQUEST_URI</li>
  <li>PATH_INFO</li>
  <li>PATH_TRANSLATED</li>
</ul>

<p>This directive allows the environment variables above, or any others of
interest, to be overridden.  This directive is evaluated after the initial
values for these variables are set, so they can be used as input into both
the condition expressions and value expressions.</p>
<p>Parameter syntax:</p>
<dl>
<dt>conditional-expression</dt>
<dd>Specifies an expression that controls whether the environment variable that
   follows will be modified.  For information on the expression syntax, see
   the examples that follow or the full specification at the
   <a href="../expr.html">ap_expr</a> documentation.
   </dd>
<dt>environment-variable-name</dt>
<dd> Specifies the CGI environment variable to change,
   such as PATH_INFO. If preceded by an exclamation point, the variable 
   will be unset.</dd>
<dt>value-expression</dt>
<dd>Specifies the replacement value for the preceding environment variable.
   Backreferences, such as "$1", can be included from regular expression
   captures in <var>conditional-expression</var>. If omitted, the variable is
   set (or overridden) to an empty string — but see the Note below.</dd>
</dl>

<div class="example"><pre class="prettyprint lang-config"># A basic, unconditional override
ProxyFCGISetEnvIf "true" PATH_INFO "/example"

# Use an environment variable in the value
ProxyFCGISetEnvIf "true" PATH_INFO "%{reqenv:SCRIPT_NAME}"

# Use captures in the conditions and backreferences in the replacement
ProxyFCGISetEnvIf "reqenv('PATH_TRANSLATED') =~ m|(/.*prefix)(\d+)(.*)|" PATH_TRANSLATED "$1$3"</pre>
</div>

<div class="note"><h3>Note: Unset vs. Empty</h3>
  The following will unset <code>VARIABLE</code>, preventing it from being sent
  to the FastCGI server:

    <pre class="prettyprint lang-config">ProxyFCGISetEnvIf true !VARIABLE</pre>


  Whereas the following will erase any existing <em>value</em> of
  <code>VARIABLE</code> (by setting it to the empty string), but the empty
  <code>VARIABLE</code> will still be sent to the server:

    <pre class="prettyprint lang-config">ProxyFCGISetEnvIf true VARIABLE</pre>


  The CGI/1.1 specification
  <a href="https://tools.ietf.org/html/rfc3875#section-4.1">does not
  distinguish</a> between a variable with an empty value and a variable that
  does not exist. However, many CGI and FastCGI implementations distinguish (or
  allow scripts to distinguish) between the two. The choice of which to use is
  dependent upon your implementation and your reason for modifying the variable.
</div>


</div>
</div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/mod_proxy_fcgi.html" title="English">&nbsp;en&nbsp;</a> |
<a href="../fr/mod/mod_proxy_fcgi.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 Freenode, 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_fcgi.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 2021 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>