What is the easiest way to enable PHP on nginx?
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 :)
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;
)
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.
sudo apt install nginx php-fpm
Note the fpm version, or check php -v
. 7.3.11-0ubuntu0.19.10.3 (cli) in my case.
sudo nano /etc/nginx/sites-available/default
Set the correct
root
folder.Add
index.php
to theindex
directive.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 restart
That 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