PHP-FPM FastCGI Process Manager with Apache 2
By cj on Mar 13, 2012
I've published some vanilla PHP 5.4.0 RPMs to make new feature testing easier.
Along with all the PHP 5.4 goodies, the php-fpm "FastCGI Process Manager" is available for the first time on oss.oracle.com. Php-fpm is an alternative FastCGI interface to PHP with various extra features such as load dependent spawning of processes. (For other features, see php-fpm.org). Php-fpm has been getting more and more traction in the PHP community and the EXPERIMENTAL flag was removed in PHP 5.4. You might want to test it out.
To use php-fpm with the default Apache web server, first install Oracle Linux 5.8 (64bit) using Oracle's free, public yum repository public-yum.oracle.com.
Install Apache, if not already installed:
yum install httpd
Download and install the PHP 5.4 RPMs from oss.oracle.com/projects/php:
rpm -i php54-common-5.4.0-1.el5.x86_64.rpm php54-fpm-5.4.0-1.el5.x86_64.rpm
Other extensions can also be installed, depending on the functionality you want to test.
Download and build FastCGI for Apache:
wget http://www.fastcgi.com/dist/mod_fastcgi-current.tar.gz tar -zxf mod_fastcgi-current.tar.gz cd mod_fastcgi-2.4.6 cp Makefile.AP2 Makefile make top_dir=/usr/lib64/httpd
Install FastCGI as root:
make top_dir=/usr/lib64/httpd install
/etc/httpd/conf/httpd.conf and comment out any
existing references to PHP you might previously have added for
# LoadModule php5_module modules/libphp5.so # AddType application/x-httpd-php .php
Add the php-fpm configuration to
LoadModule fastcgi_module modules/mod_fastcgi.so <IfModule mod_fastcgi.c> FastCGIExternalServer /usr/sbin/php-fpm -host 127.0.0.1:9000 AddHandler php-fastcgi .php #<LocationMatch "/status"> # SetHandler php-fastcgi-virt # Action php-fastcgi-virt /usr/sbin/php-fpm.fcgi virtual #</LocationMatch> Action php-fastcgi /usr/sbin/php-fpm.fcgi ScriptAlias /usr/sbin/php-fpm.fcgi /usr/sbin/php-fpm <Directory /usr/sbin> Options ExecCGI FollowSymLinks SetHandler fastcgi-script Order allow,deny Allow from all </Directory> </IfModule>
Start php-fpm and Apache:
service php-fpm start service httpd start
Test it out with your favorite script or create a file
<?php phpinfo(); ?>
Save it in
/var/www/html/pi.php or in
$HOME/public_html/pi.php, if you have configured
In a browser load
This will show the PHP configuration values.
To test php-fpm's built-in statistics, edit
and uncomment the four lines of the
<LocationMatch "/status"> SetHandler php-fastcgi-virt Action php-fastcgi-virt /usr/sbin/php-fpm.fcgi virtual </LocationMatch>
/etc/php-fpm.conf and uncomment the line:
pm.status_path = /status
Restart php-fpm and Apache:
service php-fpm restart service httpd restart
Run some load on the system:
ab -c 10 -t 60 http://localhost/pi.php
http://localhost/status gives you the status of the server:
pool: www process manager: dynamic start time: 13/Mar/2012:14:25:53 -0700 start since: 26 accepted conn: 50001 listen queue: 0 max listen queue: 6 listen queue len: 128 idle processes: 2 active processes: 1 total processes: 3 max active processes: 5 max children reached: 1
php-fpm.conf file documents other output formats
for the statistics. It also shows the extensive functionality
available with php-fpm.
Php-fpm is commonly used in conjunction with the nginx webserver. For this, you will need to compile nginx yourself. Because php-fpm is installed and managed separately from the webserver, the php-fpm RPM will still be usable. Now that Apache 2.4 has been released with claims of improved performance, it will be interesting to see if web server popularity swings back towards Apache.
Finally, remember that the PHP RPMs on oss.oracle.com are for testing purposes only. They are not supported.
Update: In the Underground PHP & Oracle Manual, I simplified the httpd.conf options to this (note PHP was installed in a different location):
<IfModule mod_fastcgi.c> FastCGIExternalServer /opt/php544/sbin/php-fpm -host 127.0.0.1:9000 AddHandler php-fastcgi .php Action php-fastcgi /mycgi ScriptAlias /mycgi /opt/php544/sbin/php-fpm </IfModule>