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.