Home Chi Sono
Servizi
WordPress Sviluppo Web Server & Hosting Assistenza Tecnica Windows Android
Blog
Tutti gli Articoli WordPress Hosting Plesk Assistenza Computer Windows Android A.I.
Contatti

Come Abilito la Compressione Brotli e Ottimizzo le Performance del Server Web: La Mia Configurazione su Nginx

Se gestisci un server web e vuoi spremere ogni millisecondo dal tempo di caricamento delle tue pagine, la compressione Brotli su Nginx è una di quelle ottimizzazioni che fanno davvero la differenza. Nella mia esperienza da system administrator, ho visto siti WordPress passare da un Time to First Byte mediocre a risultati eccellenti semplicemente abilitando e configurando correttamente questo algoritmo di compressione sviluppato da Google.

Brotli è un algoritmo di compressione lossless che utilizza una combinazione moderna dell’algoritmo LZ77, Huffman coding e context modeling di secondo ordine. In parole povere: comprime i file di testo (HTML, CSS, JavaScript) in maniera significativamente più efficiente rispetto al vecchio Gzip. Secondo i benchmark più recenti, Brotli riduce la dimensione dei file del 15-25% in più rispetto a Gzip a parità di utilizzo CPU, il che si traduce direttamente in pagine che si caricano più velocemente e meno banda consumata.

In questo articolo vi mostro passo passo come ho configurato Brotli sul mio server Nginx, sia su installazioni standalone che su Plesk Obsidian, con tutti i comandi testati e funzionanti. Se avete già seguito la mia guida su come abilitare HTTP/3 QUIC su Plesk con Nginx, questa è l’ottimizzazione perfetta da abbinare per massimizzare le performance.

Perché Scegliere Brotli al Posto di Gzip per la Compressione Web

La domanda che mi fanno più spesso è: “Ma Gzip non basta?”. La risposta è sì, Gzip funziona ancora bene, ma Brotli fa meglio. Nei miei test sul campo, i risultati sono stati inequivocabili: su un bundle JavaScript da 600 KB, Gzip lo riduceva a circa 209 KB (65% di riduzione), mentre Brotli arrivava a 161 KB, un miglioramento del 23% rispetto a Gzip.

Brotli è particolarmente efficace sui contenuti testuali come HTML, CSS, JavaScript e JSON grazie al suo dizionario statico interno ottimizzato per il web. La decompressione lato client è veloce quanto quella di Gzip, quindi l’utente finale non subisce nessun impatto negativo sulla batteria o sulle prestazioni del dispositivo, nemmeno su mobile.

Un altro vantaggio cruciale: Brotli è perfettamente compatibile con i protocolli moderni come HTTP/2 e HTTP/3, e il supporto dei browser è ormai universale al 96% secondo Can I Use. I browser che non lo supportano (fondamentalmente solo IE11) riceveranno automaticamente la risposta compressa in Gzip come fallback.

Compressione Brotli su Nginx: Prerequisiti e Installazione del Modulo

Prima di tutto, dobbiamo verificare che il modulo Brotli sia disponibile. Su Nginx, Brotli non è incluso di default nel pacchetto base: va caricato come modulo dinamico o compilato come modulo statico. Il modulo ufficiale è sviluppato e mantenuto da Google ed è disponibile su GitHub.

Verifica della versione Nginx installata

Il primo passo è controllare la versione di Nginx in esecuzione sul server:

nginx -v

Annotate la versione esatta, perché i moduli dinamici devono essere compilati con gli stessi argomenti di configurazione della vostra installazione Nginx. Per ottenere i dettagli completi:

nginx -V

Installazione su Debian/Ubuntu tramite pacchetto

Se usate Debian o Ubuntu con il pacchetto Nginx ufficiale, potete installare il modulo senza compilare nulla. Ecco come:

sudo apt-get update
sudo apt-get install libnginx-mod-brotli

Dopo l’installazione, i moduli vengono caricati automaticamente. Verificate con:

nginx -t

Installazione compilando il modulo da sorgente

Se il pacchetto precompilato non è disponibile per la vostra distribuzione, dovrete compilare il modulo. All’inizio questa procedura mi sembrava complicata, ma in realtà è piuttosto lineare. Installate prima le dipendenze:

sudo apt-get install build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev

