no way to compare when less than two revisions

Differences

This shows you the differences between two versions of the page.


apache_fcgid [2015/06/01 21:34] (current) – created - external edit 127.0.0.1
Line 1: Line 1:
 +====== Apache fcgid ======
  
 +  * [[Apache]]
 +  * [[Apache suExec]]
 +  * [[apxs]]
 +  * [[AMP Stack]]
 +  * [[PHP CGI]]
 +
 +  * [[http://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html|Apache Module mod_fcgid]]
 +
 +Any program assigned to the handler fcgid-script is processed using the FastCGI protocoll; ''mod_fcgid'' starts a sufficient number instances of the program to handle concurrent requests, and these programs remain running to handle further incoming requests.
 +
 +Specific executables are assigned this handler either by having a name containing an extension defined by the AddHandler directive, or with an override using the SetHandler directive (e.g., for all files in a specific directory such as cgi-bin).
 +
 +==== PHP ====
 +
 +PHP applications are usually configured using the ''FcgidWrapper'' directive and a corresponding wrapper script. The wrapper script can be an appropriate place to define any environment variables required by the application, such as ''PHP_FCGI_MAX_REQUESTS'' or anything else. (Environment variables can also be set with ''FcgidInitialEnv'', but they then apply to all applications.)
 +
 +==== Apache Installation ====
 +
 +The only variable that needs to be set during installation is APXS.  By default it will look at ''/usr/sbin/apxs''.
 +
 +<code>
 +APXS=/usr/local/steve/apache2/bin/apxs ./configure.apxs
 +make
 +make install
 +</code>
 +
 +==== Apache Configuration ====
 +
 +First, make sure that mod_fcgid is loaded
 +
 +<code>
 +<IfModule !fcgid_module>
 +        LoadModule fcgid_module modules/mod_fcgid.so
 +</IfModule>
 +</code>
 +
 +After creating the PHP wrapper script to the ''php-cgi'' binary, assign it to handle files with the ''.php'' extension:
 +
 +<code>
 +<IfModule fcgid_module>
 +        AddHandler fcgid-script .php
 +        FcgidWrapper /var/www/fcgi-bin/php-wrapper .php
 +        <Directory /var/www/fcgi-bin/>
 +                SetHandler fcgid-script
 +                Options +ExecCGI
 +                Order allow,deny
 +                Allow from all
 +        </Directory>
 +</IfModule>
 +</code>
 +
 +For a VirtualHost entry, it must also have the ''ExecCGI'' option enabled:
 +
 +<code>
 +<VirtualHost *:80>
 +        ServerName qa.beandog.org
 +        DocumentRoot "/var/www/html/qa"
 +        <Directory "/var/www/html/qa">
 +                Options +ExecCGI
 +                Order allow,deny
 +                Allow from all
 +        </Directory>
 +</VirtualHost>
 +</code>
 +
 +<code>
 +# FcgidMaxRequestsPerProcess should be <= PHP_FCGI_MAX_REQUESTS
 +# The example PHP wrapper script overrides the default PHP setting.
 +# Default PHP_FCGI_MAX_REQUESTS is 500
 +# FcgidMaxRequestsPerProcess 10000
 +
 +# Uncomment the following line if cgi.fix_pathinfo is set to 1 in
 +# php.ini:
 +# Default cgi.fix_pathinfo is 1
 +FcgidFixPathinfo 1
 +
 +Alias /phpapp/ /usr/local/phpapp/
 +<Location /phpapp/>
 +AddHandler fcgid-script .php
 +Options +ExecCGI
 +FcgidWrapper /usr/local/bin/php-wrapper .php
 +
 +# Customize the next two directives for your requirements.
 +Order allow,deny
 +Allow from all
 +</Location>
 +</code>
 +
 +== Sample PHP Wrapper Script ==
 +
 +<code>
 +#!/bin/sh
 +# Set desired PHP_FCGI_* environment variables.
 +# Example:
 +# PHP FastCGI processes exit after 500 requests by default.
 +PHP_FCGI_MAX_REQUESTS=10000
 +export PHP_FCGI_MAX_REQUESTS
 +
 +# Replace with the path to your FastCGI-enabled PHP executable
 +exec /usr/local/bin/php-cgi
 +</code>
 +
 +==== Setup CGI User Environment ====
 +
 +  * Create ''/var/www/client.com/htdocs'' as well as ''/var/www/client.com/cgi-bin''
 +  * Create a new user ''client-www''
 +    * Home directory: ''/var/www/client.com''
 +    * Shell: ''/bin/sh''
 +    * No login allowed
 +    * New group with same name as user
 +    * User ID >= 1000
 +    * Group ID >= 1000
 +    * Don't copy skeleton files
 +
 +==== Timeout ====
 +
 +By default, CGI requests time out at 40 seconds.  The amount can be modified using 
 +''FcgidIOTimeout'' globally in httpd.conf or in a virtualhost.
 +
 +<code>
 +FcgidIOTimeout 90
 +</code>

Navigation
QR Code
QR Code apache_fcgid (generated for current page)