Установка и настройка модуля mod_deflate в Ubuntu 14.04
Ubuntu, VPS | Комментировать запись
Mod_deflate – это модуль Apache, который сжимает вывод веб-сервера перед отправкой клиенту. Таким образом данные уменьшаются в объёме, благодаря чему клиент способен быстрее их обработать. Это очень важно для клиентов с низкой пропускной способностью; кроме того, поисковые системы учитывают это при оценке работы сайта и помещении его в рейтинг.
Также mod_deflate может восстанавливать сжатые данные. Эта техника применяется в случае, если Apache используется в качестве обратного прокси-сервера, и вы хотите, чтобы контент, который проходит через прокси-сервер, был также обработан. В целом, этот метод применяется редко, потому данное руководство сосредоточено только на использовании mod_deflate для сжатия данных.
Это руководство написано для Ubuntu 14.04. Установка и настройка модулей, как правило, одинакова для всех операционных систем, но расположение конфигурационных файлов в разных системах может отличаться.
Примечание: Аналогичное руководство для CentOS 7 можно найти по этой ссылке.
Для выполнения руководства необходимо предварительно установить Apache 2.4.0+; чтобы узнать, как установить Apache, читайте соответствующий раздел данного руководства.
Все команды руководства рекомендуется запускать как sudo. Подробнее об этом – в этой статье.
Установка mod_deflate
В Ubuntu 14.04 на стандартной установке Apache модуль mod_deflate установлен и включён по умолчанию. Чтобы убедиться в этом, запустите apachectl (интерфейс управления сервером Apache), отфильтровав вывод при помощи grep по deflate:
apachectl -t -D DUMP_MODULES |grep deflate
Примечание: В случае ошибки используйте полный путь к команде:/usr/sbin/apachectl.
На экране должна появиться строка deflate_module (shared). Если она не появилась, значит, модуль по какой-то причине не установлен. Чтоб устранить эту неполадку:
- Убедитесь, что модуль установлен. Файл модуля является частью пакета apache2, который был установлен ранее (раздел Требования). По умолчанию он находится в /usr/lib/apache2/modules/mod_deflate.so. Кроме того, веб-сервер должен иметь возможность открывать файл; для этого установите права на файл в формате 644.
- Убедитесь в том, что модуль загружен. Откройте конфигурационный файл модулей Apache /etc/apache2/mods-enabled/deflate.load и убедитесь, что он содержит следующую строку:
LoadModule deflate_module /usr/lib/apache2/modules/mod_deflate.so
Примечание: Не забудьте перезапустить Apache после внесения любых изменений в настройки.
sudo apachectl restart.
Настройка mod_deflate
Для начала необходимо указать, какой тип файлов нужно сжимать. Во-первых, путем сжатия можно значительно уменьшить в размере текстовые форматы, и поэтому имеет смысл применить его к файлам HTML, CSS или JavaScript. Во-вторых, многие мультимедийные форматы (например, Flash) и изображения уже сжаты, и дополнительное сжатие будет бессмысленно.
В качестве шаблона можно использовать /etc/apache2/mods-enabled/deflate.conf (который является символьной ссылкой на /etc/apache2/mods-available/deflate.conf):
<IfModule mod_deflate.c>
<IfModule mod_filter.c>
# these are known to be safe with MSIE 6
AddOutputFilterByType DEFLATE text/html text/plain text/xml
# everything else may cause problems with MSIE 6
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/x-javascript application/javascript application/ecmascript
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/xml
</IfModule>
</IfModule>
Этот код будет сжимать файлы с расширениями .html, .txt, .xml, .css, .js. Чтобы узнать, как соотносятся расширения и MIME-типы, обратитесь к файлу /etc/mime.types. При необходимости можно добавить в настройки другие расширения текстовых файлов.
Примечание: В Ubuntu настройки Apache размещены в нескольких файлах, некоторые из них не включены. К примеру, настройки модулей хранятся в каталоге /etc/apache2/mods-available/ (файл /etc/apache2/mods-available/deflate.conf). Конфигурационный файл модулей включён только при наличии символьной ссылки на него в каталоге /etc/apache2/mods-enabled/ (к примеру, /etc/apache2/mods-enabled/deflate.conf).
Модуль mod_deflate имеет несколько важных параметров настроек:
- DeflateCompressionLevel задаёт уровень сжатия. По умолчанию установлен наивысший уровень – 9. Наиболее низкому уровню соответствует 1. Чем выше уровень сжатия, тем меньше будет вывод, и тем выше уровень нагрузки CPU.
- DeflateMemLevel задаёт используемый объём памяти библиотеки сжатия zlib. По умолчанию задано 9 (опять же, наивысший уровень). Чтобы рассчитать допустимый объём, умножьте значение DeflateMemLevel на 16К.
- DeflateWindowSize устанавливает размер окна сжатия. По умолчанию задана максимальная величина 15. Чем больше это значение, тем выше уровень сжатия (опять же, за счёт ресурсов сервера).
В большинстве случаев можно использовать стандартные настройки. Однако если производительность сервера значительно ухудшилась после включения mod_deflate, следует установить более низкие значения в конфигурационном файле /etc/apache2/mods-enabled/deflate.conf, например:
DeflateCompressionLevel 1
Это снизит уровень сжатия, в результате чего объём файлов увеличится, однако так mod_deflate будет использовать меньше CPU. Перезапустите Apache, чтоб обновить настройки.
Тестирование mod_deflate
Существует много способов протестировать работу mod_deflate; проще всего использовать неинтерактивный загрузчик wget. Если на данный момент wget не установлен на сервер Ubuntu 14.04, установите его с помощью команды:
sudo apt-get install wget
Для проверки работы модуля понадоббится текстовый файл в несколько сотен килобайт как минимум. Если на сервере нет такого файла, загрузите JQuery (популярную библиотеку JavaScript) и загрузите её на сайт. Если же вы не знаете, куда поместить файл, подгрузите его в стандартный каталог document root (для Apache это /var/www/html/). В результате загруженный файл будет доступен в root-каталоге стандартного сайта.
Примечание: Для корректной работы mod_deflate клиент (обычно браузер) должен поддерживать сжатие. Если клиент не поддерживает сжатие файлов, они будут отправлены в исходном виде.
Добавив необходимый файл на сайт, загрузите его при помощи wget. Тестирование можно выполнить как на локальной машине, так и на сервере.
wget --header="Accept-Encoding: gzip" http://<your_server_ip>/jquery-1.11.3.js
Эта команда загрузит jquery-1.11.3.js file с сервера Apache. Чтобы проверить сжатие, в команде используется аргумент Accept-Encoding: gzip.
Загруженный файл jquery-1.11.3.js будет иметь объём 83KB. На самом деле, этот не совсем оригинальный файл JavaScript должен быть дополнительно извлечен клиентом, в результате чего на стороне клиента также возникает некоторый расход ресурсов. Однако размер передаваемого по сети файла будет 83Кб, а это более чем в три раза меньше, чем исходный объём (278K).
Чтобы подтвердить этот расчет, проверьте размер загруженного файла с помощью следующей команды:
ls -lah jquery-1.11.3.js
-rw-r--r-- 1 user user 83K Apr 28 12:20 jquery-1.11.3.js
Затем сравните полученный результат с выводом этой команды ls:
ls -lah /var/www/html/jquery-1.11.3.js
-rw-r--r-- 1 apache apache 278K Apr 28 12:20 /var/www/html/jquery-1.11.3.js
Заключение
Как видите, mod_deflate значительно ускоряет сайт. Чтобы продолжить оптимизацию сайта, читайте руководство «Кэширование контента при помощи модулей Apache».
Tags: Apache, Apache 2.4, mod_deflate, Ubuntu 14.04