Scaricate i sorgenti di Nginx (stessa versione installata) e clonate il modulo Brotli:

# Scaricate i sorgenti Nginx (sostituite con la vostra versione)
wget http://nginx.org/download/nginx-1.26.2.tar.gz
tar -xzvf nginx-1.26.2.tar.gz

# Clone del modulo Brotli con submodule
git clone --recurse-submodules -j8 https://github.com/google/ngx_brotli.git

Compilate il modulo dinamico usando gli stessi argomenti di configurazione della vostra installazione Nginx. All’inizio non funzionava perché avevo dimenticato il flag --with-compat, che è fondamentale per la compatibilità binaria:

cd nginx-1.26.2
./configure $(nginx -V 2>&1 | grep 'configure arguments' | sed 's/configure arguments: //') 
  --with-compat --add-dynamic-module=../ngx_brotli
make modules

Copiate i moduli compilati nella directory corretta:

sudo cp objs/ngx_http_brotli_filter_module.so /usr/lib/nginx/modules/
sudo cp objs/ngx_http_brotli_static_module.so /usr/lib/nginx/modules/

Configurazione Brotli su Nginx: La Mia Configurazione Ottimale

Una volta installato il modulo, dobbiamo caricarlo e configurarlo. Ecco la procedura step-by-step che uso su tutti i miei server.

Step 1: Caricare i moduli dinamici

Aprite il file /etc/nginx/nginx.conf e aggiungete queste righe all’inizio del file, prima del blocco http:

# Carica moduli Brotli - compressione on-the-fly
load_module modules/ngx_http_brotli_filter_module.so;
# Carica moduli Brotli - file pre-compressi
load_module modules/ngx_http_brotli_static_module.so;

Step 2: Configurare la compressione nel blocco http

All’interno del blocco http { }, aggiungete la configurazione Brotli. Questa è la configurazione che uso in produzione, bilanciata tra compressione e utilizzo CPU:

http {
    # === BROTLI COMPRESSION ===
    brotli on;
    brotli_comp_level 6;
    brotli_static on;
    brotli_min_length 256;
    brotli_types
        application/atom+xml
        application/javascript
        application/json
        application/vnd.api+json
        application/rss+xml
        application/vnd.ms-fontobject
        application/x-font-opentype
        application/x-font-truetype
        application/x-font-ttf
        application/x-javascript
        application/xhtml+xml
        application/xml
        font/eot
        font/opentype
        font/otf
        font/truetype
        image/svg+xml
        image/vnd.microsoft.icon
        image/x-icon
        text/css
        text/javascript
        text/plain
        text/xml;

    # === GZIP FALLBACK ===
    gzip on;
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml image/svg+xml;
}

Vi spiego ogni direttiva nel dettaglio:

  • brotli on; – Attiva la compressione Brotli on-the-fly per le risposte dinamiche
  • brotli_comp_level 6; – Livello di compressione bilanciato. I livelli vanno da 0 a 11: il livello 6 è il miglior compromesso tra rapporto di compressione e utilizzo CPU per contenuti dinamici. Riservate il livello 11 solo per la pre-compressione di file statici
  • brotli_static on; – Nginx cerca automaticamente file .br pre-compressi prima di comprimere on-the-fly, riducendo drasticamente il carico sulla CPU
  • brotli_min_length 256; – Ignora file sotto i 256 byte, dove la compressione non porta benefici reali
  • brotli_types – Lista dei MIME type da comprimere. Non includete mai formati già compressi come JPEG, PNG o WebP

Step 3: Testare e ricaricare Nginx

Prima di ricaricare, testate sempre la configurazione:

# Verifica sintassi configurazione
sudo nginx -t

# Se tutto OK, ricaricate
sudo systemctl reload nginx

Pre-compressione dei File Statici per Massime Performance

Uno dei trucchi più potenti che ho imparato è la pre-compressione dei file statici. Invece di comprimere al volo ogni richiesta (consumando CPU), potete comprimere i file una sola volta durante il deploy e lasciare che Nginx li serva direttamente grazie a brotli_static on;.

Generare file .br pre-compressi

Installate il tool Brotli CLI e usatelo per pre-comprimere CSS e JavaScript al livello massimo:

# Installazione tool brotli
sudo apt-get install brotli

