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

Экономия трафика с помощью mod_compress в Lighttpd (Debian Squeeze)

• 5 min read • Серверы • Обновлено 24 Nov 2025
mod_compress в Lighttpd: экономия трафика
mod_compress в Lighttpd: экономия трафика

Версия и автор

Version 1.0
Author: Falko Timme
Follow me on Twitter

Короткое объяснение термина

mod_compress — модуль Lighttpd, который сжимает текстовые ресурсы (gzip/deflate) и хранит их в кэше, чтобы отдавать клиентам готовые сжатые файлы без повторной компрессии каждого запроса.

1 Предварительная заметка

Я предполагаю, что у вас уже есть рабочая конфигурация Lighttpd на Debian Squeeze, например, как в руководстве: Installing Lighttpd With PHP5 And MySQL Support On Debian Squeeze. Если сервер ещё не настроен, настройте базовый стек до включения mod_compress.

2 Включение и настройка mod_compress

Откройте файл конфигурации Lighttpd:

vi /etc/lighttpd/lighttpd.conf

Убедитесь, что в секции server.modules включён модуль mod_compress (по умолчанию он активен в Debian Squeeze):

server.modules = (
        "mod_expire",
        "mod_access",
        "mod_alias",
        "mod_compress",
        "mod_redirect",
#       "mod_rewrite",
)
[...]

Далее найдите параметры compress.cache-dir и compress.filetype:

[...]
compress.cache-dir          = "/var/cache/lighttpd/compress/"
compress.filetype           = ("application/x-javascript", "text/css", "text/html", "text/plain")
[...]

Параметр compress.cache-dir указывает каталог, где Lighttpd хранит сжатые копии. Параметр compress.filetype определяет типы файлов для сжатия. Чтобы учесть разные MIME для JavaScript, расширьте список:

[...]
compress.filetype           = ("application/x-javascript", "application/javascript", "text/javascript", "text/x-js", "text/css", "text/html", "text/plain")
[...]

Убедитесь, что каталог кэша существует и принадлежит пользователю/группе www-data:

ls -la /var/cache/lighttpd/compress/

Пример вывода:

root@server1:~# ls -la /var/cache/lighttpd/compress/  
total 8  
drwxr-xr-x 2 www-data www-data 4096 Nov 12 12:45 .  
drwxr-xr-x 4 www-data www-data 4096 Feb 17 17:57 ..  
root@server1:~#

Если каталога нет, создайте и задайте права:

mkdir -p /var/cache/lighttpd/compress/  
chown www-data:www-data /var/cache/lighttpd/compress/

Перезапустите Lighttpd:

/etc/init.d/lighttpd restart

Important: сжатие увеличивает использование CPU на сервере, но часто выигрывает за счёт меньшего времени передачи и уменьшенного сетевого трафика.

3 Сжатие PHP

PHP умеет сжимать вывод самостоятельно, поэтому сжатие PHP не нужно дублировать в Lighttpd. Для включения сжатия в PHP откройте файл:

vi /etc/php5/cgi/php.ini

И включите zlib.output_compression:

[...]
; Transparent output compression using the zlib library
; Valid values for this option are 'off', 'on', or a specific buffer size
; to be used for compression (default is 4KB)
; Note: Resulting chunk size may vary due to nature of compression. PHP
;   outputs chunks that are few hundreds bytes each as a result of
;   compression. If you prefer a larger chunk size for better
;   performance, enable output_buffering in addition.
; Note: You need to use zlib.output_handler instead of the standard
;   output_handler, or otherwise the output will be corrupted.
; http://php.net/zlib.output-compression
zlib.output_compression = On
[...]

После правки перезапустите Lighttpd:

/etc/init.d/lighttpd restart

Note: Если вы используете PHP-FPM или другой SAPI, убедитесь, что настройка правится в подходящем php.ini для вашей SAPI.

4 Очистка каталога сжатых файлов

Каталог сжатых файлов (/var/cache/lighttpd/compress/) должен регулярно очищаться от старых объектов. В Debian Squeeze обычно есть cron-задание /etc/cron.daily/lighttpd:

cat /etc/cron.daily/lighttpd
#!/bin/sh
# Cleanup lighttpd compress cache

cache=/var/cache/lighttpd
if test -d "$cache/compress"; then
    su -s /bin/sh -c "find $cache/compress -type f -atime +30 -print0 | xargs -0 -r rm" www-data
fi
if test -d "$cache/uploads"; then
    su -s /bin/sh -c "find $cache/uploads -type f -atime +1 -print0 | xargs -0 -r rm" www-data
fi

Этот скрипт удаляет файлы, к которым не обращались более 30 дней. Если такого cron-файла нет, добавьте вручную задачу в crontab:

