Ricerca nel sito web

Come configurare la terminazione SSL Varnish con il server Web Nginx su Rocky Linux 8


Su questa pagina

  1. Prerequisiti
  2. Installazione del server Web Nginx
  3. Genera SSL con Certbot
  4. Imposta la porta Nginx predefinita
  5. Imposta la terminazione SSL con il server Web Nginx
  6. Da HTTP automatico a HTTPS con Varnish
  7. Verifica la terminazione SSL di Varnish
  8. Conclusione

Il software Varnish Cache non supporta SSL/TLS per impostazione predefinita. È necessario software aggiuntivo per abilitare il supporto SSL/TLS su Varnish.

La terminazione SSL è un metodo per abilitare SSL/TLS su Varnish. Puoi utilizzare Hitch, Nginx o Apache per abilitare la terminazione SSL per l'acceleratore HTTP Varnish.

Il software di terminazione SSL verrà eseguito sulla porta HTTPS 443 e gestirà tutte le richieste HTTPS dai client. Successivamente, tutte le richieste verranno inoltrate al software cache di vernice, quindi inoltrate al server back-end di origine.

Prerequisiti

In questo articolo imparerai come configurare Varnish SSL Termination con il server web Nginx.

Prima di iniziare, assicurati di disporre dei seguenti requisiti:

  • Un server Linux con Varnish installato.
  • Privilegi di root
  • Un nome di dominio

Per questo esempio, stiamo usando il server Rocky Linux con Varnish installato su di esso. E useremo il nome di dominio example.io.

Ora iniziamo.

Installazione del server Web Nginx

Se stai utilizzando Nginx come backend di Varnish, salta questo primo passaggio.

In questo primo passaggio, installerai Nginx sul sistema Linux.

1. Per la distribuzione basata su Debian/Ubuntu, eseguire il comando apt di seguito per installare il server Web Nginx.

sudo apt install nginx -y

2. Per il sistema operativo CentOS/RockyLinux/AlmaLinux, eseguire il comando DNF di seguito per installare il server Web Nginx.

sudo dnf install nginx -y

3. Al termine dell'installazione di Nginx, avviare e abilitare il server Web Nginx utilizzando il seguente comando.

sudo systemctl enable --now nginx

Se hai un errore, lascialo. Nel passaggio successivo configurerai Nginx.

Genera SSL con Certbot

In questo passaggio, installerai lo strumento cerbot e genererai i certificati SSL da Letsencrypt per il dominio example.io.

1. Innanzitutto, aggiungi le porte HTTP e HTTPS al firewall di sistema.

Per i sistemi Debian/Ubuntu, eseguire il comando ufw di seguito per aprire le porte HTTP e HTTPS.

sudo ufw allow http
sudo ufw allow https
sudo ufw reload

Per i sistemi CentOS/RockyLinux/AlmaLinux, eseguire il comando firewall-cmd di seguito.

sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-service=https --permanent
sudo firewall-cmd --reload

2. Successivamente, installare lo strumento certbot utilizzando il seguente comando.

Installa lo strumento certbot sui sistemi Debian/Ubuntu utilizzando il comando apt di seguito.

sudo apt install certbot -y

Installa lo strumento certbot sui sistemi CentOS/RockyLinux/AlmaLinux utilizzando il comando DNF di seguito.

sudo dnf install certbot -y

3. Prima di generare SSL Letsencrypt, arrestare il servizio Varnish in esecuzione sulla porta HTTP predefinita.

sudo systemctl stop varnish
sudo systemctl stop nginx

4. Ora esegui il comando certbot di seguito per generare SSL Letsencrypt. E assicurati di cambiare il nome di dominio e l'indirizzo email.

sudo certbot certonly --agree-tos --email  --standalone --preferred-challenges http -d example.io

Al termine del processo certbot, il tuo certificato sarà disponibile nella directory /etc/letsencrypt/live/DOMAIN.COM/.

Il certificato fullchain.pem è la tua chiave pubblica SSL e privkey.pem è la tua chiave privata SSL.

Imposta la porta Nginx predefinita

Salta questo passaggio se utilizzi il server web Nginx come back-end per il tuo acceleratore HTTP Varnish.

Se stai utilizzando un altro server Web back-end, devi configurare la porta predefinita per Nginx.

1. Modifica la configurazione nginx predefinita utilizzando l'editor nano.

sudo nano /etc/nginx/nginx.conf

Nella sezione predefinita server { ... }, modifica l'opzione listen sulla porta 8081 come di seguito.

....

    server {
        listen       8081 default_server;
        listen       [::]:8081 default_server;

        ...trim...
    }

....

Salva la configurazione ed esci.

2. Ora riavvia il servizio Nginx per applicare una nuova configurazione.

sudo systemctl restart nginx

Il servizio Nginx predefinito è ora in esecuzione sulla porta 8081.

Imposta la terminazione SSL con il server Web Nginx

Per configurare la terminazione SSL con Nginx, è necessario creare una nuova configurazione di blocchi host/server virtuale che verrà eseguita sulla porta HTTPS 443.

Questo host virtuale gestisce tutte le richieste HTTPS dai client e inoltra tutte le richieste all'acceleratore HTTP Varnish.

1. Crea una nuova configurazione del blocco del server Nginx utilizzando il seguente comando.