# Pre-compressione di un singolo file al livello massimo
brotli --best -f /var/www/html/wp-content/themes/mytheme/style.css

# Pre-compressione massiva di tutti i CSS e JS
find /var/www/html/wp-content/ -type f ( -name "*.css" -o -name "*.js" ) 
  -exec brotli --best -f {} ;

Il vantaggio è enorme: il livello 11 produce file significativamente più piccoli, ma è troppo lento per la compressione on-the-fly. Con la pre-compressione, il costo computazionale lo pagate una volta sola e Nginx serve i file .br con impatto CPU praticamente zero.

Se usate WordPress con un sistema di build o un plugin di cache, potete integrare questa operazione nel vostro workflow. Se volete automatizzare questo tipo di operazioni, vi consiglio di leggere il mio articolo su come configurare i Cronjob su Plesk per schedulare la pre-compressione automatica.

Configurare Brotli su Plesk Obsidian con Nginx

Se usate Plesk Obsidian come pannello di controllo (come faccio io su diversi server), la buona notizia è che a partire dalla versione 18.0.33 Plesk ha introdotto il supporto nativo per Brotli su Nginx, e la compressione è abilitata di default.

Verificare che Brotli sia attivo su Plesk

Controllate che i moduli siano caricati correttamente. I file di configurazione si trovano in:

# Verificate la presenza del file di caricamento moduli
cat /etc/nginx/modules.available.d/brotli.load

Dovrebbe contenere:

load_module nginx/modules/ngx_http_brotli_filter_module.so;
load_module nginx/modules/ngx_http_brotli_static_module.so;

Se il file esiste ma Brotli non funziona, verificate che il symlink sia presente in modules.conf.d. Nella mia esperienza, questo è il problema più comune su Plesk: i moduli sono disponibili ma il symlink manca.

Personalizzare la configurazione Brotli su Plesk

Per personalizzare i parametri, create un file di configurazione dedicato:

sudo nano /etc/nginx/conf.d/brotli.conf

Inserite la configurazione ottimale:

brotli on;
brotli_comp_level 6;
brotli_static on;
brotli_min_length 256;
brotli_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript application/xhtml+xml image/svg+xml font/opentype font/otf font/truetype;

Se non volete abilitare Brotli globalmente, ma preferite gestirlo per singolo dominio, potete specificare brotli off; nel file /etc/nginx/conf.d/yy000_brotli_tweaks.conf e poi aggiungere brotli on; nelle direttive Nginx aggiuntive del singolo dominio dal pannello Plesk.

Importante: se Nginx è in modalità proxy con Apache come backend, dovrete disabilitare la compressione gzip in Apache aggiungendo nelle direttive HTTP/HTTPS del dominio:

SetEnv no-gzip 1

Come Verificare che la Compressione Brotli Funziona Correttamente

Dopo aver configurato tutto, è fondamentale verificare che Brotli sia effettivamente attivo. Ecco i metodi che uso:

Test da linea di comando con curl

curl -I -H "Accept-Encoding: br" https://vostrodominio.it/

Cercate nell’output l’header Content-Encoding: br. Se lo vedete, Brotli sta funzionando correttamente. Se invece trovate Content-Encoding: gzip, c’è un problema nella configurazione.

Test tramite Chrome DevTools

  1. Aprite Chrome e navigate sul vostro sito
  2. Premete F12 per aprire i DevTools
  3. Andate nella tab Network
  4. Ricaricate la pagina
  5. Cliccate su una risorsa e controllate nei Response Headers il valore di Content-Encoding

Il valore “br” conferma che la risposta è compressa con Brotli.

Test online

Potete anche usare tool online come il Brotli test di KeyCDN oppure i servizi di website speed test che includono la verifica della compressione tra i controlli automatici.

Brotli e WordPress: Ottimizzazione Combinata

Se come me gestite siti WordPress, la compressione Brotli si integra perfettamente con le altre ottimizzazioni. Il mio consiglio è di combinare Brotli con un buon plugin di cache come WP Super Cache o W3 Total Cache, che genera file statici HTML che Nginx può servire pre-compressi con impatto CPU praticamente nullo.

