Tags: DevOps ubuntu php
Installing PHP
Previous step
Now we are up with nginx we will need to install php on our web server. For this step we will use php-fpm.
Installing php-fpm
I will not use mysql for the example only the basic php.
sudo apt-get install apt-transport-https lsb-release ca-certificates
sudo apt-get install php-fpm
Configuring php-fpm
Open the main config file :
sudo nano /etc/php/7.0/fpm/php.ini
Then change this line :
To :
This config, if enabled, will try to “fix” file path of script to find the closest one. For security option we will work with exact file names.
Then restart the deamon :
sudo systemctl restart php7.0-fpm
php-fpm expose a socket on which php scripts will be executed and rendered, thanks to nginx we can configure incoming request to be mapped with php socket.
Example site
sudo nano /etc/nginx/sites-available/default
In this file you will find the following config :
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files $uri $uri/ =404;
}
}
This means nginx will listen on port 80 and if address is default_server (which is an alias for all incoming url) it will try to read files from directory /var/www/html and if no file specified it will fallback to index.html or index.htm or index.nginx-debian.html (in this order). location / means the root URL (such as http://example.com/) and try file will try to match given name with existing file in the root dir or fallback to a 404 error.
Now we’ll modify it as follow :
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
server_name server_domain_or_IP;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
Changes :
index index.php : This mean the first fallback if no file specified will be index.phpserver_name server_domain_or_IP : To map with the domain specified in requests, replace server_domain_or_IP by your IP address or domain- block
location ~ \.php$ (regex) : All files that finish with .php will be using the php-fpm socketand an additional conf file will be used by nginx
- block
location ~ /\.ht (regex) : All files that start with .ht won’t be visible by clients, to no see our .htaccess config
Now test your configuration with :
If it’s OK then reload nginx :
sudo systemctl reload nginx
Test with real file
We will expose phpinfo by creating a new PHP file :
sudo nano /var/www/html/info.php
And inside :
And now test your config and file by accessing http://server_domain_or_IP/info.php from your favorite browser.

For security reasons you can remove the /var/www/html/info.php file.