Cómo ahorrar tráfico con mod_deflate en Lighttpd 1.4 (Debian Etch)
Introducción
Versión 1.0
Autor: Falko Timme
En este tutorial describo cómo instalar y configurar mod_deflate en un servidor web lighttpd 1.4 sobre Debian Etch. mod_deflate no está incluido por defecto en lighttpd 1.4 (sí en 1.5); en 1.4 se usa mod_compress, que solo comprime ficheros estáticos. La ventaja de mod_deflate es que puede comprimir tanto ficheros estáticos como dinámicos (por ejemplo PHP). La versión de lighttpd incluida en Debian Etch es 1.4.13, por lo que debemos aplicar un parche para añadir mod_deflate.
mod_deflate permite a lighttpd comprimir ficheros y entregarlos a clientes (navegadores) que admiten contenido comprimido. La mayoría de navegadores modernos lo soportan. Con mod_deflate puedes reducir HTML, texto o XML a aproximadamente el 20–30% de su tamaño original, ahorrando tráfico y mejorando la experiencia de usuarios con conexiones lentas.
Comprimir añade una carga ligera adicional en CPU en el servidor, pero normalmente se compensa por la reducción de tiempo de conexión del cliente. Por ejemplo, un usuario con módem que tardaba siete segundos en descargar un HTML sin comprimir puede tardar ahora dos segundos en descargar el mismo archivo comprimido.
El navegador y el servidor negocian antes de transferir cualquier contenido. Si el navegador no soporta compresión, el servidor entrega el contenido sin comprimir, por lo que no se excluye a usuarios con navegadores antiguos.
Existen múltiples formas de lograr la compresión en un sitio web; ésta es una de ellas. No ofrezco garantía alguna de que funcione en todos los entornos.
1 Nota preliminar
Puedes seguir este tutorial tanto si lighttpd ya está instalado como si no. Compilaremos un nuevo paquete .deb de lighttpd 1.4.13 que reemplazará la instalación existente (si existe).
Si lighttpd ya está instalado, puedes comprobar la versión y las características incluidas con:
lighttpd -V
La salida debería mostrar la versión 1.4.13 y una lista de características; un ejemplo de salida sería:
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:~#
Si tu salida es similar, vas por buen camino.
2 Compilar un nuevo paquete de Lighttpd con soporte mod_deflate
Primero instala todo lo necesario para compilar lighttpd desde el código fuente:
apt-get install build-essential
Después ve a /usr/src y descarga el paquete fuente de lighttpd que incluye Debian Etch:
cd /usr/src
apt-get source lighttpd
Lista el contenido para verificar la versión (debería ser 1.4.13):
ls -l
Ejemplo de salida:
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#
Descarga el parche mod_deflate desde la wiki indicada y aplícalo:
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
Si el parche se aplica correctamente verás un output parecido a este:
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#
Tras aplicar el parche, construye el nuevo paquete .deb:
dpkg-buildpackage
dpkg-buildpackage probablemente mostrará dependencias de compilación faltantes. Un ejemplo de error:
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#
Si ves algo así, instala las dependencias indicadas. Por ejemplo:
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
Vuelve a ejecutar dpkg-buildpackage:
dpkg-buildpackage
En la wiki se indica que bzip2 debe estar habilitado en lighttpd para que mod_deflate funcione. Afortunadamente, el paquete de Debian ya incluye soporte bzip2 por defecto, así que no es necesario cambiar nada.
Cuando la compilación termine habrá un nuevo paquete .deb en /usr/src. Es posible que aparezcan advertencias sobre firmas; se pueden ignorar.
Ve a /usr/src y comprueba los archivos generados:
cd ..
ls -l
Ejemplo de salida:
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#
Instala el nuevo paquete (reemplaza la versión existente):
dpkg -i lighttpd_1.4.13-4etch1_i386.deb
Si necesitas otros módulos generados también puedes instalarlos de la misma forma.
Copia el archivo mod_deflate.so al directorio de módulos de lighttpd:
cp /usr/src/lighttpd-1.4.13/debian/tmp/usr/lib/lighttpd/mod_deflate.so /usr/lib/lighttpd
Comprueba la versión instalada y la fecha de compilación:
lighttpd -V
Ejemplo:
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#
Si ves soporte bzip2 en la salida, la precondición para mod_deflate está cumplida. No te preocupes si no aparece “mod_deflate” en esta salida: es normal.
3 Configurar Lighttpd
El fichero de configuración está en /etc/lighttpd/lighttpd.conf en Debian Etch. Edita ese archivo y añade “mod_deflate” en la lista server.modules. Si tienes mod_rewrite activado, asegúrate de listar mod_deflate después de mod_rewrite.
vi /etc/lighttpd/lighttpd.conf
Inserta o modifica la sección server.modules para que incluya mod_deflate:
| [...] 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" ) [...]
|
A continuación añade la configuración de mod_deflate (puede ir al final de /etc/lighttpd/lighttpd.conf):
| [...] 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"
|
Guarda los cambios y reinicia lighttpd:
/etc/init.d/lighttpd restart
El servicio debería reiniciarse sin errores.
Accede a algunos archivos .html, .php, .txt desde un navegador para comprobar que todo funciona. Si obtienes páginas en blanco, prueba a reducir deflate.output-buffer-size a 2048 o 1024 y reinicia el servicio.
Para verificar que mod_deflate está comprimiendo, activa la depuración descomentando deflate.debug y reinicia lighttpd. Observa /var/log/lighttpd/error.log mientras accedes a archivos:
tail -f /var/log/lighttpd/error.log
Si un archivo se comprime verás entradas como estas en el log:
[...]
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:
[...]
En este ejemplo info.php (53 875 bytes) se comprimió a 8 446 bytes: menos del 20% del tamaño original.
4 Enlaces
- Lighttpd: http://www.lighttpd.net
- mod_deflate: http://trac.lighttpd.net/trac/wiki/Mod_Deflate
- Debian: http://www.debian.org
Caja de datos y heurística rápida
- Ahorro típico: HTML/textos suelen comprimirse al 20–30% del tamaño original (depende del contenido).
- Coste: incremento moderado de CPU en servidor; positivo si ancho de banda y latencia importan.
- Parámetros clave: deflate.compression-level (1–9), deflate.min-compress-size (bytes), output-buffer-size (bytes).
Regla simple: si el servidor tiene CPU sobrante y ancho de banda limitado, activa compresión; si CPU es el recurso crítico y el ancho de banda es amplio, evalúa con tests.
Cuándo no usar mod_deflate o contraejemplos
- Contenido ya comprimido (por ejemplo imágenes JPG/PNG, archivos ZIP, MP4) no se beneficia; no los incluyas en deflate.mimetypes.
- Si la CPU del servidor está saturada, la compresión puede aumentar la latencia de respuesta; en ese caso considera offloading (CDN) o compresión por proxy.
- En entornos con contenido muy pequeño (menor que deflate.min-compress-size) la compresión puede incluso aumentar el tamaño total.
Enfoques alternativos
- Usar un proxy inverso (Varnish, Nginx) para hacer la compresión fuera del servidor de aplicaciones.
- Habilitar compresión en una CDN (Cloudflare, Fastly) para descargar la carga de tráfico y CPU.
- Para versiones más nuevas, actualizar a lighttpd 1.5+ donde mod_deflate ya viene integrado.
Mini-metodología (resumen de pasos)
- Instala herramientas de compilación.
- Obtén la fuente de lighttpd de Debian Etch.
- Descarga y aplica el parche mod_deflate.
- Instala dependencias faltantes.
- Ejecuta dpkg-buildpackage y genera el .deb.
- Instala el paquete y copia mod_deflate.so a /usr/lib/lighttpd.
- Añade “mod_deflate” a server.modules y la configuración deflate.* en lighttpd.conf.
- Reinicia y verifica mediante logs y pruebas en navegadores.
Lista de verificación por rol
Administrador de sistema:
- Hacer copia de seguridad de /etc/lighttpd/lighttpd.conf.
- Verificar versión actual con lighttpd -V.
- Descargar fuente y parche; compilar paquete .deb.
- Instalar .deb y copiar mod_deflate.so.
- Reiniciar servicio y comprobar logs.
Desarrollador web:
- Verificar que las páginas dinámicas funcionan tras habilitar compresión.
- Medir tiempos de carga antes/después.
- Confirmar que no hay contenido binario tratado como texto.
Responsable de red/negocio:
- Medir ahorro de ancho de banda mensual estimado.
- Evaluar impacto en coste y experiencia de usuarios.
Compatibilidad y recomendaciones de migración
- Si puedes, actualiza a una versión de lighttpd que incluya mod_deflate por defecto (1.5+).
- Al migrar, revisa deflate.allowed_encodings y soporte de bzip2/gzip.
- Prueba en un entorno staging antes de producción.
Diagrama de decisión (Mermaid)
flowchart TD
A[¿Tu servidor está en Debian Etch con lighttpd 1.4?] -->|Sí| B[¿Necesitas comprimir dinámicos?]
A -->|No| Z[Considera actualizar o usar proxy/CDN]
B -->|Sí| C[Aplica parche mod_deflate y compila]
B -->|No| Y[Usa mod_compress o comprime en proxy]
C --> D[Instala .deb y copia mod_deflate.so]
D --> E[Configura deflate en lighttpd.conf]
E --> F[Reinicia y prueba]
F --> G{¿Funciona y mejora métricas?}
G -->|Sí| H[Despliegue en producción]
G -->|No| I[Ajusta parámetros o considera CDN]
Pruebas recomendadas y criterios de aceptación
- Test 1: Descarga una página HTML antes y después; el tamaño comprimido debe ser menor y el navegador debe recibir Content-Encoding y Content-Length acordes.
- Test 2: Accede con un navegador que no anuncia compresión (simular) y verifica que la respuesta llega sin comprimir.
- Criterio de aceptación: las páginas principales se sirven correctamente; los logs de mod_deflate muestran ratios de compresión esperados; no hay páginas en blanco ni errores 500 relacionados.
Consejos operativos y mitigaciones de riesgo
- Monitorea CPU y latencia tras activar compresión.
- Si la compresión aumenta la carga demasiado, baja deflate.compression-level o sube deflate.min-compress-size.
- Implementa alertas en CPU para detectar regresiones.
Notas locales para Debian Etch
- En sistemas antiguos como Debian Etch asegúrate de disponer de repositorios que aún contengan paquetes de desarrollo necesarios.
- Si no puedes compilar en producción, considera compilar en un chroot o en un build-host idéntico y mover el .deb.
Resumen
- mod_deflate ofrece compresión eficiente para contenido estático y dinámico en lighttpd 1.4 tras aplicar un parche y recompilar.
- La configuración recomendada incluye ajustar niveles de compresión y tamaños de buffer según la capacidad de CPU.
- Considera alternativas (proxy inverso, CDN, actualización de versión) si la compilación o la carga de CPU son problemáticas.
Importante: realiza pruebas en staging y monitoriza recursos antes de desplegar en producción.
Materiales similares

Cómo instalar F1 TV en Android TV

Abrir Chrome en modo incógnito desde el menú contextual

Arregla 'VAC unable to verify' en CS:GO

Cómo devolver un juego en Steam: guía paso a paso

Comprar criptomonedas con Apple Pay en iPhone
