Introduzione

Nginx è un server web open source veloce e affidabile. Ha guadagnato popolarità grazie al suo basso utilizzo di memoria, elevata scalabilità, facilità di configurazione e supporto per la maggior parte dei diversi protocolli.

Uno dei protocolli supportati è HTTP/2. Il principale vantaggio di HTTP/2 è la sua elevata velocità di trasferimento per siti Web ricchi di contenuti.

HTTP/2 è una nuova versione di Hypertext Transport Protocol, che viene utilizzata sul Web per fornire pagine dal server al browser. Il protocollo HTTP 1.1 limita le velocità di trasferimento potenziali per la maggior parte dei siti Web moderni perché scarica parti di una pagina in una coda e una pagina Web moderna media richiede circa 100 richieste da scaricare

HTTP/2 risolve questo problema.

  • Tutte le richieste vengono scaricate in parallelo, non in coda.
  • Le intestazioni HTTP sono compresse.
  • Le pagine vengono trasferite come file binario, non come file di testo.
  • I server possono "spingere" i dati anche senza la richiesta dell'utente, il che migliora la velocità per gli utenti con latenza elevata

Questo tutorial ti aiuterà a configurare un server Nginx veloce e sicuro con supporto HTTP/2.

Installare Nginx

Il supporto del protocollo HTTP/2 è stato introdotto in Nginx 1.9.5. Fortunatamente, il repository predefinito in Ubuntu 18.04 LTS contiene una versione superiore a questa, quindi non è necessario aggiungere un repository di terze parti.

Innanzitutto, aggiorniamo l'elenco dei pacchetti disponibili nel sistema di packaging apt:
sudo apt update

Quindi installiamo Nginx:
sudo apt install nginx

Possiamo controllare la versione di Nginx installata:
sudo nginx -v

Configurare Nginx

Apriamo il file di configurazione principale di Nginx e cambiamo la porta 80 HTTP alla 443 HTTPS:
sudo nano /etc/nginx/sites-available/default

Di default dovreste avere questa configurazione:

listen 80 default_server;
listen [::]:80 default_server;

Cambiamola in questo modo:

listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;

La prima riga riguarda le connessioni IPv4, la seconda si riferisce alle connessioni di tipo IPv6

Cambiamo il name_server inserendo il nostro nome dominio, per esempio:

server_name esempio.com;

Salviamo e chiudiamo il file.

Per controllare se non abbiamo commesso errori, da terminale:
sudo nginx -t

Se non sono stati commessi errori, riceveremo il seguente output:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Installiamo i certificati SSL

Per l'installazione dei certificati SSL necessari per utilizzare il protocollo HTTPS e la porta 443 consiglio di leggere la seguente guida: Installare Let's Encrypt per Nginx su Ubuntu 18.04 LTS.

Seguendo questa guida sarà possibile installare gratuitamente i certificati SSL con Let's Encrypt.

Ottimizzare Nginx

HTTP/2 ha un'enorme lista nera di cifrari vecchi e insicuri, quindi dobbiamo evitarli. Le suite di crittografia sono un insieme di algoritmi crittografici che descrivono come i dati di trasferimento devono essere crittografati.

Useremo un set di cifrari molto popolare, la cui sicurezza è stata approvata da giganti di Internet come CloudFlare.

Apriamo il seguente file di configurazione:
sudo nano /etc/nginx/nginx.conf

Aggiungiamo le seguenti righe dopo ssl_prefer_server_ciphers on;

ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_session_cache shared:SSL:5m;
ssl_session_timeout 1h;

ssl_session_cache specifica la dimensione della cache che conterrà le informazioni sulla sessione.
ssl_session_timeout limita il tempo in cui determinate sessioni sono memorizzate nella cache.

Aggiungiamo anche questa riga sempre nello stesso file nginx.conf:

add_header Strict-Transport-Security "max-age=15768000" always;

Questa intestazione dovrebbe proteggerci dagli attacchi di downgrade del protocollo.

Per impostazione predefinita, questa intestazione non viene aggiunta alle richieste di sottodominio. Se hai sottodomini devi aggiungere la variabile includeSubDomains alla fine della riga, in questo modo:

add_header Strict-Transport-Security "max-age=15768000; includeSubDomains" always;

Salvare e chiudere il file.

Controlliamo se abbiamo commesso degli errori:
sudo nginx -t

Se non riscontriamo errori possiamo riavviare Nginx:
sudo service nginx restart

L'installazione di Nginx con il protocollo HTTP2 su Ubuntu 18.04 LTS è terminata.