Nginx è un server Web open source robusto, veloce, affidabile e dinamico popolare per servire siti ad alto traffico. Inoltre, è ben noto per la sua facilità di configurazione, l'elevata scalabilità e il supporto per una miriade di protocolli.
Tra i protocolli supportati da Nginx c'è il nuovo protocollo HTTP/2 il cui principale vantaggio rispetto al suo predecessore HTTP 1.1 è l'elevata velocità di trasferimento richiesta per i siti Web ricchi di contenuti.
In questa guida, analizzeremo l'installazione e la configurazione di un server Nginx sicuro con supporto HTTP/2:
Prerequisiti
Per iniziare, esaminiamo il controllo del volo e vediamo se abbiamo quanto segue
- Un'istanza del server di Ubuntu 18.04 LTS
- Nginx versione 1.9.5 o successiva (per verificare la versione di Nginx, esegui
nginx -v
), leggi Installa Nginx su Ubuntu 18.04. - OpenSSL versione 1.0.2 o successiva (verifica la versione utilizzando la versione openssl)
- Un normale utente non root con privilegi sudo
- Un nome di dominio completo (FQDN) In questo caso, utilizzeremo
crazytechgeek.info
acquistato da GoDaddy.Il record A del nome di dominio deve puntare all'indirizzo IP del server. crazytechgeek.info è stato indirizzato a 216.200.116.207.
- Un certificato SSL (un certificato autofirmato o uno di Let's encrypt SSL. Allo stesso modo, puoi acquistarne uno da un provider diverso.
Fase 1 – Abilitazione del supporto HTTP/2.0
Per iniziare, si presume che tu abbia configurato il blocco del server Nginx su
/etc/nginx/sites-available/your_domain
Nel nostro caso, il blocco del server è /etc/nginx/sites-available/crazytechgeek.info
.
Utilizzando il tuo editor di testo preferito, apri il file di blocco del server e individua il listen
direttiva come mostrato
La prima direttiva indica le connessioni IPv6 mentre la seconda è per le connessioni IPv4
Ora modificheremo ogni direttiva per includere un http2
contrassegna come mostrato
Questo indicherà a Nginx di utilizzare HTTP/2 sui browser supportati
Salva il file di configurazione ed esci dall'editor.
Quindi, apri /etc/nginx/sites-available/default
file e apportare le stesse modifiche
Salva ed esci dall'editor di testo.
Solo per assicurarti che non ci siano errori di sintassi in nessuno dei file Nginx, esegui il comando seguente
$ sudo nginx -t
Risultato
Fase 2 – Eliminazione di codici vecchi e insicuri
Affinché HTTP/2 funzioni come previsto, dobbiamo evitare di utilizzare crittografie vecchie e non sicure che sono state nella lista nera di HTTP/2. Le suite di crittografia sono algoritmi crittografici che determinano come crittografare il traffico.
Se certbot è stato utilizzato per ottenere i certificati, allora i codici nel percorso /etc/letsencrypt/options-ssl-nginx.conf
non sono abbastanza sicuri per HTTP/2. Tuttavia, la modifica di questo file causerà solo errori e impedirà a certbot di applicare gli aggiornamenti. Ciò significa che dobbiamo specificare il nostro elenco di crittografie e indicare a Nginx di ignorare il file
Apri il file di configurazione per il blocco del server di dominio di Nginx
$ vim /etc/nginx/sites-available/crazytechgeek.info
Commenta questa riga
# include /etc/letsencrypt/options-ssl-nginx.conf;
Sotto quella riga, aggiungi la riga sottostante per definire le crittografie consentite
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
Salva il file ed esci dall'editor di testo
Se è stato utilizzato un certificato autoassegnato o un certificato di terze parti, apri il file
/etc/nginx/snippets/ssl-params.conf
$ sudo vim /etc/nginx/snippets/ssl-params.conf
Individua la riga come mostrato di seguito
...
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384;
...
Modifica il file di conseguenza come mostrato di seguito
...
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
Infine salva ed esci dal file di configurazione
Ancora una volta controlla eventuali errori di configurazione di Nginx
$ sudo nginx -t
Se tutto è andato bene, dovresti vedere l'output di seguito come mostrato in precedenza
Riavvia Nginx
$ sudo systemctl reload nginx
Nel passaggio successivo, testeremo se il nostro server può server HTTP/2 pagine
Fase 3:verifica se HTTP/2 è abilitato
Ora proviamo se HTTP è in esecuzione e abilitato sul nostro server web Nginx
Nel tuo terminale, esegui il comando seguente
curl -I -L https://your_domain
Nel nostro caso, sarà
curl -I -L https://crazytechgeek.info
Risultato
In alternativa, puoi verificare HTTP/2 aprendo gli strumenti per sviluppatori di Google premendo
Ctrl + Shift + I
Quindi, fai clic su Network
Tab.
Nel Protocol
colonna, assicurati di trovare l'etichetta h2
Fase 4 – Distribuzione della sicurezza del trasporto rigoroso HTTP
Infine, anche se sappiamo molto chiaramente che il nostro server può reindirizzare le richieste HTTP a HTTPS, vogliamo abilitare HSTS HTTP Strict Transport Security per eliminare tali reindirizzamenti. Se un browser dovesse imbattersi in un'intestazione HSTS, non tenterà di connettersi nuovamente al server per un certo periodo di tempo. L'IT scambierà i dati solo tramite il protocollo HTTPS sicuro e crittografato.
Per ottenere ciò, apri il file di configurazione di Nginx
$ vim /etc/nginx/nginx.conf
Aggiungi la riga sotto
add_header Strict-Transport-Security "max-age=15768000" always;
max-age
è impostato in secondi
Se il tuo sito ha sottodomini e desideri applicare HSTS a tutti, aggiungi il includeSubDomains
flag alla fine della riga
add_header Strict-Transport-Security "max-age=15768000; includeSubDomains" always;
Salva ed esci dal file di configurazione.
Come sempre, controlla se ci sono errori
$ sudo nginx -t
Infine, riavvia Nginx
$ sudo systemctl restart nginx
Conclusione
A questo punto, il tuo server Nginx sta ora servendo pagine HTTP/2.
Puoi anche visitare https://tools.keycdn.com/http2-test
per testare lo stato HTTP/2 del tuo sito come mostrato
In alternativa, puoi anche visitare questo sito
https://http2.pro/
Per risultati più dettagliati usa
https://www.ssllabs.com/ssltest/