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 :)
3 Answers
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 restartsudo 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;)
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-fpmEnable 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 restartTest nginx
Opening this link 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/defaulte.g.
/usr/share/nginx/wwwWrite a
info.phpfile with:echo '<?php phpinfo(); ?>' | \ sudo tee /usr/share/nginx/www/info.phpor as one-liner
echo '<?php phpinfo(); ?>' | \ sudo tee "$(awk -F' |;' '/^[^#]*root/ {print $2}' /etc/nginx/sites-available/default)/info.php"
Opening should display the PHP information page.
5sudo apt install nginx php-fpmNote the fpm version, or check php -v. 7.3.11-0ubuntu0.19.10.3 (cli) in my case.
sudo nano /etc/nginx/sites-available/defaultSet the correct
rootfolder.Add
index.phpto theindexdirective.Uncomment the location handler for php, but leave the "php-cgi" line commented if you use php-fpm. Also ensure the correct fpm version lest you get "502 Bad Gateway" on localhost:
fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
sudo service nginx restartThat works on:
$ nginx -v
nginx version: nginx/1.16.1 (Ubuntu)
$ uname -a
Linux cees-XPS-13-9380 4.15.0-1067-oem #77-Ubuntu SMP Mon Jan 20 09:23:07 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux 2