Guida alle tecnologie

Come risparmiare traffico con mod_deflate su Lighttpd 1.4 — Debian Etch

8 min read Server Aggiornato 21 Oct 2025
Risparmiare traffico con mod_deflate su Lighttpd 1.4
Risparmiare traffico con mod_deflate su Lighttpd 1.4

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:

  1. 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.
  2. Browser senza supporto compressione

    • Richiedere la stessa pagina traferendo Accept-Encoding vuoto; verificare risposta non compressa.
  3. File binari

    • Richiedere immagini JPEG/PNG e verificare che non siano compresse due volte (nessun significativo cambiamento o overhead eccessivo).
  4. 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

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.

Autore
Redazione

Materiali simili

Installare F1 TV su Android TV — Guida completa
Streaming TV

Installare F1 TV su Android TV — Guida completa

Aprire Chrome in Incognito dal menu contestuale
Windows

Aprire Chrome in Incognito dal menu contestuale

VAC unable to verify in CS:GO: come risolvere
Guide gioco

VAC unable to verify in CS:GO: come risolvere

Come restituire un gioco su Steam — Guida rapida
Guide.

Come restituire un gioco su Steam — Guida rapida

Compra crypto con Apple Pay su iPhone
Criptovalute

Compra crypto con Apple Pay su iPhone

Profilo pubblico Snapchat: guida completa
Social

Profilo pubblico Snapchat: guida completa