====== 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''.
APXS=/usr/local/steve/apache2/bin/apxs ./configure.apxs
make
make install
==== Apache Configuration ====
First, make sure that mod_fcgid is loaded
LoadModule fcgid_module modules/mod_fcgid.so
After creating the PHP wrapper script to the ''php-cgi'' binary, assign it to handle files with the ''.php'' extension:
AddHandler fcgid-script .php
FcgidWrapper /var/www/fcgi-bin/php-wrapper .php
SetHandler fcgid-script
Options +ExecCGI
Order allow,deny
Allow from all
For a VirtualHost entry, it must also have the ''ExecCGI'' option enabled:
ServerName qa.beandog.org
DocumentRoot "/var/www/html/qa"
Options +ExecCGI
Order allow,deny
Allow from all
# 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/
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
== Sample PHP Wrapper Script ==
#!/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
==== 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.
FcgidIOTimeout 90