How to Install Nginx, PHP, LetsEncrypt SSL on Ubuntu server

Here are quick&dirty notes on how to install Nginx web server, PHP and LetsEncrypt SSL certificate on Ubuntu server. Tested with the following versions: nginx 1.20.2, php 8.1.7, ubuntu 20.04.

By default Nginx is not capable of processing dynamic web pages with PHP so it requires the use of specific additional plugins. This is resolved by adding the php-fpm (FastCGI Process Manager) package. First of all, we get rid of the old php versions:

sudo apt-get purge php7.*

In the preparation phase, we will update the Ubuntu system packages and install some dependencies.

sudo apt-get update && sudo apt-get install ca-certificates apt-transport-https software-properties-common

Let's start by installing the Nginx server, adding PHP support and finally the SSL certificate in 4 main steps.

1. Install Nginx

sudo apt-get install nginx -y

Check the running process with the command

sudo systemctl status nginx

Important. Do not forget to configure your Ubuntu server's firewall and close unused open ports.

2. Add Ondrej PHP PPA repository and install PHP 8.1

sudo add-apt-repository ppa:ondrej/php

sudo apt-get update && sudo apt-get install php8.1-fpm

Check the running process with the command

sudo systemctl status php8.1-fpm

3. Add PHP support to Nginx

Open the file "/etc/nginx/sites-available/default" in a text editor

  • Add this (replace the entire file with this)
server {
  # Example PHP Nginx FPM config file
  listen 80 default_server;
  listen [::]:80 default_server;
  root /var/www/html;

  # Add index.php to setup Nginx, PHP & PHP-FPM config
  index index.php index.html index.htm index.nginx-debian.html;

  server_name _;

  location / {
    try_files $uri $uri/ =404;
  }

  # pass PHP scripts on Nginx to FastCGI (PHP-FPM) server
  location ~ \.php$ {
    include snippets/fastcgi-php.conf;

    # Nginx php-fpm sock config:
    fastcgi_pass unix:/run/php/php8.1-fpm.sock;
    # Nginx php-cgi config :
    # Nginx PHP fastcgi_pass 127.0.0.1:9000;
  }

# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
  location ~ /\.ht {
    deny all;
  }
} # End of PHP FPM Nginx config example

Server and php setup done. Check first

sudo nginx -t

Then restart Nginx (and php-fpm) using this command

sudo systemctl restart nginx

Check the functionality/features of PHP with a browser. Create an info page and browse it

sudo chmod -R 777 /var/www/html

echo "<?php phpinfo(); ?>" >> /var/www/html/info.php

4. Secure Nginx with LetsEncrypt SSL free certificate

sudo apt install python3-certbot-nginx -y

Get a certificate and redirect from http to https

sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email you@example.com -d www.example.com

Tadaa! Applausi!

Should be up&rocking