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

21 min lettura

Ridurre i tempi di risposta del server è vitale per abbattere il TTFB e dominare metriche come LCP e INP. Workflow tecnico per aumentare la velocità dell'hosting: dalla transizione verso VPS alla configurazione avanzata dello stack LEMP per ottenere server realmente accelerati.
33 mi piace
7 min lettura

Forza il download anticipato degli asset critici tramite link rel="preload" per ottimizzare la critical request chain. Analisi sull'implementazione del css preload e dei font, con focus tecnico sulle differenze architetturali e di priorità esecutiva rispetto alle direttive prefetch.
25 mi piace

Autore

Lascia un commento

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

Ultimi articoli aggiornati

22 min lettura

Difendere WordPress dai commenti spam con una strategia defense in depth a tre layer: configurazioni applicative, regole edge su Cloudflare, barriere a livello web server. Honeypot PHP, regole .htaccess e Nginx modernizzate, Cloudflare Turnstile, fail2ban. Snippet completi pronti da incollare.
0 mi piace
22 min lettura

Analisi tecnica della persistenza dei dati nel protocollo HTTP tramite header Set-Cookie. Comprendere la meccanica dei cookie, attributi come Max-Age e i limiti di Googlebot come crawler stateless è essenziale per diagnosticare problemi di rendering e involuntary cloaking.
3 mi piace
19 min lettura

Analisi dell'architettura RAG nativa per WordPress sviluppata interamente in PHP e MySQL, senza dipendenze da database vettoriali esterni. Il sistema supera i limiti della ricerca lessicale integrando la ricerca semantica su VPS o hosting condivisi con meno di 1GB di RAM.
2 mi piace
7 min lettura

La gestione dei 404 durante le migrazioni richiede automazione per preservare la link equity. migTool è uno script Python progettato per automatizzare la mappatura dei redirect 301 intelligenti, ottimizzando il processo di reindirizzamento ed eliminando le inefficienze manuali.
5 mi piace

Richiedi un preventivo SEO e Google Ads

Porta il tuo sito web al livello successivo con l’esperienza di EVE Milano. La nostra agenzia di Search Marketing ha ricevuto oltre 1210 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. Richiedi un preventivo ora e scopri la differenza tra noi e gli altri.
Richiedi un preventivo

Vuoi ricevere un avviso al mese con le nuove guide pubblicate?

Iscriviti alla newsletter!