Tuesday, August 31, 2010

Convert from mpm_prefork to mpm_worker using php-cgi in Ubuntu

Installation Steps


1.
install php-cgi package and mpm-prefork

apt-get -u install php5-cgi libapache2-mod-fcgid apache2-mpm-worker

2.
mkdir {WEBROOTFOLDER}/fcgi-bin.d
eg /home/lamp/webroot
mkdir {WEBROOTFOLDER}/fcgi-bin.d/php5-default

ln -s /usr/bin/php5-cgi /home/lamp/webroot/fcgi-bin.d/php5-default/php-fcgi-wrapper





Configuration Steps

1.

Remove mod_php4 / mod_php5 if not already done

# a2dismod php4
# a2dismod php5
2.

Enable mod_actions and mod_fcgid

# a2enmod actions
# a2enmod fcgid
3.

Raise the communication timeout (= maximum execution time) for FCGI applications in /etc/apache2/mods-enabled/fcgid.conf by adding the “IPCCommTimeout” directive


AddHandler fcgid-script .fcgi
SocketPath /var/lib/apache2/fcgid/sock

# Communication timeout: Default value is 20 seconds
IPCCommTimeout 60

# Connection timeout: Default value is 3 seconds

#IPCConnectTimeout 3

4.

Create a new file /etc/apache2/conf.d/php-fcgid.conf:










# Path to php.ini – defaults to /etc/phpX/cgi
DefaultInitEnv PHPRC=/etc/php5/cgi

# Number of PHP childs that will be launched. Leave undefined to let PHP decide.
#DefaultInitEnv PHP_FCGI_CHILDREN 3

# Maximum requests before a process is stopped and a new one is launched
#DefaultInitEnv PHP_FCGI_MAX_REQUESTS 5000

# Define a new handler "php-fcgi" for ".php" files, plus the action that must follow
AddHandler php-fcgi .php
Action php-fcgi /fcgi-bin/php-fcgi-wrapper

# Define the MIME-Type for ".php" files
AddType application/x-httpd-php .php

# Define alias "/fcgi-bin/". The action above is using this value, which means that
# you could run another "php5-cgi" command by just changing this alias
Alias /fcgi-bin/ /var/www/fcgi-bin.d/php5-default/

# Turn on the fcgid-script handler for all files within the alias "/fcgi-bin/"

SetHandler fcgid-script
Options +ExecCGI










5.

Next, create the directory which is chosen by the alias, and put in a symlink to the php5-cgi binary

# mkdir /var/www/fcgi-bin.d/php5-default
# ln -s /usr/bin/php5-cgi /var/www/fcgi-bin.d/php5-default/php-fcgi-wrapper
6.

Finally, restart Apache

/etc/init.d/apache2 restart

No comments:

Post a Comment