crontab -e

И добавьте строку, например:

23 4 * * * /usr/bin/find /var/cache/lighttpd/compress -type f -atime +30 -print0 | /usr/bin/xargs -0 -r /bin/rm

(Эта задача будет запускаться ежедневно в 04:23.)

5 Тестирование

Чтобы проверить работу сжатия, установите расширение Live HTTP Headers для Firefox (или используйте инструменты разработчика в современных браузерах) и откройте статическую HTML-страницу. В заголовках запроса клиент должен отправлять Accept-Encoding: gzip,deflate, а сервер — отвечать Content-Encoding: gzip для сжатого ответа.

Снимок заголовков HTTP, где видно Accept-Encoding и Content-Encoding

Если посмотреть в каталог /var/cache/lighttpd/compress/, там должны появиться файлы с суффиксом gzip:

ls -la /var/cache/lighttpd/compress/
root@server1:~# ls -la /var/cache/lighttpd/compress/  
total 16  
drwxr-xr-x 2 www-data www-data 4096 Mar  7 16:32 .  
drwxr-xr-x 4 www-data www-data 4096 Feb 17 17:57 ..  
-rw------- 1 www-data www-data 3102 Mar  7 16:32 howto.html-gzip-237485-9070-1299510809  
-rw------- 1 www-data www-data 1562 Mar  7 16:30 index.lighttpd.html-gzip-237105-3585-1297961821  
root@server1:~#

Расширенные рекомендации и отладка

Когда сжатие не даёт выгоды

  • Если ваш сайт в основном отдаёт уже сжатые бинарные форматы (например, изображения, видео, архивы), повторное сжатие неэффективно.
  • На очень нагруженных CPU серверах компрессия может увеличить задержку ответа. В таком случае рассмотрите использование предварительно сжатых файлов (см. далее) или offloading на CDN.

Альтернативные подходы

  • Предварительное сжатие при сборке: генерируйте .gz-файлы на этапе деплоя и отдавайте их напрямую веб-сервером по условию Accept-Encoding.
  • Использование CDN: многие CDN автоматически сжимают и кэшируют контент ближе к пользователю.
  • Nginx/Apache: если вы планируете миграцию, у этих серверов свои модули сжатия (gzip, mod_deflate) с другой логикой и настройками.

Мини-методология для оценки эффективности

  1. Измерьте средний размер текстовых ресурсов и долю трафика, приходящуюся на них.
  2. Включите сжатие в тестовой среде.
  3. Протестируйте время загрузки и нагрузку CPU при реальном трафике (или синтетическом).
  4. Сравните экономию трафика и дополнительную CPU-нагрузку; решите по соотношению выгода/затраты.

Чеклист для внедрения (роль: администратор)

  • Проверить поддержку mod_compress в установленной версии Lighttpd.
  • Добавить/расширить compress.filetype для всех нужных MIME.
  • Убедиться в существовании и правах каталога compress.cache-dir.
  • Настроить cron для очистки старых файлов.
  • Включить zlib.output_compression для PHP (если применимо).
  • Протестировать Accept-Encoding/Content-Encoding и проверить содержимое каталога кэша.

Безопасность и стабильность

  • Не храните в каталоге кэша файлы с слабой очерёдностью прав доступа; используйте www-data:www-data.
  • Следите за тем, чтобы доступ к каталогу кэша не был открыт публично через конфигурацию сервера.
  • При ручной очистке используйте безопасные команды find/xargs, чтобы не удалить лишнего.

Краткий справочник (1 строка)

  • gzip — алгоритм сжатия; Accept-Encoding/Content-Encoding — заголовки, по которым клиент и сервер согласуют сжатие; zlib.output_compression — директива PHP для сжатия вывода.

Полезные варианты и тестовые сценарии

  • Повторный запрос одного и того же ресурса: убедиться, что сервер отдаёт файл из кэша и Content-Encoding присутствует.
  • Запрос с отключенным Accept-Encoding: сервер должен отдавать несжатый ресурс.
  • Нагрузочный тест: при росте параллельных соединений проверить CPU и время ответа.

6 Ссылки и ресурсы

Краткое резюме

mod_compress — простой и эффективный способ снизить сетевой трафик для текстовых ресурсов на Lighttpd. Он требует небольших изменений в конфигурации, наличия каталога кэша и периодической очистки старых файлов. Тестируйте производительность до и после включения и рассматривайте альтернативы (предварительное сжатие, CDN) при высоких нагрузках.

Notes: Если вы используете современный стек или CDN, сравните встроенную компрессию с возможностями внешних сервисов.

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

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

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро