Настройка сервера · 3 min read · Sep 25, 2025

Как сэкономить трафик с помощью mod_deflate Apache2

В этом руководстве я опишу, как установить и настроить mod_deflate на веб-сервере Apache2. mod_deflate позволяет Apache2 сжимать файлы и передавать их клиентам (например, браузерам), которые могут обрабатывать сжатый контент, что делают большинство современных браузеров. С помощью mod_deflate вы можете сжимать HTML, текстовые или XML файлы до примерно 20 - 30% от их оригинального размера, тем самым экономя трафик вашего сервера и делая пользователей модемов более счастливыми.

Сжатие файлов вызывает небольшую дополнительную нагрузку на сервер, но, по моему опыту, это компенсируется тем, что время подключения клиентов к вашему серверу значительно уменьшается. Например, пользователь модема, которому нужно было семь секунд для загрузки несжатого HTML файла, теперь может загрузить тот же файл, но сжатый, всего за две секунды.

Используя mod_deflate, вам не нужно бояться, что вы исключите пользователей со старыми браузерами, которые не могут обрабатывать сжатый контент. Браузер ведет переговоры с сервером перед передачей любого файла, и если браузер не может обрабатывать сжатый контент, сервер передает файлы в несжатом виде.

mod_deflate заменил mod_gzip Apache 1.3 в Apache2. Если вы хотите обслуживать сжатые файлы с помощью Apache 1.3, посмотрите это руководство: mod_gzip - обслуживание сжатого контента веб-сервером Apache

Я хочу сначала сказать, что это не единственный способ настройки такой системы. Существует множество способов достижения этой цели, но это тот путь, который я выбираю. Я не даю никаких гарантий, что это сработает для вас!

1 Включите mod_deflate

Если у вас установлен Apache2, mod_deflate также должен быть уже установлен в вашей системе. Теперь нам нужно его включить. На Debian мы можем сделать это так:

a2enmod deflate

Затем перезапустите Apache2:

service apache2 restart

На других дистрибутивах вам, возможно, придется вручную отредактировать конфигурацию Apache2, чтобы включить mod_deflate. Вам может понадобиться добавить строку, подобную этой, в раздел LoadModule:

LoadModule deflate_module /usr/lib/apache2/modules/mod_deflate.so

Убедитесь, что вы настроили путь к mod_deflate.so, и затем перезапустите Apache2.

2 Настройка mod_deflate

Сжатие файлов можно настроить одним из двух способов: либо явное исключение файлов по расширению, либо явное включение файлов по MIME-типу. Вы можете включить mod_deflate для всего вашего сервера Apache2 или только для конкретных виртуальных сайтов. В зависимости от этого, либо откройте глобальный раздел конфигурации сервера Apache2 сейчас, либо только раздел конфигурации vhost, где вы хотите включить mod_deflate.

2.1 Явное включение файлов по MIME-типу

Если вы хотите сжимать только HTML, текстовые и XML файлы, добавьте эту строку в вашу конфигурацию:

AddOutputFilterByType DEFLATE text/html text/plain text/xml

Это конфигурация, которую я использую, потому что не хочу сжимать изображения или PDF файлы или уже сжатые файлы, такие как zip файлы.

2.2 Явное исключение файлов по расширению

Если вы хотите сжимать все типы файлов и исключить только несколько, вы добавите что-то подобное в вашу конфигурацию (вместо строки из раздела 2.1):

SetOutputFilter DEFLATE  
SetEnvIfNoCase Request_URI \\.(?:gif|jpe?g|png)$ \\  
    no-gzip dont-vary  
SetEnvIfNoCase Request_URI \\  
    \\.(?:exe|t?gz|zip|bz2|sit|rar)$ \\  
    no-gzip dont-vary  
SetEnvIfNoCase Request_URI \.pdf$ no-gzip dont-vary

Это сожмет все файлы, кроме изображений (gif, jpg и png), уже сжатых файлов (таких как zip и tar.gz) и PDF файлов, что имеет смысл, потому что вы не получите много выгоды от сжатия этих типов файлов.

2.3 Дополнительные директивы конфигурации

Независимо от того, используете ли вы конфигурацию из раздела 2.1 или 2.2, вы должны добавить эти строки в вашу конфигурацию:

BrowserMatch ^Mozilla/4 gzip-only-text/html  
BrowserMatch ^Mozilla/4\.0[678] no-gzip  
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

Эти строки предназначены для некоторых старых браузеров, которые не поддерживают сжатие файлов, кроме HTML-документов.

Конфигурация теперь завершена, и вам нужно перезапустить Apache2. На Debian вы делаете это так:

service apache2 restart

Чтобы узнать о дополнительных директивах конфигурации, посмотрите на модуль Apache mod_deflate.

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

Чтобы протестировать наше сжатие, мы добавим несколько директив в нашу конфигурацию mod_deflate, которые будут записывать коэффициент сжатия переданных файлов. Откройте вашу конфигурацию mod_deflate и добавьте следующие строки:

DeflateFilterNote Input input_info  
DeflateFilterNote Output output_info  
DeflateFilterNote Ratio ratio_info  
LogFormat '"%r" %{output_info}n/%{input_info}n (%{ratio_info}n%%)' deflate  
CustomLog /var/log/apache2/deflate_log deflate

Убедитесь, что вы заменили /var/log/apache2 на директорию логов вашего Apache2. Это может быть /var/log/httpd, /var/log/httpd2 и т.д.

Затем перезапустите Apache2. На Debian сделайте это так:

service apache2 restart

Теперь каждый раз, когда запрашивается файл, это будет записываться в /var/log/apache2/deflate_log (или в тот файл, который вы изменили). Типичная строка лога выглядит так:

"GET /info.php HTTP/1.1" 7621/45430 (16%)

Вы видите, что файл info.php был запрошен и передан. Его оригинальный размер составлял 45430 байт, и он был сжат до 7621 байт или 16% от его оригинального размера! Это отличный результат, и если ваш веб-сайт в основном состоит из HTML, текстовых и XML файлов, mod_deflate сэкономит вам много трафика, а для пользователей с низкоскоростным подключением ваш сайт будет загружаться намного быстрее.

Если вам больше не нужно ведение журнала после ваших тестов, вы можете отменить изменения из раздела 3 и перезапустить Apache2.

4 Ссылки

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.