Гид по технологиям

Как сэкономить трафик с помощью mod_deflate на Lighttpd 1.4 (Debian Etch)

7 min read Веб-сервер Обновлено 21 Oct 2025
mod_deflate на Lighttpd 1.4 (Debian Etch) — экономия трафика
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 и заменим текущую установку.

  1. Установите необходимые инструменты сборки:
apt-get install build-essential
  1. Перейдите в /usr/src и скачайте исходники пакета lighttpd из репозиториев Debian:
cd /usr/src  
apt-get source lighttpd
  1. Посмотрите полученные файлы:
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#
  1. Скачайте патч 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#
  1. Соберите пакет .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
  1. Повторите dpkg-buildpackage. Сборка может занять время; предупреждения о подписях можно игнорировать.

  2. После успешной сборки в /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#
  1. Установите полученный пакет (он заменит текущий lighttpd):
dpkg -i lighttpd_1.4.13-4etch1_i386.deb

Если вы собрали дополнительные модули (mod-cml, mod-magnet и т.д.), установите их аналогично.

  1. Скопируйте файл модуля mod_deflate.so в директорию модулей lighttpd:
cp /usr/src/lighttpd-1.4.13/debian/tmp/usr/lib/lighttpd/mod_deflate.so /usr/lib/lighttpd
  1. Для проверки установленной версии можно снова выполнить:
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 Проверка и отладка

  1. Откройте несколько страниц (.html, .php, .txt) в браузере — всё должно работать. Если страницы пустые, уменьшите deflate.output-buffer-size и перезапустите.

  2. Для проверки реального сжатия можно включить отладку (раскомментировать 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% исходного.

  1. Альтернативная проверка — использовать 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, если человек не хочет править веб-сервер.

Мини‑методология внедрения (быстрый план действий)

  1. Тест в стенде: собрать и установить patched-пакет на тестовом сервере.
  2. Проверить функциональность для основных страниц и API.
  3. Нагрузочное тестирование (симуляция пиков и оценка CPU).
  4. Внедрение на продакшн по шагам: канареечный релиз → мониторинг → полный релиз.
  5. Документирование изменений и откатного плана.

Чеклист по ролям

Администратор:

  • Собрать пакет с патчем и установить .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 по умолчанию), но может потребовать изменения ОС/репозиториев.

Ссылки

Итог

mod_deflate даёт ощутимую экономию трафика и ускоряет загрузку страниц у пользователей с медленными каналами. Подход с патчем и сборкой пакета подходит для Debian Etch и lighttpd 1.4.13, но требует аккуратной проверки зависимостей, тестирования и мониторинга после внедрения. Внедряйте поэтапно и имейте план отката.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Как устроить идеальную вечеринку для просмотра ТВ
Развлечения

Как устроить идеальную вечеринку для просмотра ТВ

Как распаковать несколько RAR‑файлов сразу
Инструменты

Как распаковать несколько RAR‑файлов сразу

Приватный просмотр в Linux: как и зачем
Приватность

Приватный просмотр в Linux: как и зачем

Windows 11 не видит iPod — способы исправить
Руководство

Windows 11 не видит iPod — способы исправить

PS5: как настроить игровые пресеты
Консоли

PS5: как настроить игровые пресеты

Как переключить камеру в Omegle на iPhone и Android
Руководство

Как переключить камеру в Omegle на iPhone и Android