La compressione è una sola impostazione con un effetto grande e immediato sul testo: HTML, CSS, JavaScript, JSON, SVG. Non ha alcun effetto su ciò che è già compresso, e chiederla lì costa processore per nulla.
Attivala
gzip on;
gzip_vary on;
gzip_comp_level 5;
gzip_min_length 1024;
gzip_types text/plain text/css application/json application/javascript
text/xml application/xml image/svg+xml;
Il livello 5 è la via di mezzo utile. Il livello 9 costa sensibilmente più processore per un punto percentuale o due, e a ogni singola richiesta.
Cosa NON comprimere
JPEG, PNG, WebP, MP4 e ZIP sono già compressi. Passarci sopra gzip rende il file appena PIÙ GRANDE e brucia processore per farlo. L'eccezione è image/svg+xml: l'SVG è testo.
Brotli, dove è disponibile
brotli on;
brotli_comp_level 5;
brotli_types text/plain text/css application/json application/javascript image/svg+xml;
Sul testo Brotli è di norma il 15-20% più piccolo di gzip. Tieni configurato anche gzip accanto: il browser dichiara cosa accetta e il server sceglie.
Verifica che stia davvero avvenendo
curl -sI -H 'Accept-Encoding: gzip, br' https://yourdomain.com/ | grep -i content-encoding
L'assenza dell'intestazione content-encoding vuol dire che non si comprime nulla, spesso perché un proxy davanti sta togliendo l'intestazione della richiesta.
gzip_min_length conta: comprimere una risposta da 200 byte costa più di quanto risparmi, perché il sovrappiù dell'intestazione ha dimensione fissa. Un kilobyte è una soglia minima sensata.
