Как сэкономить трафик с помощью mod_deflate на Lighttpd 1.4 (Debian Etch)
Версия 1.0
Автор: Falko Timme
Введение
В этом руководстве показано, как установить и настроить модуль mod_deflate для web-сервера lighttpd 1.4 на Debian Etch. В lighttpd 1.5 mod_deflate включён по умолчанию; в 1.4 используется mod_compress, который сжимает только статические файлы. mod_deflate умеет сжимать и статические, и динамические ответы (например, PHP), что экономит трафик и ускоряет загрузку страниц для пользователей.
Коротко о компромиссе: сжатие увеличивает нагрузку на CPU, но снижает время передачи и общую нагрузку на сеть — обычно выигрыш оправдывает затраты.
Важно: браузер и сервер проводят переговоры (content negotiation): если клиент не поддерживает сжатие, сервер отправит ответ без компрессии, поэтому вы не исключите пользователей старых браузеров.
Примечание: это не единший рабочий путь — описанный метод проверен автором, но гарантий нет.
Что понадобится
- Доступ root (или sudo) на сервере Debian Etch;
- Установленные инструменты сборки (build-essential и пр.);
- Исходники пакета lighttpd 1.4.13 и патч mod_deflate для этой версии.
Короткие определения:
- mod_deflate — плагин для lighttpd, который сжимает ответы (gzip/bzip2/deflate при поддержке);
- mod_compress — плагин, сжимающий только статические файлы;
- bzip2 — алгоритм сжатия, используемый патчем; в Debian-версии 1.4.13 поддержка bzip2 уже включена.
Содержание инструкции
- Предварительная проверка и подготовка исходников
- Сборка пакета lighttpd с патчем mod_deflate
- Установка и копирование модуля
- Конфигурация lighttpd
- Проверка работы и отладка
- Альтернативы, сценарии отказа и чеклисты
1 Предварительная проверка
Если lighttpd уже установлен, проверьте версию и опции так:
lighttpd -V
Ожидаемый вывод (пример, должен показать версию 1.4.13):
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 Сборка пакета lighttpd с поддержкой mod_deflate
Шаги ниже подходят как при наличии уже установленного lighttpd, так и на “чистой” системе — мы соберём новый .deb и заменим текущую установку.
- Установите необходимые инструменты сборки:
apt-get install build-essential
- Перейдите в /usr/src и скачайте исходники пакета lighttpd из репозиториев Debian:
cd /usr/src
apt-get source lighttpd
- Посмотрите полученные файлы:
ls -l
Ожидаемый вывод (пример):
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#
- Скачайте патч mod_deflate для версии 1.4.13 и примените его:
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
Если патч отработал успешно, вы увидите список пропатченных файлов, например:
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
...
server1:/usr/src/lighttpd-1.4.13#
- Соберите пакет .deb:
dpkg-buildpackage
Обычно dpkg-buildpackage укажет на отсутствующие зависимости. Пример сообщения об ошибках и список пакетов (приведён как пример; установите недостающие зависимости по факту):
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
Установите недостающие пакеты:
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
Повторите dpkg-buildpackage. Сборка может занять время; предупреждения о подписях можно игнорировать.
После успешной сборки в /usr/src появится новый пакет, например lighttpd_1.4.13-4etch1_i386.deb.
Пример вывода ls -l после сборки:
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
...
server1:/usr/src#
- Установите полученный пакет (он заменит текущий lighttpd):
dpkg -i lighttpd_1.4.13-4etch1_i386.deb
Если вы собрали дополнительные модули (mod-cml, mod-magnet и т.д.), установите их аналогично.
- Скопируйте файл модуля mod_deflate.so в директорию модулей lighttpd:
cp /usr/src/lighttpd-1.4.13/debian/tmp/usr/lib/lighttpd/mod_deflate.so /usr/lib/lighttpd
- Для проверки установленной версии можно снова выполнить:
lighttpd -V
Ожидаемый пример вывода показывает обновлённую Build-Date; отсутствие явной строки “mod_deflate” в списке — нормально.
3 Конфигурация Lighttpd
Файл конфигурации для Debian Etch находится по пути /etc/lighttpd/lighttpd.conf. Откройте его и добавьте “mod_deflate” в секцию server.modules. Важно: если включён mod_rewrite, модуль mod_deflate должен быть указан после него.
Откройте файл:
vi /etc/lighttpd/lighttpd.conf
Найдите или отредактируйте блок server.modules так, чтобы он содержал строку “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"
)
[...]
Затем добавьте конфигурацию mod_deflate (можно в конце файла):
[...]
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"
Пояснения к настройкам (коротко):
- compression-level — уровень сжатия (1–9). Большее значение даёт лучшее сжатие, но дороже по CPU. 9 — максимальный.
- min-compress-size — минимальный размер ответа в байтах для сжатия; малые ответы часто не выгодно сжимать.
- output-buffer-size / work-block-size — буферы для обработки; при пустых страницах попробуйте уменьшить output-buffer-size (2048 или 1024).
Перезапустите сервис:
/etc/init.d/lighttpd restart
Если при перезапуске появляются ошибки — проверьте синтаксис конфигурации и лог ошибок.
4 Проверка и отладка
Откройте несколько страниц (.html, .php, .txt) в браузере — всё должно работать. Если страницы пустые, уменьшите deflate.output-buffer-size и перезапустите.
Для проверки реального сжатия можно включить отладку (раскомментировать deflate.debug = “enable”), перезапустить lighttpd и смотреть лог ошибок:
tail -f /var/log/lighttpd/error.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:
[...]
Здесь видно, что файл info.php уменьшился с 53875 байт до 8446 байт — менее 20% исходного.
- Альтернативная проверка — использовать curl с заголовком Accept-Encoding, чтобы увидеть, отдаёт ли сервер сжатый ответ:
curl -H "Accept-Encoding: gzip,deflate" -I http://yourserver/path
Обратите внимание на заголовок Content-Encoding в ответе.
Критерии приёмки
- Сервер перезапускается без ошибок.
- При обращении с заголовком Accept-Encoding браузера/клиента ответы приходят с заголовком Content-Encoding и уменьшенным размером.
- При отсутствии поддержки сжатия клиент получает ответ без модификации.
- Показатели времени отклика и пропускной способности соответствуют вашим ожиданиям (сжатие не вызывает неприемлемой нагрузки CPU).
Устранение неполадок (быстрый runbook)
Симптом: пустые страницы после включения deflate.
Шаги: уменьшите deflate.output-buffer-size до 2048 или 1024, перезапустите и проверьте лог /var/log/lighttpd/error.log.Симптом: модуль не применяется — нет изменений в логах и нет Content-Encoding.
Шаги: убедитесь, что mod_deflate указан в server.modules, что файл /usr/lib/lighttpd/mod_deflate.so присутствует и имеет корректные права; перезапустите сервер.Симптом: сборка прерывается из-за зависимостей.
Шаги: установите перечисленные dpkg-зависимости (apt-get install …), затем пересоберите.Симптом: клиент получает сжатый ответ, но браузер не отображает страницу.
Шаги: проверьте, правильно ли выставлен заголовок Content-Encoding и не повреждён ли поток (проверяйте в curl/wireshark). Отключите deflate.debug после отладки.
Когда это не сработает (контрпримеры)
- Старые бинарные API/клиенты, которые неправильно обрабатывают заголовки Content-Encoding, могут некорректно отображать данные.
- Сценарии с сильной нагрузкой на CPU и маленькими по объёму динамическими ответами — выгода по трафику будет, но нагрузка на CPU может превысить допустимые пределы.
- Проксирующие/кеширующие слои, которые переписывают или удаляют заголовки Accept-Encoding/Content-Encoding, нарушат работу компрессии.
Альтернативные подходы
- Использовать прокси-сервер (nginx, Varnish) с поддержкой сжатия на уровне прокси. Это разгружает backend и часто даёт гибкую политику кеширования и сжатия.
- Обновиться до lighttpd 1.5 (если возможно) — там mod_deflate присутствует по умолчанию и конфигурация проще.
- На уровне приложения (например, в PHP) включить gzip-вывод через output buffering, если человек не хочет править веб-сервер.
Мини‑методология внедрения (быстрый план действий)
- Тест в стенде: собрать и установить patched-пакет на тестовом сервере.
- Проверить функциональность для основных страниц и API.
- Нагрузочное тестирование (симуляция пиков и оценка CPU).
- Внедрение на продакшн по шагам: канареечный релиз → мониторинг → полный релиз.
- Документирование изменений и откатного плана.
Чеклист по ролям
Администратор:
- Собрать пакет с патчем и установить .deb
- Скопировать mod_deflate.so в /usr/lib/lighttpd
- Проверить и перезапустить сервис
Разработчик:
- Проверить поведение динамических страниц (PHP) при сжатии
- Убедиться, что не ломается API и нестандартные Content-Type
QA/Сеть:
- Проверить время ответа и передачу заголовков
- Проверить работу через прокси и кеширующие узлы
Краткий факто-бокс
- Цель: снизить объём передаваемого HTTP-трафика для текстовых типов контента.
- Типичный выигрыш: страницы часто уменьшаются до 20–30% исходного размера (зависит от содержимого).
- Риск: рост CPU на стороне сервера; влияние зависит от нагрузки и мощности процессора.
1‑строчный глоссарий
- mod_deflate — модуль сжатия для lighttpd, поддерживающий динамический и статический контент.
- mod_compress — старый модуль lighttpd для сжатия только статических файлов.
- bzip2 — алгоритм сжатия, часто более эффективный, но медленнее, чем gzip.
Сравнение вариантов (коротко)
- Собрать патч для 1.4.x: Позволяет сохранить текущую ОС, но требует сборки и тестирования.
- Обновление до 1.5: проще в поддержке (mod_deflate по умолчанию), но может потребовать изменения ОС/репозиториев.
Ссылки
- Lighttpd: http://www.lighttpd.net
- mod_deflate: http://trac.lighttpd.net/trac/wiki/Mod_Deflate
- Debian: http://www.debian.org
Итог
mod_deflate даёт ощутимую экономию трафика и ускоряет загрузку страниц у пользователей с медленными каналами. Подход с патчем и сборкой пакета подходит для Debian Etch и lighttpd 1.4.13, но требует аккуратной проверки зависимостей, тестирования и мониторинга после внедрения. Внедряйте поэтапно и имейте план отката.
Похожие материалы

Установка F1 TV на Android TV — пошагово

Chrome: запуск в режиме инкогнито из контекстного меню

Как исправить VAC не смог подтвердить сессию в CS:GO

Как вернуть игру в Steam — пошаговое руководство

Покупка криптовалюты через Apple Pay
