Introduzione

In questa guida, spiegheremo come reindirizzare il traffico HTTP su HTTPS in Nginx.

Nginx pronunciato "engine x" è un server HTTP e proxy inverso gratuito, open source e ad alte prestazioni, responsabile della gestione del carico di alcuni dei più grandi siti su Internet.

Se sei uno sviluppatore o un amministratore di sistema, è probabile che tu abbia a che fare con Nginx regolarmente. Una delle attività più comuni che probabilmente eseguirai è il reindirizzamento del traffico HTTP alla versione protetta (HTTPS) del tuo sito web.

A differenza di HTTP, dove le richieste e le risposte vengono inviate e restituite in testo normale, HTTPS utilizza TLS/SSL per crittografare la comunicazione tra il client e il server.

I vantaggi dell'utilizzo di HTTPS su HTTP sono numerosi:

  • Tutti i dati sono crittografati in entrambe le direzioni. Di conseguenza, le informazioni sensibili non possono essere lette se intercettate.
  • Google Chrome e tutti gli altri browser popolari contrassegneranno il tuo sito Web come sicuro.
  • HTTPS consente di utilizzare il protocollo HTTP/2, che migliora significativamente le prestazioni del sito.
  • Google preferisce i siti Web HTTPS. Il tuo sito si posizionerà meglio se offerto tramite HTTPS.

Il metodo preferito per reindirizzare HTTP a HTTPS in Nginx è configurare un blocco server separato per ogni versione del sito. Dovresti evitare di reindirizzare il traffico utilizzando la direttiva if , poiché potrebbe causare un comportamento imprevedibile del server.

Reindirizzare HTTP a HTTPS per sito

In genere quando un certificato SSL è installato su un dominio, avrai due blocchi server per quel dominio. Il primo per la versione HTTP del sito sulla porta 80 e l'altro per la versione HTTPS sulla porta 443.

Per reindirizzare un singolo sito Web su HTTPS, aprire il file di configurazione del dominio e apportare le seguenti modifiche:

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

Analizziamo il codice riga per riga:

  • listen 80 - Il blocco server ascolterà le connessioni in entrata sulla porta 80 per il dominio specificato.
  • server_name noviello.it www.noviello.it - Specifica i nomi di dominio del blocco server. Assicurati di sostituirlo con il tuo nome di dominio.
  • return 301 https://noviello.it$request_uri - Reindirizzare il traffico alla versione HTTPS del sito. La variabile $request_uri è l'URI della richiesta originale completa, inclusi gli argomenti.

Di solito, vorrai anche reindirizzare la versione www del sito HTTPS su non-www o viceversa. Il modo consigliato per eseguire il reindirizzamento è creare un blocco server separato per entrambe le versioni www e non www.

Ad esempio, per reindirizzare le richieste www HTTPS a non www, utilizzare la seguente configurazione:

server {
    listen 80;
    server_name noviello.it www.noviello.it;
    return 301 https://noviello.com$request_uri;
}

server {
    listen 443 ssl http2;
    server_name www.noviello.it;

    # . . . other code

    return 301 https://noviello.it$request_uri;
}

server {
    listen 443 ssl http2;
    server_name noviello.it;

    # . . . other code
}

Ogni volta che si apportano modifiche ai file di configurazione, è necessario riavviare o ricaricare il servizio Nginx per rendere effettive le modifiche:

sudo systemctl reload nginx 

Reindirizzare tutti i siti su HTTPS

Se tutti i siti Web ospitati sul server sono configurati per utilizzare HTTPS e non si desidera creare un blocco server HTTP separato per ciascun sito, è possibile creare un blocco server HTTP tutto compreso. Questo blocco reindirizzerà tutte le richieste HTTP ai blocchi HTTPS appropriati.

Per creare un unico blocco HTTP catch-all che reindirizzerà i visitatori alla versione HTTPS del sito, aprire il file di configurazione Nginx e apportare le seguenti modifiche:

server {
	listen 80 default_server;
	listen [::]:80 default_server;
	server_name _;
	return 301 https://$host$request_uri;
}

Analizziamo il codice riga per riga:

  • listen 80 default_server - Imposta questo blocco server come blocco predefinito (catch-all) per tutti i domini senza eguali.
  • server_name _ - _ è un nome di dominio non valido che non corrisponde mai a nessun nome di dominio reale.
  • return 301 https://$host$request_uri- Reindirizzare il traffico al blocco server HTTPS corrispondente con il codice di stato 301 (spostato in modo permanente). La variabile $host contiene il nome di dominio della richiesta.

Ad esempio, se il visitatore si apre http://example.com/page2 nel browser, Nginx reindirizzerà la richiesta a https://example.com/page2.

Se possibile, preferisci creare un reindirizzamento in base al dominio anziché un reindirizzamento globale da HTTP a HTTPS.

Conclusione

In Nginx, il modo preferito per reindirizzare HTTP a HTTPS è creare un blocco server separato ed eseguire il reindirizzamento 301.