Installare Certificati SSL Let’s Encrypt su uno Stack LEMP

Questa guida approfondisce l’installazione di certificati SSL gratuiti forniti da Let’s Encrypt utilizzando Certbot e configurandoli su uno stack LEMP (Linux, Nginx, MySQL, PHP) in un server Ubuntu.

Prerequisiti

  • Un server Ubuntu configurato seguendo la guida di configurazione iniziale (documentazione ufficiale).
  • Un nome di dominio registrato con i record DNS correttamente configurati (A record per il dominio principale e il sottodominio www).
  • Nginx installato e configurato con blocchi server per il dominio.

Passaggi

1. Installare Certbot

Certbot può essere installato tramite Snap. Aggiorna Snap core ed elimina versioni precedenti di Certbot se necessario:


sudo snap install core; sudo snap refresh core
sudo apt remove certbot
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot

2. Configurare Nginx

Assicurati che Nginx sia configurato con il corretto blocco server, includendo la direttiva server_name:


server {
    server_name example.com www.example.com;
    ...
}

3. Configurare il Firewall

Permetti il traffico HTTPS tramite il profilo Nginx Full:


sudo ufw allow 'Nginx Full'
sudo ufw delete allow 'Nginx HTTP'

4. Ottenere un Certificato SSL

Esegui Certbot per ottenere e configurare automaticamente il certificato:


sudo certbot --nginx -d example.com -d www.example.com

5. Verificare il Rinnovo Automatico

Certbot configura automaticamente un timer per il rinnovo dei certificati. Verifica lo stato del timer:


sudo systemctl status snap.certbot.renew.service

Simula un rinnovo per verificare la configurazione:


sudo certbot renew --dry-run

Riferimenti

Installazione del LEMP Stack su Ubuntu

Questa guida descrive i passaggi per installare il LEMP Stack (Linux, Nginx, MySQL, PHP) su un server Ubuntu.
Al termine, configureremo un esempio di pagina PHP per mostrare una lista di articoli di un e-commerce.

Passaggi principali

  1. Installazione di Nginx
  2. Installazione di MySQL
  3. Installazione di PHP
  4. Configurazione di Nginx per PHP
  5. Test di una pagina PHP
  6. Esempio di pagina PHP per e-commerce

1. Installazione di Nginx

Aggiorna i pacchetti e installa Nginx:

sudo apt update
sudo apt install nginx

Verifica che Nginx sia in esecuzione:

sudo systemctl status nginx

2. Installazione di MySQL

Installa il server MySQL:

sudo apt install mysql-server

Esegui lo script di sicurezza:

sudo mysql_secure_installation

3. Installazione di PHP

Installa PHP e il modulo per MySQL:

sudo apt install php-fpm php-mysql

4. Configurazione di Nginx per PHP

Crea un blocco server per il tuo dominio:

sudo nano /etc/nginx/sites-available/ecommerce

Inserisci la seguente configurazione:

server {
    listen 80;
    server_name ecommerce.test www.ecommerce.test;
    root /var/www/ecommerce;
    index index.php index.html;
    location / {
        try_files $uri $uri/ =404;
    }
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
    }
}

Attiva il sito e ricarica Nginx:

sudo ln -s /etc/nginx/sites-available/ecommerce /etc/nginx/sites-enabled/
sudo systemctl reload nginx

5. Test di una pagina PHP

Crea un file info.php:

sudo nano /var/www/ecommerce/info.php

Aggiungi il seguente codice:

<?php
phpinfo();

Visita http://ecommerce.test/info.php per verificare.

6. Esempio di pagina PHP per e-commerce

Crea un file products.php:

sudo nano /var/www/ecommerce/products.php

Aggiungi il seguente codice:

<?php
// Connessione al database
$conn = new mysqli('localhost', 'username', 'password', 'ecommerce');
if ($conn->connect_error) {
    die("Connessione fallita: " . $conn->connect_error);
}

// Query per ottenere gli articoli
$result = $conn->query("SELECT id, nome, prezzo FROM prodotti");
if ($result->num_rows > 0) {
    echo "<table><tr><th>ID</th><th>Nome</th><th>Prezzo</th></tr>";
    while ($row = $result->fetch_assoc()) {
        echo "<tr><td>" . $row["id"] . "</td><td>" . $row["nome"] . "</td><td>" . $row["prezzo"] . "</td></tr>";
    }
    echo "</table>";
} else {
    echo "Nessun prodotto trovato.";
}
$conn->close();

Visita http://ecommerce.test/products.php per visualizzare la lista di prodotti.

Riferimenti