Se stai usando il sistema basato su Debian/Ubuntu, crea una nuova configurazione /etc/nginx/sites-available/example.io.

sudo nano /etc/nginx/sites-available/example.io

Per il sistema CentOS/RockyLinux/AlmaLinux, crea una nuova configurazione /etc/nginx/conf.d/example.conf.

sudo nano /etc/nginx/conf.d/example.conf

Copia e incolla la seguente configurazione. E assicurati di modificare il nome di dominio e il percorso dei certificati SSL.

server {

    listen 443 ssl http2;
    server_name example.io;
    ssl_certificate           /etc/letsencrypt/live/exmaple.io/fullchain.pem;
    ssl_certificate_key       /etc/letsencrypt/live/example.io/privkey.pem;

    ssl_session_cache  builtin:1000  shared:SSL:10m;
    ssl_protocols TLSv1.2;
    ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
    ssl_prefer_server_ciphers on;

    access_log            /var/log/nginx/example.io_access.log;
    error_log             /var/log/nginx/example.io_error.log;

        location / {
            proxy_pass http://127.0.0.1:80;
            proxy_set_header X-Real-IP  $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto https;
            proxy_set_header X-Forwarded-Port 443;
            proxy_set_header Host $host;
        }

  }

Salva la configurazione ed esci.

2. Successivamente, per il sistema Debian/Ubuntu, attivare la configurazione del blocco del server utilizzando il seguente comando.

sudo ln -s /etc/nginx/sites-available/example.io /etc/nginx/sites-enabled/

3. Ora esegui il seguente comando per verificare la configurazione di Nginx, quindi riavvia il servizio Nginx per applicare la nuova configurazione.

sudo nginx -t
sudo systemctl restart nginx

4. Ora verifica il servizio Nginx e la porta HTTPS 443 utilizzando il seguente comando.

Verifica lo stato del servizio Nginx utilizzando il comando systemctl di seguito.

sudo systemctl status nginx

Assicurati che il servizio Nginx sia attivo e in esecuzione.

Verifica la porta HTTPS 443 sul tuo sistema utilizzando il comando ss di seguito.

ss -antpl | grep 443

Assicurati che la porta HTTPS 443 sia nello stato LISTEN.

LISTEN 0      128          0.0.0.0:443        0.0.0.0:*    users:(("nginx",pid=4787,fd=8),("nginx",pid=4786,fd=8),("nginx",pid=4785,fd=8))

Ora hai completato la configurazione di base della terminazione SSL con il server web Nginx.

Da HTTP automatico a HTTPS con Varnish

In questo passaggio, configurerai Varnish per reindirizzare automaticamente HTTP al protocollo HTTPS. Ciò può essere ottenuto creando una nuova regola Varnish sulla configurazione default.vcl.

1. Modifica la configurazione della vernice /etc/varnish/default.vcl utilizzando l'editor nano.

nano /etc/varnish/default.vcl

Copia e incolla la seguente configurazione all'interno dell'opzione sub vcl_recv { ... }. E assicurati di cambiare il nome del dominio con il tuo dominio.

sub vcl_recv {

    ...trim...

    if (client.ip != "127.0.0.1" && req.http.host ~ "example.io") {
       set req.http.x-redir = "https://example.io" + req.url;
       return(synth(850, ""));
    }

    ...trim...
{

Successivamente, aggiungi la seguente configurazione in fondo alla riga. Questo determinerà il metodo di reindirizzamento a HTTP 301.

sub vcl_synth {
    if (resp.status == 850) {
       set resp.http.Location = req.http.x-redir;
       set resp.status = 301;
       return (deliver);
    }
}

Salva la configurazione della vernice ed esci.

2. Successivamente, riavviare il servizio Varnish per applicare una nuova configurazione utilizzando il seguente comando.

sudo systemctl restart varnish

E hai completato il reindirizzamento HTTP e HTTPS automatico utilizzando la regola Varnish.

Verifica la terminazione SSL di Varnish

Per testare la terminazione SSL di Varnish, puoi utilizzare il browser Web o utilizzare il comando curl.

1. Apri il tuo browser web e digita il tuo nome di dominio nella barra degli indirizzi. Per questo esempio, stiamo utilizzando il browser Web Firefox.

http://esempio.io

Verrai reindirizzato automaticamente al protocollo HTTPS.

Fai clic con il pulsante destro del mouse sulla pagina Web e fai clic sul menu Ispeziona.

Passa alla scheda Rete e fai clic sul pulsante Ricarica.

Fai clic sulla richiesta dell'URL principale e vedrai un output simile a quello di seguito.

La richiesta a http://example.io viene reindirizzata automaticamente al protocollo HTTPS https://example.io con il codice di stato 301.

Il server Varnish gestisce tutte le richieste del client.

2. Per verificare la terminazione SSL trasparente con curl, utilizzare il seguente comando.

curl -I http://example.io

Vedrai un'intestazione HTTP dettagliata come di seguito.

La richiesta viene reindirizzata al protocollo HTTPS https://example.io con codice di stato HTTP 301. Il server Paint gestisce tutte le richieste dei client.

Conclusione

Congratulazioni! Hai imparato la configurazione di Varnish SSL Termination con il server web Nginx.

Inoltre, hai appreso il comando certbot di base per generare Letsencrypt SSL gratuito e la regola di base per il reindirizzamento automatico da HTTP a HTTPS.