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

Как сэкономить трафик с помощью 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
Автор
Редакция

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

Установка F1 TV на Android TV — пошагово
Стриминг

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

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

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

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

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

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

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

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

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

Как создать публичный профиль в Snapchat
Социальные сети

Как создать публичный профиль в Snapchat