Установка и настройка модуля mod_deflate в Ubuntu 14.04

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). Если она не появилась, значит, модуль по какой-то причине не установлен. Чтоб устранить эту неполадку:

  1. Убедитесь, что модуль установлен. Файл модуля является частью пакета apache2, который был установлен ранее (раздел Требования). По умолчанию он находится в /usr/lib/apache2/modules/mod_deflate.so. Кроме того, веб-сервер должен иметь возможность открывать файл; для этого установите права на файл в формате 644.
  2. Убедитесь в том, что модуль загружен. Откройте конфигурационный файл модулей 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: , , ,

Добавить комментарий