Skip to content

Introduzione

Nginx è un ottimo software web server, la configurazione di base che si ritrova dopo la sua installazione può essere tuttavia ottimizzata. Esistono alcune funzioni di Nginx che, quando attivate, permettono di massimizzare la velocità di trasferimento dei file tra server e client e ridurre al massimo i tempi di caricamento delle pagine.

In questo tutorial ti mostro come ho configurato il web server di EVE Milano ed, in genere, i server Nginx dei miei clienti.

Innanzitutto, ti mostrerò come abilitare la compressione Gzip per tipi specifici di file. Quindi configureremo il caching del browser per una spinta extra. Questi metodi miglioreranno la velocità di qualsiasi sito in esecuzione su Nginx, indipendentemente dal software o dal CMS (WordPress, Joomla, Drupal, …) con cui è stato creato.

Ad esempio, un’installazione di WordPress lenta e poco performante vedrebbe guadagni immediati senza che il webmaster debba toccare una linea di codice del CMS, o pagare per costosi servizi e plugin di prestazioni. Questo approccio funziona anche se il sito è in esecuzione su hosting condiviso a bassa potenza, a condizione che il server sia Nginx e sia possibile modificare il file di configurazione del blocco (il Virtual Host).

Prerequisiti

Per completare questo tutorial, avrai bisogno di:

  • Un server Ubuntu 16.04, incluso un utente non root sudo.
  • Nginx installato sul tuo server.

Prima di iniziare

Prima di partire con le ottimizzazioni del web server Nginx fai una fotografia della situazione iniziale. Esegui un test di velocità con i principali tool (Page Speed, Nginx, Pingdom e WebPageTest) e salva i report. In seguito potrai confrontare i miglioramenti ottenuti.

Configura Nginx

Invece che modificare il file di configurazione generale di Nginx (dentro /etc/nginx/) preferisco modificare il file di configurazione del singolo blocco del sito, questo mi permette di gestire le funzionalità dei vari siti in modo più personalizzato.

Apri il file di configurazione del tuo sito via shell SSH:
sudo nano /etc/nginx/sites-available/[tuo_blocco]

oppure scaricalo in locale via (S)FTP.

Identifica il blocco server dentro al quale devi inserire i nuovi comandi:

server {
listen 80 default_server;
listen [::]:80 default_server;
...
}

Questa è la lista completa dei comandi e delle configurazioni da inserire. In seguito ti spiego la funzione di ciascun comando.

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    gzip on;
    gzip_comp_level    5;
    gzip_min_length    256;
    gzip_proxied       any;
    gzip_vary          on;

    gzip_types
    application/atom+xml
    application/javascript
    application/json
    application/ld+json
    application/manifest+json
    application/rss+xml
    application/vnd.geo+json
    application/vnd.ms-fontobject
    application/x-font-ttf
    application/x-web-app-manifest+json
    application/xhtml+xml
    application/xml
    font/opentype
    image/bmp
    image/svg+xml
    image/x-icon
    text/cache-manifest
    text/css
    text/plain
    text/vcard
    text/vnd.rim.location.xloc
    text/vtt
    text/x-component
    text/x-cross-domain-policy;
    # text/html is always compressed by gzip module

    location ~*  \.(jpg|jpeg|png|gif|ico|css|js|pdf)$ {
        expires 7d;
    }
}

Abilita la compressione Gzip

File CSS, JavaScript e immagini possono occupare diverso spazio, aumentando i dati che gli utenti devono scaricare. La compressione Gzip, sia su Apache che su Nginx, permette di ridurre le dimensioni di tutti questi asset senza comprometterne la qualità ed i contenuti.

Questa funzione è disponibile nella maggior parte delle distribuzioni Linux e basta solo attivarla e configurarla correttamente. Con Gzip abilitato, i browser possono scaricare gli asset statici più rapidamente dato che pesano di meno e si trasferiscono in meno tempo da server a client.

