Come risparmiare traffico con mod_deflate su Lighttpd 1.4 — Debian Etch
Questo tutorial mostra come compilare e installare una versione di Lighttpd 1.4 con il supporto per mod_deflate su Debian Etch e come configurarlo. mod_deflate permette di comprimere contenuti statici e dinamici (HTML, PHP, CSS, XML), riducendo significativamente il traffico di rete e migliorando i tempi di caricamento sul lato client. Include anche controlli di verifica, approcci alternativi e checklist operative.
Sommario rapido
- Perché: compressione HTTP per ridurre il traffico e accelerare la consegna.
- Cosa serve: sorgenti Lighttpd 1.4.13, patch mod_deflate, strumenti di compilazione e dipendenze Debian.
- Output atteso: un pacchetto .deb aggiornato e la configurazione di mod_deflate in /etc/lighttpd/lighttpd.conf.
Introduzione
In questo tutorial descrivo come installare e configurare mod_deflate su un server Lighttpd 1.4 su Debian Etch. Nelle serie 1.5 di Lighttpd mod_deflate è incluso di default; su 1.4 è invece disponibile solo tramite una patch (mod_compress è l’alternativa che comprime solo file statici). La versione di Lighttpd fornita con Debian Etch è la 1.4.13, quindi dobbiamo patcharla per aggiungere mod_deflate.
Definizione breve: mod_deflate è un modulo per Lighttpd che comprime le risposte HTTP quando il client (tipicamente il browser) dichiara di supportare l’encoding compressa.
Vantaggi chiave:
- Riduce il trasferimento di dati fino a ~20–30% delle dimensioni originali per HTML/testo/XML.
- Migliora i tempi di risposta percepiti dagli utenti, specialmente su connessioni lente.
- La negoziazione HTTP garantisce che i client non compatibili ricevano contenuto non compresso.
Costo: un sovraccarico di CPU legato alla compressione, solitamente compensato dalla riduzione dei tempi di trasferimento.
1 Nota preliminare
Puoi seguire questa guida sia se Lighttpd è già installato sia se non lo è. Compiliamo un nuovo pacchetto lighttpd_1.4.13.deb che sostituirà l’eventuale installazione esistente.
Se Lighttpd è già installato, verifica la versione e le caratteristiche con:
lighttpd -V
L’output dovrebbe mostrare la versione 1.4.13 (o equivalente). Esempio preso dall’originale:
server1:~# lighttpd -V
lighttpd-1.4.13 (ssl) - a light and fast webserver
Build-Date: Jun 1 2007 18:19:33
Event Handlers:
+ select (generic)
+ poll (Unix)
+ rt-signals (Linux 2.4+)
+ epoll (Linux 2.6)
- /dev/poll (Solaris)
- kqueue (FreeBSD)
Network handler:
+ sendfile
Features:
+ IPv6 support
+ zlib support
+ bzip2 support
+ crypt support
+ SSL Support
+ PCRE support
+ mySQL support
+ LDAP support
+ memcached support
- FAM support
+ LUA support
+ xml support
+ SQLite support
+ GDBM support
server1:~#
2 Compilare un nuovo pacchetto Lighttpd con mod_deflate
Passo 1: installa gli strumenti di compilazione di base:
apt-get install build-essential
Passo 2: scarica il sorgente di Lighttpd nella directory /usr/src:
cd /usr/src
apt-get source lighttpd
Elenca la directory per verificare che la versione sia corretta:
ls -l
Esempio di output:
server1:/usr/src# ls -l
total 804
drwxr-xr-x 8 root root 4096 2007-08-08 19:03 lighttpd-1.4.13
-rw-r--r-- 1 root src 15173 2007-06-01 20:15 lighttpd_1.4.13-4etch1.diff.gz
-rw-r--r-- 1 root src 1098 2007-06-01 20:15 lighttpd_1.4.13-4etch1.dsc
-rw-r--r-- 1 root src 793309 2007-06-01 20:15 lighttpd_1.4.13.orig.tar.gz
server1:/usr/src#
Passo 3: scarica la patch mod_deflate e applicala ai sorgenti:
wget http://trac.lighttpd.net/trac/attachment/wiki/Mod_Deflate/lighttpd-1.4.13.mod_deflate.jz.patch?format=raw
mv lighttpd-1.4.13.mod_deflate.jz.patch?format=raw lighttpd-1.4.13.mod_deflate.jz.patch
cd lighttpd-1.4.13
patch -p1 < ../lighttpd-1.4.13.mod_deflate.jz.patch
Se la patch va a buon fine vedrai l’output simile al seguente:
server1:/usr/src/lighttpd-1.4.13# patch -p1 < ../lighttpd-1.4.13.mod_deflate.jz.patch
patching file configure.in
patching file src/base.h
patching file src/chunk.c
patching file src/chunk.h
patching file src/connections.c
patching file src/http_chunk.c
patching file src/joblist.c
patching file src/Makefile.am
patching file src/Makefile.in
patching file src/mod_deflate.c
patching file src/plugin.c
patching file src/plugin.h
patching file src/request.c
patching file src/response.c
patching file src/server.c
Hunk #1 succeeded at 176 (offset 1 line).
Hunk #2 succeeded at 270 (offset 1 line).
Hunk #3 succeeded at 1043 (offset 1 line).
Hunk #4 succeeded at 1271 (offset 1 line).
Hunk #5 succeeded at 1324 (offset 1 line).
Hunk #6 succeeded at 1344 (offset 1 line).
server1:/usr/src/lighttpd-1.4.13#
Passo 4: costruisci il pacchetto .deb
dpkg-buildpackage
Se mancano dipendenze di build dpkg-buildpackage si fermerà e mostrerà un elenco di pacchetti mancanti. Esempio (output originale):
server1:/usr/src/lighttpd-1.4.13# dpkg-buildpackage
dpkg-buildpackage: source package is lighttpd
dpkg-buildpackage: source version is 1.4.13-4etch1
dpkg-buildpackage: source changed by Steve Kemp <[email protected]>
dpkg-buildpackage: host architecture i386
dpkg-buildpackage: source version without epoch 1.4.13-4etch1
dpkg-checkbuilddeps: Unmet build dependencies: debhelper (>= 5.0.0) cdbs libssl-dev zlib1g-dev libbz2-dev libattr1-dev libpcre3-dev libmysqlclient15-dev libldap2-dev libfcgi-dev libgdbm-dev libmemcache-dev liblua5.1-0-dev dpatch patchutils pkg-config uuid-dev libsqlite3-dev libxml2-dev
dpkg-buildpackage: Build dependencies/conflicts unsatisfied; aborting.
dpkg-buildpackage: (Use -d flag to override.)
server1:/usr/src/lighttpd-1.4.13#
Installa le dipendenze consigliate riportate dall’errore:
apt-get install debhelper cdbs libssl-dev zlib1g-dev libbz2-dev libattr1-dev libpcre3-dev libmysqlclient15-dev libldap2-dev libfcgi-dev libgdbm-dev libmemcache-dev liblua5.1-0-dev dpatch patchutils pkg-config uuid-dev libsqlite3-dev libxml2-dev
Dopo l’installazione delle dipendenze, esegui di nuovo:
dpkg-buildpackage
Nota: la pagina della patch indica che è necessario il supporto bzip2 in Lighttpd per far funzionare mod_deflate. Nel pacchetto Debian questo è abilitato di default.
Quando dpkg-buildpackage ha completato, nel livello superiore /usr/src troverai i file .deb generati. Esempio di elenco:
cd ..
ls -l
Esempio di output:
server1:/usr/src# ls -l
total 1628
drwxr-xr-x 8 root root 4096 2007-08-08 19:09 lighttpd-1.4.13
-rw-r--r-- 1 root src 29377 2007-08-08 19:07 lighttpd_1.4.13-4etch1.diff.gz
-rw-r--r-- 1 root src 861 2007-08-08 19:07 lighttpd_1.4.13-4etch1.dsc
-rw-r--r-- 1 root src 2000 2007-08-08 19:12 lighttpd_1.4.13-4etch1_i386.changes
-rw-r--r-- 1 root src 287998 2007-08-08 19:12 lighttpd_1.4.13-4etch1_i386.deb
-rw-r--r-- 1 root src 69033 2006-12-13 17:22 lighttpd-1.4.13.mod_deflate.jz.patch
-rw-r--r-- 1 root src 793309 2007-06-01 20:15 lighttpd_1.4.13.orig.tar.gz
-rw-r--r-- 1 root src 99606 2007-08-08 19:11 lighttpd-doc_1.4.13-4etch1_all.deb
-rw-r--r-- 1 root src 63136 2007-08-08 19:12 lighttpd-mod-cml_1.4.13-4etch1_i386.deb
-rw-r--r-- 1 root src 62948 2007-08-08 19:12 lighttpd-mod-magnet_1.4.13-4etch1_i386.deb
-rw-r--r-- 1 root src 58546 2007-08-08 19:12 lighttpd-mod-mysql-vhost_1.4.13-4etch1_i386.deb
-rw-r--r-- 1 root src 60212 2007-08-08 19:12 lighttpd-mod-trigger-b4-dl_1.4.13-4etch1_i386.deb
-rw-r--r-- 1 root src 70268 2007-08-08 19:12 lighttpd-mod-webdav_1.4.13-4etch1_i386.deb
server1:/usr/src#
Installa il pacchetto .deb generato (sostituirà l’eventuale Lighttpd installato):
dpkg -i lighttpd_1.4.13-4etch1_i386.deb
Copia il modulo mod_deflate.so nella directory dei moduli di Lighttpd:
cp /usr/src/lighttpd-1.4.13/debian/tmp/usr/lib/lighttpd/mod_deflate.so /usr/lib/lighttpd
Verifica la build-date o la versione per assicurarti che la nuova build sia attiva:
lighttpd -V
Esempio di output aggiornato (Build-Date cambiata):
server1:/usr/src# lighttpd -V
lighttpd-1.4.13 (ssl) - a light and fast webserver
Build-Date: Aug 8 2007 19:10:28
Event Handlers:
+ select (generic)
+ poll (Unix)
+ rt-signals (Linux 2.4+)
+ epoll (Linux 2.6)
- /dev/poll (Solaris)
- kqueue (FreeBSD)
Network handler:
+ sendfile
Features:
+ IPv6 support
+ zlib support
+ bzip2 support
+ crypt support
+ SSL Support
+ PCRE support
+ mySQL support
+ LDAP support
+ memcached support
- FAM support
+ LUA support
+ xml support
+ SQLite support
+ GDBM support
server1:/usr/src#
Non sorprende se mod_deflate non appare nella lista delle feature; la presenza del .so e la configurazione determinano l’attivazione.
3 Configurare Lighttpd
Il file di configurazione su Debian Etch è /etc/lighttpd/lighttpd.conf. Aprilo ed aggiungi “mod_deflate” alla sezione server.modules. Nota: se usi mod_rewrite, assicurati che mod_deflate sia elencato dopo mod_rewrite.
Esempio di modifica:
vi /etc/lighttpd/lighttpd.conf
Aggiungi o modifica la lista dei moduli in questo modo:
[...]
server.modules = (
"mod_access",
"mod_alias",
"mod_accesslog",
"mod_fastcgi",
# "mod_rewrite",
"mod_deflate",
# "mod_redirect",
# "mod_status",
# "mod_evhost",
# "mod_compress",
# "mod_usertrack",
# "mod_rrdtool",
# "mod_webdav",
# "mod_expire",
# "mod_flv_streaming",
# "mod_evasive"
)
[...]
Poi aggiungi la configurazione specifica per mod_deflate (puoi inserirla in fondo al file):
[...]
deflate.enabled = "enable"
deflate.compression-level = 9
deflate.mem-level = 9
deflate.window-size = 15
# deflate.bzip2 only in patch for 1.4.x
deflate.bzip2 = "enable"
# deflate.allowed_encodings only in 1.5.x
#deflate.allowed_encodings = ( "bzip2", "gzip", "deflate" )
deflate.min-compress-size = 200
#deflate.sync-flush = "enable"
deflate.output-buffer-size = 4096
deflate.work-block-size = 512
deflate.mimetypes = ("text/html", "text/plain", "text/css", "text/javascript", "text/xml")
#deflate.debug = "enable"
Dopo ogni modifica riavvia Lighttpd:
/etc/init.d/lighttpd restart
Se il server non si avvia correttamente, ricontrolla la sintassi del file di configurazione e i percorsi dei moduli.
4 Verifica e debug
Prova ad aprire alcune pagine .html, .php, .txt nel browser. Se vedi pagine vuote, prova a ridurre deflate.output-buffer-size a 2048 o 1024 e riavvia Lighttpd.
Per verificare che la compressione sia attiva puoi abilitare il debug:
- Sblocca la riga
deflate.debug = "enable"
in /etc/lighttpd/lighttpd.conf e riavvia. - Monitora il log degli errori:
tail -f /var/log/lighttpd/error.log
Se una risorsa viene compressa vedrai righe simili a queste:
[...]
2007-08-08 18:40:33: (mod_deflate.c.919) in: 53875 out: 8446
2007-08-08 18:40:33: (mod_deflate.c.1020) finished uri: /info.php , query:
[...]
Nell’esempio sopra info.php (53875 byte) è stata compressa a 8446 byte.
Approach e alternative
Quando usare mod_deflate
- Se servi prevalentemente contenuti testuali dinamici o statici (HTML, XML, CSS, JS).
- Se hai risorse CPU disponibili sul server e la riduzione del traffico è importante.
Quando evitare mod_deflate
- Per file binari già compressi (JPEG, PNG, MP3, video) la compressione aggiuntiva non aiuta e spreca CPU.
- Su server già sovraccarichi di CPU potrebbe peggiorare le prestazioni.
Alternative
- mod_compress (solo per file statici) — utile su 1.4 senza patch ma limita i tipi di contenuto.
- Compressione a livello di reverse proxy o CDN (consigliata quando disponibile): delega la compressione a infrastrutture scalabili.
- Precompressa: generare file .gz statici (content negotiation) e lasciare che il server li serva quando il client lo richiede.
Vantaggi dell’approccio di questo tutorial
- Ti permette di usare mod_deflate direttamente nel processo di Lighttpd su 1.4 senza passare a 1.5.
- Permette compressione sia di contenuti statici che dinamici.
Svantaggi o limiti
- Richiede ricompilazione del pacchetto e gestione delle dipendenze.
- Non scala automaticamente come una soluzione CDN.
Modelli mentali e semplici euristiche
- Regola euristica per il livello di compression: livello 6–9 offre buoni tassi di compressione su testo; livelli più alti consumano più CPU con benefici marginali.
- Se il risparmio di banda supera il carico CPU percepito, abilitare la compressione è conveniente.
- Non comprimere file minori di 200 byte: overhead di intestazioni e CPU può annullare il beneficio.
Checklist operativa per ruolo
System Administrator
- Backup della configurazione corrente di Lighttpd.
- Scaricare sorgenti e patch in /usr/src.
- Installare le dipendenze di build.
- Compilare e installare il .deb.
- Copiare mod_deflate.so in /usr/lib/lighttpd.
- Aggiornare /etc/lighttpd/lighttpd.conf e riavviare il servizio.
- Eseguire test di base e controllare i log.
DevOps / SRE
- Includere test automatici per verificare che le risposte compressi contengano l’header Content-Encoding.
- Monitorare latenza e CPU dopo l’attivazione della compressione.
- Automatizzare la build e la distribuzione del nuovo pacchetto .deb in staging.
Sviluppatore applicazioni
- Verificare che le risposte dinamiche non cambino formato dopo la compressione.
- Evitare di comprimere payload già compressi lato applicazione.
Test di accettazione
Casi di test minimi per validare l’installazione:
Browser con Accept-Encoding: gzip
- Aprire una pagina HTML; verificare che la risposta includa header Content-Encoding: gzip (o deflate).
- Verificare dimensione ridotta rispetto all’originale.
Browser senza supporto compressione
- Richiedere la stessa pagina traferendo Accept-Encoding vuoto; verificare risposta non compressa.
File binari
- Richiedere immagini JPEG/PNG e verificare che non siano compresse due volte (nessun significativo cambiamento o overhead eccessivo).
Carico
- Eseguire un breve test di carico e confrontare CPU/rate di trasferimento prima e dopo.
Glossario in una riga
- mod_deflate: modulo per Lighttpd che comprime risposte HTTP con algoritmi come gzip/deflate.
- debounce: tecnica non direttamente correlata al tutorial, ma utile per ridurre rumore nei log.
- Content-Encoding: header HTTP usato per indicare la compressione della risposta.
Sicurezza e privacy
- La compressione di contenuti dinamici non introduce di per sé rischi di privacy aggiuntivi rispetto al contenuto non compresso; tuttavia, quando si usa la compressione insieme a meccanismi di cache condivisa o a tecniche che espongono dimensioni diverse del payload, occorre essere cauti (per esempio attacchi basati su oracle di compressione in contesti crittografici sono teoricamente possibili). Per traffico sensibile, verifica le best practice relative a TLS e gestione dei dati.
Note operative e mitigazioni dei problemi comuni
- Pagine vuote dopo abilitar la compressione: riduci deflate.output-buffer-size e riavvia.
- Errori in fase di build: controlla le dipendenze di sviluppo (lib*-dev) segnalate da dpkg-checkbuilddeps.
- Nessuna riduzione di banda apparente: verifica che i MIME type siano corretti e che i client inviino l’header Accept-Encoding.
Collegamenti utili
- Lighttpd: http://www.lighttpd.net
- mod_deflate: http://trac.lighttpd.net/trac/wiki/Mod_Deflate
- Debian: http://www.debian.org
Riepilogo
- mod_deflate su Lighttpd 1.4 richiede una patch e la ricompilazione del pacchetto Debian.
- Una volta installato e configurato, può ridurre drasticamente il traffico per contenuti testuali, migliorando l’esperienza utente.
- Valuta sempre CPU vs risparmio di banda e considera alternative come CDN o compressione lato proxy per scalabilità.
Important
Ricorda di testare in staging prima di applicare la modifica in produzione e di monitorare CPU e latenza dopo il deploy.
Fine dell’articolo.
Materiali simili

Installare F1 TV su Android TV — Guida completa

Aprire Chrome in Incognito dal menu contestuale

VAC unable to verify in CS:GO: come risolvere

Come restituire un gioco su Steam — Guida rapida

Compra crypto con Apple Pay su iPhone
