Introduzione

Quando un certificato SSL è installato sul server, il sito Web non è disponibile tramite una connessione HTTPS protetta per impostazione predefinita. È necessario aggiungere "HTTPS" a un URL ogni volta che è necessario connettersi in modo sicuro. Il modo migliore per ottenere la massima sicurezza per i visitatori del sito Web è abilitare un redirect automatico da HTTP a HTTPS.

Questo tutorial vi mostrerà come reindirizzare un URL da HTTP verso HTTPS, ad esempio http://esempio.it a https://esempio.it, con Apache su Ubuntu 18.04.

Prerequisiti

In questo tutorial si presuppone che si disponga di privilegi di superuser, ovvero sudo o root, sul server che esegue Nginx. Se non lo hai già impostato, segui questo tutorial: Configurazione iniziale Ubuntu 18.04 LTS.

Si presume che Nginx sia installato. Se non è installato segui questo tutorial: Come installare Linux Nginx MySQL PHP (LEMP) in Ubuntu 18.04 LTS

Impostare il redirect da HTTP a HTTPS

Se utilizzi i certificati SSL, quindi hai una connessone attiva con il protocollo HTTPS e vuoi effettuare un redirect da www a non-www (o viceversa) e da HTTP a HTTPS continuare a leggere.

Aprire il file di configurazione di  Nginx:

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

Aggiungere un nuovo blocco server all'inizio del file per gestire le connessioni HTTP ed effettuare un redirect verso l'HTTPS. Modifica il parametro server_name inserendo il tuo nome dominio sia senza www che con www, modifica anche il parametro return impostando l'URL preferito, nel nostro caso la versione senza www, in questo modo:

server {
    listen 80;
    listen [::]:80;
    server_name TUO_DOMINIO.it www.TUO_DOMINIO.it;
    return 301 https://TUO_DOMINIO.it$request_uri;
}

Salvare e chiudere il file premendo CTRL+X, seguito da Y per salvare le modifiche e quindi ENTER se stai utilizzando nano.

Modificare il blocco server principale. Cambiare il parametro Listen con la porta 443 e aggiungere il parametro ssl. Includere il percorso dei propri certificati, se non sono già inclusi, e alla fine del blocco aggiungere una condizione if che imposta un redirect automatico verso l'url preferito, in queso caso senza www. Se preferisci creare un redirect da non-www a www invertire i parametri server_name e return in entrambi i blocchi server.

server {
    listen [::]:443 ssl ipv6only=on;
    listen 443 ssl; 
    root /var/www/html;
    index index.php index.html index.htm index.nginx-debian.html;
    server_name TUO_DOMINIO.it www.TUO_DOMINIO.it;

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


	#include your certificates
    ...


    if ($host = 'www.TUO_DOMINIO.it') {
        return 301 https://TUO_DOMINIO.it$request_uri;
    }

}

Quindi la configurazione finale con redirect da www a non-www con https abilitato è la seguente:

server {
    listen 80;
    listen [::]:80;
    server_name TUO_DOMINIO.it www.TUO_DOMINIO.it;
    return 301 https://TUO_DOMINIO.it$request_uri;
}

server {
    listen [::]:443 ssl ipv6only=on;
    listen 443 ssl; 
    root /var/www/html;
    index index.php index.html index.htm index.nginx-debian.html;
    server_name TUO_DOMINIO.it www.TUO_DOMINIO.it;

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


	#include your certificates
    ...


    if ($host = 'www.TUO_DOMINIO.it') {
        return 301 https://TUO_DOMINIO.it$request_uri;
    }

}

Riavviare Nginx:

sudo service nginx restart

Le modifiche dovrebbero entrare in vigore immediatamente.

Conclusione

In questo tutorial abbiamo imparato a configurare le regole di redirect per Nginx da www a non-www e viceversa, e per http verso https.

Questo è tutto! Il redirect di Nginx è ora configurato correttamente.