Development environment on Kimsufi instance, part 2
Setting up Ubuntu 16.04 on Kimsufi KS-4A with nginx, PHP & GitLab
Published Oct 21, 2017 
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 :
;cgi.fix_pathinfo=1
To :
cgi.fix_pathinfo = 0
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
Configure nginx to works with php-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
nginxwill listen on port 80 and if address isdefault_server(which is an alias for all incoming url) it will try to read files from directory/var/www/htmland if no file specified it will fallback toindex.htmlorindex.htmorindex.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 beindex.phpserver_name server_domain_or_IP: To map with the domain specified in requests, replaceserver_domain_or_IPby your IP address or domain- block
 location ~ \.php$(regex) : All files that finish with.phpwill be using thephp-fpmsocketand an additional conf file will be used by
nginx- block
 location ~ /\.ht(regex) : All files that start with.htwon’t be visible by clients, to no see our .htaccess config
Now test your configuration with :
sudo nginx -t
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 :
<?php
phpinfo();
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.