PHP mit FastCGI

Apache2-Prefork & FastCGI
Apache + Chroot + FastCGI + PHP FAQ
Does PHP work with FastCGI?

mod_fcgid Permission Problems

[Sun Jun 08 21:19:52 2014] [notice] Apache/2.2.27 (FreeBSD) PHP/5.5.12 mod_fcgid/2.3.9 DAV/2 configured -- resuming normal operations
[Sun Jun 08 21:19:52 2014] [info] Server built: May 31 2014 13:29:13
[Sun Jun 08 21:19:52 2014] [debug] prefork.c(1023): AcceptMutex: flock (default: flock)
[Sun Jun 08 21:19:56 2014] [info] mod_fcgid: server 10.0.0.1:/usr/local/etc/apache22/php-wrapper(60862) started
[Sun Jun 08 21:19:56 2014] [warn] [client 10.0.0.10] (53)Software caused connection abort: mod_fcgid: error reading data from FastCGI server
[Sun Jun 08 21:19:56 2014] [error] [client 10.0.0.10] Premature end of script headers: phpinfo.php
[Sun Jun 08 21:19:59 2014] [info] mod_fcgid: process /usr/local/etc/apache22/php-wrapper(60862) exit(communication error), terminated by calling exit(), return code: 255
[root@gateway /usr/local/etc/apache22]# ls -la
-rw-r--r--   1 www   www      109 Jun  8 21:12 php-wrapper
[root@gateway /usr/local/etc/apache22]# chmod 755 php-wrapper

[root@gateway /usr/local/etc/apache22]# ls -la
-rwxr-xr-x   1 www   www      109 Jun  8 21:12 php-wrapper

php5 with mod_fcgid results in 500 error – probably wrong permissions

VirtualHost

#!/bin/sh

SUBDOMAIN=`echo $USER | awk -F_ '{print $1}'`

export PHPRC="$HOME/../.config/php/$SUBDOMAIN"
export PHP_FCGI_CHILDREN=4
export PHP_FCGI_MAX_REQUESTS=300:

exec /usr/local/bin/php-cgi $@

Apache, PHP Fastcgi and PHP_FCGI_CHILDREN
Warum man PHP_FCGI_CHILDREN statt auf “1” lieber gar nicht setzen sollte
php5-cgi fills up memory, too many processes
Apache Module mod_fcgid
Apache with fcgid: acceptable performance and better resource utilization

Apache Module mod_fcgid

Special PHP considerations

By default, PHP FastCGI processes exit after handling 500 requests, and they may exit after this module has already connected to the application and sent the next request. When that occurs, an error will be logged and 500 Internal Server Error will be returned to the client. This PHP behavior can be disabled by setting PHP_FCGI_MAX_REQUESTS to 0, but that can be a problem if the PHP application leaks resources. Alternatively, PHP_FCGI_MAX_REQUESTS can be set to a much higher value than the default to reduce the frequency of this problem. FcgidMaxRequestsPerProcess can be set to a value less than or equal to PHP_FCGI_MAX_REQUESTS to resolve the problem.

PHP child process management (PHP_FCGI_CHILDREN) should always be disabled with mod_fcgid, which will only route one request at a time to application processes it has spawned; thus, any child processes created by PHP will not be used effectively. (Additionally, the PHP child processes may not be terminated properly.) By default, and with the environment variable setting PHP_FCGI_CHILDREN=0, PHP child process management is disabled.

The popular APC opcode cache for PHP cannot share a cache between PHP FastCGI processes unless PHP manages the child processes. Thus, the effectiveness of the cache is limited with mod_fcgid; concurrent PHP requests will use different opcode caches.

Leave a Reply

Your email address will not be published. Required fields are marked *