Pencarian

Rss Posts

 

 

 

Running Apache with a dozen PHP versions – Christian Weiske

Mar 12, 2010

After showing you how to set up
multiple PHP versions on a single
machine
, it’s time to explain how to stuff all those compiled
php-cgi executables into a single Apache web server instance.

Idea

  • Instead of using mod_php, mod_fastcgi is going
    to be utilized.
  • Every single PHP version runs its own CGI server
  • Configuration of used PHP version is made per virtual host.

Installation of FastCGI

Debian

The Debian setup is painless:

aptitude install libapache2-mod-fastcgi apache2-mpm-worker apache2-suexec
a2enmod actions fastcgi suexec

CentOS

The open source version of Redhat’s operating system does not provide
the fastcgi module for Apache, which is why one needs to install it
by hand. It’s trivial.

Assuming phpfarm is installed in /root/phpfarm,
you need to chmod +x /root. Last but not least is
setting up permissions for the fastcgi state files:
chmod +x /var/log/httpd.

FastCGI setup

After mod_fastcgi is available, we need to prepare the FastCGI
servers. Open /etc/{apache2,httpd}/{apache2,httpd}.conf
and make it load conf/php-cgisetup.conf before including
server.conf. Put the following
lines into conf/php-cgisetup.conf:

#php-cgi setup
#used for multiple php versions
FastCgiServer /var/www/cgi-bin/php-cgi-5.2.12
FastCgiServer /var/www/cgi-bin/php-cgi-5.3.0
FastCgiServer /var/www/cgi-bin/php-cgi-5.3.1
ScriptAlias /cgi-bin-php/ /var/www/cgi-bin/

PHP-CGI setup

For each single php version you installed with
phpfarm,
you need to create a file
/var/www/cgi-bin/php-cgi-$version and make
it executable. Example for php-cgi-5.3.2:

#!/bin/sh
PHPRC="/etc/php5/cgi/5.3.2/"
export PHPRC

PHP_FCGI_CHILDREN=3
export PHP_FCGI_CHILDREN

PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_MAX_REQUESTS

exec /root/phpfarm/inst/bin/php-cgi-5.3.2

Activating a PHP version in a virtual host

If you followed all of the previous steps, everything is
setup now and ready to be used. In your
/etc/{apache2,httpd}/conf/server.conf, put the following
code in each section that you
like to switch to a certain version of PHP:

  
    AddHandler php-cgi .php
    Action php-cgi /cgi-bin-php/php-cgi-5.3.2
  

Conclusion

With the simple steps listed above and the help of phpfarm,
you are able to test your web applications in a dozens or more
PHP versions easily.

As as side note: The CGI versions of PHP are only used on the vhosts
that you determine. All others are still served by mod_php
that was probably setup before, making it trivially easy to keep your
server’s main web sites up-to date with your distribution’s
package manager.

Comments are closed.