Se avete problemi con WordPress dopo questa configurazione, potrebbe essere utile consultare la mia guida su come risolvere l’errore 500 su WordPress oppure, se state partendo da zero, la procedura su come configurare WordPress dopo l’installazione.

Ricordatevi anche che la sicurezza del sito va di pari passo con le performance: assicuratevi di aver configurato la protezione brute force su WordPress e Fail2Ban su Plesk per proteggere il server.

Errori Comuni e Troubleshooting

Nel corso degli anni ho incontrato diversi problemi nell’abilitazione di Brotli. Ecco i più frequenti con le relative soluzioni:

  • “unknown directive brotli” – I moduli non sono stati caricati correttamente. Verificate che le direttive load_module siano posizionate prima del blocco http { } in nginx.conf
  • “module is not binary compatible” – Avete compilato il modulo con argomenti diversi da quelli dell’installazione Nginx. Ricompilate usando esattamente gli stessi argomenti di nginx -V con l’aggiunta di --with-compat
  • Brotli attivo ma le risposte arrivano in Gzip – Controllate che non ci sia un CDN o un reverse proxy intermedio che sovrascrive la compressione. Verificate anche che il MIME type della risorsa sia incluso in brotli_types
  • Su Plesk i symlink dei moduli mancano – Create manualmente il symlink da modules.available.d a modules.conf.d

FAQ

Brotli e Gzip possono coesistere sullo stesso server Nginx?

Sì, assolutamente. Nella mia configurazione tengo sempre entrambi attivi. Nginx serve le risposte in Brotli ai browser moderni che lo supportano (il 96% circa) e fa automaticamente fallback su Gzip per i client più vecchi. Il browser indica quale compressione supporta tramite l’header Accept-Encoding.

Quale livello di compressione Brotli devo usare?

Per la compressione on-the-fly (contenuti dinamici), il livello 6 è il miglior compromesso tra rapporto di compressione e velocità. I livelli da 0 a 11 bilanciano in modo diverso queste due variabili. Per i file statici pre-compressi, usate il livello 11 (massimo) con il flag --best del tool Brotli, dato che la compressione avviene una sola volta.

Devo comprimere le immagini con Brotli?

No, mai. I formati immagine come JPEG, PNG e WebP sono già compressi con algoritmi specifici ottimizzati. Applicare Brotli su file già compressi non solo non porta benefici ma può addirittura aumentare la dimensione del file. Comprimete solo contenuti testuali: HTML, CSS, JavaScript, JSON, XML e font SVG.

La compressione Brotli influisce sulla SEO?

Indirettamente sì, in modo molto positivo. Pagine più leggere significano tempi di caricamento più rapidi, e i Core Web Vitals (specialmente FCP e LCP) migliorano sensibilmente. Google tiene in grande considerazione la velocità di caricamento come fattore di ranking, quindi abilitare Brotli è un’ottimizzazione SEO indiretta ma concreta.

È possibile abilitare Brotli solo su specifici domini in Plesk?

Sì. Potete disabilitare Brotli globalmente nel file /etc/nginx/conf.d/yy000_brotli_tweaks.conf con la direttiva brotli off; e poi abilitarlo selettivamente nelle direttive Nginx aggiuntive del singolo dominio tramite il pannello Plesk con brotli on;.

Conclusione: Compressione Brotli su Nginx, un’Ottimizzazione che Fa la Differenza

Abilitare la compressione Brotli su Nginx è una di quelle ottimizzazioni server che richiedono poco sforzo ma danno risultati immediatamente misurabili. Nel mio lavoro quotidiano di system administrator, ho visto miglioramenti concreti: file più piccoli del 15-25% rispetto a Gzip, tempi di caricamento ridotti, Core Web Vitals migliori e meno banda consumata.

La chiave è combinare la compressione Brotli on-the-fly al livello 6 per i contenuti dinamici con la pre-compressione al livello 11 per gli asset statici, mantenendo Gzip come fallback per la compatibilità universale. Se usate Plesk, la buona notizia è che il supporto è nativo e richiede pochissima configurazione aggiuntiva.

Se questo articolo vi è stato utile e volete approfondire altre ottimizzazioni server, vi consiglio anche la mia guida su come migrare un sito su nuovo hosting senza downtime. E se avete dubbi o volete condividere la vostra esperienza con Brotli, lasciate un commento qui sotto!

Share: