Apache Configuration – How to Run PHP as FastCGI on Ubuntu 12.04

Apache2command linePHP

I'm relatively new to the world of unix command line web server management/administration.

Many hosts with control panel administration options allow you to change how PHP is run with a simple option.

The most common options being:

  • apache module
  • CGI application
  • FastCGI application

My question is simply, how do you change this via the command line? I know there are many configuration files for apache.

The closest thing I have found is this question, however the directory structure does not seem to match for my OS (Ubuntu 12.04).

I'm quite bewildered how there does not seem to be a clear guide that I can find that details this process for something that seems to be so common. Forgive me if this exists… if so, please point me in the right direction.

Best Answer

Thanks for previous answers they got me most of the way, but to get things working I had to combine instructions from a few places, so thought I would write up a complete set of commands.

FYI I'm running Ubuntu 14.04, Apache 2.4, and also had modphp running by default, previous instructions also left out the need to disable modphp.

I also found http://blog.starcklin.com/2013/08/install-mod-fastcgi-and-php5-fpm-on-ubuntu/ to be very informative and straightforward.

Just run the following commands in a terminal one after the other.

First install the necessary packages (I leave out php5 as this assumes it's already installed, add it back in for a first time install). Also note from Apache 2.4 up you can use the event-mpm instead of worker see http://www.vps.net/blog/2013/04/08/apache-mpms-prefork-worker-and-event/. My example shows worker, but just replace the word worker with event if you'd rather use that.

sudo apt-get install apache2-mpm-worker

sudo apt-get install libapache2-mod-fastcgi php5-fpm

Now enable mods you need, and disable those you don't.

sudo a2dismod php5 mpm_prefork

sudo a2enmod actions fastcgi alias mpm_worker

Create the php5.fcgi file and give the webserver permission to use it.

sudo touch /usr/lib/cgi-bin/php5.fcgi

sudo chown -R www-data:www-data /usr/lib/cgi-bin

Create a global config for php5-fpm

sudo nano /etc/apache2/conf-available/php5-fpm.conf

paste in the following (we'll use a socket instead of IP address)

<IfModule mod_fastcgi.c> 
   AddHandler php5.fcgi .php 
   Action php5.fcgi /php5.fcgi 
   Alias /php5.fcgi /usr/lib/cgi-bin/php5.fcgi 
   FastCgiExternalServer /usr/lib/cgi-bin/php5.fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization -idle-timeout 3600 
   <Directory /usr/lib/cgi-bin>
       Require all granted
   </Directory> 
</IfModule>

Enable the php5-fpm conf

sudo a2enconf php5-fpm

Restart apache and fpm

sudo service apache2 restart && sudo service php5-fpm restart

As per other instructions paste the following into a new browseable php file on your webserver.

<?php phpinfo();

Open the file you just edited in a web browser, If you see "FPM/FastCGI" next to Server API, you are now serving PHP with FastCGI!

Related Question