I comandi, relativi a Gzip, inseriti nel file di configurazione sono:

  • gzip on: è il primo comando, abilita la funziona gzip.
  • gzip_comp_level 5: definisce il livello di compressione (hai presente RAR?). Puoi inserire un valore da 1 a 9. Secondo gli esperti 5 è il compromesso perfetto tra dimensione e carico alla CPU. A questo livello Gzip offre una compressione del 75% per la maggior parte dei file ASCII, che è un valore quasi identico a quello ottenibile con un livello di compressione pari a 9.
  • gzip_min_length 256: comando per dire a Nginx di non comprimere alcun file che sia già piccolo. Il valore di default è 20 byte che, sempre secondo gli esperti, è troppo basso. Comprimere file molto piccoli spesso genera file di dimensioni maggiori. Per questo motivo si consiglia di usare un valore di 256, che è un ottimo compromesso.
  • gzip_proxied any: comando per dire a Nginx di comprimere anche per i client connessi via proxy.
  • gzip_vary on: comando collegato a quello precedente: vary serve per chiedere ai proxy di tenere in cache sia la versione compressa che quella non compressa, nel caso in cui gli “Accept-Encoding” del client cambiassero. La funzione permette di evitare il problema dove ad un client non in grado di interpretare contenuto compresso con Gzip (caso ad oggi sia molto raro) venga inviato un file Gzip.
  • gzip_types: questo comando elenca in successione tutte le tipologie di file (MIME-types) che devono essere compresse in uscita con Gzip. Nella mia configurazione comprimo i formati più comuni. Se modifichi la lista attento a rispettare il “;” in chiusura.

Abilita il browser caching

Attraverso il browser caching è possibile chiedere al browser di salvare in cache i file del sito quando lo visita per la prima volta.

Nelle visite successive, il browser servirà le varie versioni dei file locali invece di scaricare nuovamente gli stessi file. Questo metodo permette al browser di caricare la pagina molto più velocemente dato che è servito scaricare solo una piccola parte dei file, quelli che sono cambiati rispetto all’ultima visita.

Come puoi immaginare l’esperienza utente migliora molto all’aumentare della velocità di caricamento.

Il comando “location” viene appunto utilizzato per dire ai browser quali file tenere in cache. Il comando “expires” indica la durata della cache. Come durata puoi scegliere il valore che meglio rispetta i cambiamenti che tu fai al sito. Quando i cambiamenti sul sito sono rari allungo la durata fino a 30 giorni. Quando invece i cambiamenti sono frequenti imposto la durata a 23 ore. Una media ragionevole potrebbe essere 7 giorni.

location ~* \.(jpg|jpeg|png|gif|ico|css|js|pdf)$ {
expires 7d;
}

Testa il file di configurazione

Dopo aver modificato il file di configurazione del blocco Nginx, salvalo e chiudi. Prima di riavviare il web server è opportuno testare il file di configurazione per verificare che non ci siano problemi ed errori.

Apri la shell SSH e digita questo comando per avviare il test:
sudo nginx -t

Se hai fatto tutto correttamente (a me non capita mai la prima volta) non dovresti ricevere messaggi di errore. Ora puoi riavviare il web server per abilitare la nuova configurazione:
sudo systemctl restart nginx oppure sudo service nginx restart

A questo punto non ti resta che ripetere i test di velocità e confrontare i risultati. I lettori più bravi e attenti lasceranno come commento qui sotto il punteggio iniziale e quello finale di PageSpeed Insights :D

Articoli correlati

Autore

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Ultimi articoli aggiornati

Richiedi un preventivo SEO e Google Ads

Porta il tuo sito web al livello successivo con l’expertise di EVE Milano. La nostra agenzia di Search Marketing ha ricevuto oltre 1130 richieste di preventivo, un segnale chiaro della fiducia che imprenditori e manager, come te, ripongono nella nostra specializzazione tecnica e verticale nella SEO e PPC. Se la tua organizzazione cerca competenze specifiche per emergere nei risultati di Google, noi siamo pronti a fornire quel valore aggiunto. Affidati alla nostra esperienza per fare la differenza.
Richiedi un preventivo

Non perderti altre guide, iscriviti per ricevere un avviso mensile con gli aggiornamenti del blog!

Iscriviti alla newsletter!

Informativa sui cookies

Noi e terze parti selezionate utilizziamo cookie o tecnologie simili per finalità tecniche e, con il tuo consenso, anche per le finalità di esperienza e misurazione come specificato nella cookie policy. Puoi liberamente prestare, rifiutare o revocare il tuo consenso, in qualsiasi momento, accedendo al pannello delle preferenze. Il rifiuto del consenso può rendere non disponibili le relative funzioni. Usa il pulsante “Accetta” per acconsentire. Usa il pulsante “Rifiuta” per continuare senza accettare.