What is the easiest way to enable PHP on nginx on Ubuntu 12.04?

Best solution is the one that request minimal work, ideally just a package installation :)

up vote 135 down vote accepted

The following method will get you started fast on Ubuntu 12.04:

Install the dependences:

sudo apt-get install php5-common php5-cli php5-fpm

Install nginx:

sudo apt-get install nginx

Start nginx:

sudo service nginx start

Test that it's working (should see "Welcome to nginx!")

sudo service nginx stop

In your nginx site configuration (/etc/nginx/sites-available/default), modify the line in the server {} section

index index.html index.htm to index index.php index.html index.htm.

Uncomment the lines in the server {} section starting with

listen for ipv4 / ipv6 both.

Scroll down to where it says "location ~ .php {" and uncomment lines so it looks like this:

location ~ \.php$ {
  fastcgi_split_path_info ^(.+\.php)(/.+)$;
  fastcgi_pass 127.0.0.1:9000;
  fastcgi_index index.php;
  include fastcgi_params;
}

sudo service php5-fpm restart sudo service nginx restart

Your default web root is located at /usr/share/nginx/www (per the config file). (See root /usr/share/nginx/www;

(Note: For Ubuntu 12.10 or newer, you will need to replace the fastcgi_pass 127.0.0.1:9000; line with this to make it work: fastcgi_pass unix:/var/run/php5-fpm.sock;)

  • 1
    As a late side note, you can make 12.04 use a UNIX socket like 12.10+ does by editing /etc/php5/fpm/pool.d/www.conf and changing the listen line to listen = /var/run/php5-fpm.sock, then using the line @ThomasW. mentioned. – Powerlord Mar 30 '14 at 19:53
  • @Powerlord the NGINX default setup has both lines and explains the difference between the two, rather than having to change how PHP runs you can just change the config line in NGINX faster, and all works. – Thomas Ward Mar 30 '14 at 23:36
  • @ThomasW. The NGINX defaults setup's description of both lines is also wrong in 12.04. php5-fpm requires the first method due to how php5-fpm is configured in 12.04. It didn't change to the second method until 12.10. To make php5-fpm work with nginx as documented, you have to modify fpm's www.conf as mentioned in my previous message. – Powerlord Mar 31 '14 at 0:53
  • @Powerlord You're right it's a problem, one that can be fixed by changing the documentation in the default config file. See this bug that I created on this issue. I haven't had a chance to propose a bugfix yet. – Thomas Ward Apr 4 '14 at 11:19
  • 1
    This is not working for me on ubuntu 14.04. nginx says "An error occured, the page you are looking for is not found", what to do? – Awal Garg Sep 11 '14 at 12:05

EDIT: As pointed out by Matt Browne you may be interested by this more recent post:
How To Install Linux, Nginx, MySQL, PHP (LEMP stack) in Ubuntu 16.04


The papashou's answer is correct on old Ubuntu 12.04. Since Ubuntu 12.10, the configuration is a bit different. Here is what I did:

Install

sudo apt-get install nginx php5-fpm

Enable PHP

Uncomment the following lines in configuration file /etc/nginx/sites-available/default

location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini

#   # With php5-cgi alone:
#   fastcgi_pass 127.0.0.1:9000;
    # With php5-fpm:
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
}

Start (or restart)

sudo service php5-fpm restart
sudo service nginx restart

Test nginx

Opening this link http://localhost should display "Welcome to nginx!"

Test php

Create a php file:

  • The target path is the output of

    awk -F' |;' '/^[^#]*root/ {print $2}' /etc/nginx/sites-available/default
    

    e.g. /usr/share/nginx/www

  • Write a info.php file with:

    echo '<?php phpinfo(); ?>' | \
        sudo tee /usr/share/nginx/www/info.php
    

    or as one-liner

    echo '<?php phpinfo(); ?>' | \
        sudo tee "$(awk -F' |;' '/^[^#]*root/ {print $2}' /etc/nginx/sites-available/default)/info.php"
    

Opening http://localhost/info.php should display the PHP information page.

Your Answer

 

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.