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

Mod_deflate – это модуль Apache, позволяющий сжимать вывод веб-сервера перед отправкой клиенту. Обработанные модулем mod_deflate данные уменьшаются в объёме, благодаря чему клиент способен быстрее их обработать. Это очень важно для клиентов с низкой пропускной способностью; кроме того, это учитывается поисковыми системами при оценке работы сайта и помещении его в рейтинг.

Также mod_deflate может восстанавливать сжатые данные. Эта техника применяется в случае, если Apache используется в качестве обратного прокси-сервера, и вы хотите, чтобы контент, который проходит через прокси-сервер, был также обработан. В целом, этот метод имеет довольно узкую сферу применения. Потому данное руководство сосредоточено на использовании mod_deflate для сжатия данных.

Требования

Это руководство написано для CentOS 7. Установка и настройка модулей, как правило, одинакова для всех операционных систем, но расположение конфигурационных файлов в разных системах может отличаться.

Для выполнения инструкций нужно предварительно установить Apache 2.4.0+; чтобы узнать, как установить Apache, читайте соответствующий раздел данного руководства.

Все команды руководства рекомендуется запускать с привилегиями sudo. Подробнее об этом можно прочесть в этой статье.

Установка mod_deflate

Модуль mod_deflate установлен и включён на стандартной установке Apache в CentOS 7. Чтобы убедиться в этом, запустите apachectl (интерфейс управления сервером Apache), отфильтровав вывод при помощи grep по слову deflate:

apachectl -t -D DUMP_MODULES |grep deflate

На экране должна появиться строка deflate_module (shared). Если эта строка не появилась, значит, модуль не установлен. Устраните эту неполадку:

  1. Убедитесь, что модуль установлен. Файл модуля является частью пакета httpd, который был установлен ранее (см. раздел Требования). По умолчанию он находится в /etc/httpd/modules/mod_deflate.so. кроме того, веб-сервер должен иметь возможность открывать файл; для этого установите права на файл в формате 755.
  2. Проверьте, загружен ли модуль. Откройте конфигурационный файл модулей Apache (/etc/httpd/conf.modules.d/00-base.conf) и убедитесь, что он содержит следующую строку:

LoadModule deflate_module modules/mod_deflate.so

Примечание: Не забудьте перезапустить Apache после внесения любых изменений в настройки.

sudo apachectl restart

Настройка mod_deflate

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

Чтобы настроить mod_deflate, создайте новый конфигурационный файл /etc/httpd/conf.d/mod_deflate.con и поместите в него следующий код:

<filesMatch "\.(js|html|css)$">
SetOutputFilter DEFLATE
</filesMatch>

Этот код значит, что файл будет сжат директивой SetOutputFilter, если его расширение – .js, .html или .css. при необходимости добавьте в настройки другие расширения текстовых файлов.

Примечание: Вышеупомянутый код нужно поместить в файл /etc/httpd/conf/httpd.conf. Тем не менее, лучше хранить такие конфигурации в отдельном файле. Для этого в CentOS 7 любой файл с расширением .conf, хранящийся в каталоге /etc/httpd/conf.d/, автоматически загружается директивой IncludeOptional conf.d / *.conf в конец главного конфигурационного файла Apache.

Кроме того, модуль mod_deflate имеет несколько важных опций конфигурации:

  • DeflateCompressionLevel задаёт уровень сжатия. По умолчанию установлен 9 – наивысший уровень. Наиболее низкому уровню соответствует 1. Чем выше уровень сжатия, тем меньше будет вывод, и тем выше уровень нагрузки CPU.
  • DeflateMemLevel задаёт используемый объём памяти библиотеки сжатия zlib. По умолчанию задан уровень 9 (опять же, наивысший уровень). Чтобы рассчитать допустимый объём, умножьте значение DeflateMemLevel на 16К.
  • DeflateWindowSize устанавливает размер окна сжатия. По умолчанию задана максимальная величина 15. Чем больше это значение, тем выше уровень сжатия (снова за счёт ресурсов сервера).

В большинстве случаев можно оставить настройки по умолчанию. Однако если вы считаете, что производительность сервера значительно ухудшилась после включения mod_deflate, установите более низкие значения в конфигурационном файле /etc/httpd/conf.d/mod_deflate.conf, например:

DeflateCompressionLevel 1

Это снизит уровень сжатия, в результате чего файлы станут объёмнее. Однако так mod_deflate станет использовать меньше CPU. Не забудьте перезапустить Apache, чтоб обновить настройки.

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

Существует много способов проверить работу mod_deflate, но проще всего использовать для этого wget, неинтерактивный загрузчик. Если wget не был установлен на сервер CentOS 7 ранее, установите его с помощью команды:

sudo yum install -y wget

Для тестирования нужен текстовый файл в несколько сотен килобайт как минимум. Если на сервере нет такого файла, загрузите JQuery (популярную библиотеку JavaScript) и загрузите её на сайт. Если же вы не знаете, куда поместить файл, подгрузите его в стандартный каталог document root (для Apache это /var/www/html/).

Примечание: Чтобы 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: , ,

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