Настройка gzip-сжатия и кеширования в Apache2
Статья рассчитана на опытных пользователей, которые уже имеют некоторый опыт настройки Apache 2.4, использовали .htaccess и понимают нафига он нужен. Дальше речь пойдет о том, как настроить кеширование и gzip-сжатие файлов. Хотя правильно будет сказать не файлов, а ответа сервера ( response ). Поскольку ответ может формироваться динамически, те же изображения, JavaScript, CSS и т.д.
Чуть теории
Кеширование. Основной принцип заключается в том, что обмениваясь заголовками, сервер сообщает клиенту (браузеру) что такой-то контент можно закешировать на продолжительное время — неделя, месяц, год.. После чего, при последующих запросах этого контента, браузер будет вытягивать данные из кеша. Лафа может закончиться, когда:
- Время жизни кеша истекло;
- Пользователь очистил кеш вручную — Ctrl + F5 ,
- Закончилось доступное под кеш пространство и закешированные данные был перезаписан более новым;
- Данные были обновлены на стороне сервера;
Используя кеширование вы снижаете нагрузку на сервер и экономите клиенту трафик и время. Однако нужно понимать, что у матерого серфера кеш может полностью затираться ежедневно, а то и чаще — все зависит от количества посещаемых сайтов и объема доступной под кеш квоты.
Сжатие. Полезная штука, которая позволяет сжимать (с помощью gzip) данные на сервере и распаковывать после получения на клиенте (в браузере). Клиент должен уметь распаковывать сжатые данные, о чем он сообщает в заголовке Accept-Encoding, например:
Опять же мы экономим на трафике и, соответственно, сокращаем время ожидания. Но, при этом, чуть больше нагружаем ЦП при распаковке данных.
Необходимые модули Apache2
Для включения кеширования нам нужен модуль mod_deflate , для кеширования — mod_headers или mod_expires . Также mod_headers вам пригодится чтобы удалять заголовок ETag, он лишний и могут быть проблемы с кешированием через mod_header при включенном сжатии. Для включение выполните:
Для отключения модулей воспользуйтесь командой a2dismod :
Итоговый .htaccess
Сразу приведу пример файла .htaccess, в котором настроено кеширование и сжатие. Файл будет содержать краткие примечания, а ниже разберем все директивы и правила более детально.
Примечание
FilesMatch и Files
сопоставляют шаблон только с именем файла, поэтому вы не можете указывать пути к файлам в этих директивах.
Чтобы указать область видимости кеша, используйте следующие правила:
gzip-сжатие
Apache2 больше не поддерживает модуль mod_gzip, теперь основным модулем является mod_deflate, который мы включили ранее. Чтобы проверить что сжатие работает — убедитесь что ответ содержит заголовок Content-Encoding:
Сжатие может быть настроено для определенных MIME-типов файлов, за это отвечает правило AddOutputFilterByType .
Внимание!
Модуль deflate при сжатии может удалять заголовок Content-Length, поскольку длина сжатого ответа неизвестна на момент передачи заголовков. Однако, при удалении из ответа заголовка ETag — ситуация нормализуется. Почему?
Примечание
Сжимать изображения и видео файлы особого смысла нет — толку это даст мало, поскольку jpeg или gif уже сами по себе являются сжатыми форматами.
Кеширование
Для кеширования мы активировали модули mod_headers и mod_expires . Эти модули позволяют устанавливать заголовки в ответе сервера и подсказать браузеру схему кеширования.
Внимание!
Я замечал не понятное для меня поведение при включении mod_deflate и настройке кеширования через mod_headers . Пропадал заголовок Content-Length и кеширование переставало работать. Решение нашлось — удаление заголовка из ответа:
В случае с mod_expires сжатие и кеширование работало нормально даже с выключенным модулем mod_headers . Отпишитесь, если вы знаете почему происходит так.
Немного в цифрах
Проанализируем профит от gzip-сжатия на примере библиотеки jquery-2.0.3.js. По факту, файл (не минифицированный) весит 236,5KB. mod_deflate сжимает его до 70 KB — не плохо. При следующем запросе, если включено кеширование, даже эти 70 KB не будут загружаться по сети — браузер достанет jQuery из кеша.
Как правильно включить сжатие файлов?
Для чего нужна эта конструкция — IfModule mod_deflate.c ?
Что выполняет этот пункт — BrowserMatch ?
Настройка в .htaccess
Для чего нужна эта конструкция — IfModule mod_deflate.c ?
Проверяет, активирован ли необходимый модуль mod_deflate .
Что выполняет этот пункт — BrowserMatch
Позволяет задать поведение на основе заголовка user-agent. Используется для установки env-переменных , которые использует Apache.
Как правильно прописать настройки?
Использовать комбинацию из двух процитированных вариантов.
Раз уж в первом варианте делается проверка одного из используемых модулей, пусть делается проверка и для второго.
Данный фрагмент файла .htaccess проверяет наличие модуля mod_deflate и, если он доступен, включает сжатие для перечисленных типов файлов. После этого идет проверка наличие модуля mod_setenvif и, если он доступен, изменяются параметры сжатия для некоторых браузеров, которые некорректно обрабатывают сжатые файлы.
Как установить и настроить mod_deflate на CentOS 7
Mod_deflate — это модуль Apache, который позволяет сжимать выходные данные с вашего веб-сервера перед отправкой клиенту. Как только размер содержимого вашего сайта сжимается, его размер уменьшается, и клиенты могут загружать его быстрее. Это полезно не только для клиентов с более низкой пропускной способностью, но также учитывается поисковыми системами при оценке эффективности вашего сайта и рейтинга страницы.
В дополнение к сжатию контента, mod_deflate также может быть использован для распаковки. Этот метод будет применим, если вы используете Apache в качестве обратного прокси-сервера и хотите дополнительно обрабатывать контент, проходящий через прокси-сервер. Однако эта техника имеет очень ограниченное применение. Мы сосредоточим внимание на статье об использовании mod_deflate для сжатия.
Предпосылки
Это руководство было протестировано на CentOS 7. Установка и настройка модуля не зависит от ОС или версии ОС, но расположение файлов конфигурации может различаться в разных ОС и их версиях.
Также предполагается, что вы используете Apache 2.4.0 или выше. Чтобы установить Apache, пожалуйста, следуйте Шагу 1 из How To Установите стек Linux, Apache, MySQL, PHP (LAMP) на CentOS.
Все команды в этом руководстве должны выполняться от имени пользователя без полномочий root. Если для этой команды требуется root-доступ, ему будет предшествовать + sudo + . Если у вас его еще нет, следуйте этому руководству: Initial Server Setup на CentOS 7.
Монтаж
Mod_deflate включен и включен в установку Apache по умолчанию на CentOS 7. Чтобы подтвердить это, запустите + apachectl + , интерфейс управления сервером Apache и отфильтруйте вывод с помощью + grep + для ключевого слова + deflate + следующим образом:
Вы должны увидеть + deflate_module (shared) + , если mod_deflate установлен и включен. Если вы этого не видите, выполните следующие действия по устранению неполадок:
Убедитесь, что файл модуля установлен. Этот файл является частью основного пакета + httpd + , который вы уже должны были установить в соответствии с ранее упомянутыми предварительными условиями. По умолчанию он находится в + / etc / httpd / modules / mod_deflate.so + . Кроме того, веб-сервер должен иметь возможность открыть этот файл. Для этой цели + mod_deflate.so + должен иметь права на чтение для всего мира, например 755.
Проверьте, загружен ли модуль. Откройте файл конфигурации базовых модулей Apache + / etc / httpd / conf.modules.d / 00-base.conf + и убедитесь, что эта строка присутствует и не закомментирована:
конфигурация
Чтобы начать использовать mod_deflate, вы должны указать, какие типы файлов должны быть сжаты. С одной стороны, форматы простого текста могут быть значительно уменьшены в размере путем сжатия, и поэтому имеет смысл применять его к файлам HTML, CSS или JavaScript. С другой стороны, многие мультимедийные форматы, такие как Flash и изображения, уже содержат сжатие, и дополнительное сжатие будет бесполезным.
Чтобы настроить mod_deflate, создайте новый файл конфигурации + / etc / httpd / conf.d / mod_deflate.conf + с примером кода:
Приведенный выше код означает, что когда файл соответствует расширениям + .js + , + .html или` + .css or`, он будет сжат (дефлирован) посредством стандартной директивы Apache + SetOutputFilter . Вы можете добавить другие подобные расширения текстовых файлов, найденные на вашем сайте, такие как + .txt + .
Кроме того, у mod_deflate есть несколько важных параметров конфигурации:
+ DeflateCompressionLevel + — уровень сжатия, который будет применен. По умолчанию этот уровень равен 9, самый высокий уровень сжатия. 1 — наименьший уровень сжатия. Более высокое сжатие дает наименьший выход за счет более высокой загрузки ЦП сервера.
+ DeflateMemLevel + — объем памяти, которую zlib, библиотека сжатия, может использовать. Значение по умолчанию 9, что также является самым высоким значением. Чтобы точно рассчитать разрешенную память, вы должны умножить значение + DeflateMemLevel + на 16K.
+ DeflateWindowSize + — размер окна сжатия. По умолчанию это максимально возможное значение 15. Более высокое число означает более высокий уровень сжатия, опять же за счет большего количества ресурсов сервера.
В большинстве случаев вы можете оставить вышеуказанные значения по умолчанию. Однако, если вы подозреваете, что производительность вашего сервера значительно ухудшилась после использования mod_deflate, вы настраиваете более низкие значения в файле конфигурации + / etc / httpd / conf.d / mod_deflate.conf + следующим образом:
Вышеуказанное снизит уровень сжатия, что приведет к увеличению файлов. Тем не менее, mod_deflate будет использовать меньше CPU таким образом. Обязательно перезапустите Apache, если вы решите применить любые такие изменения.
тестирование
Существуют различные способы тестирования mod_deflate, но самый простой — использовать wget, неинтерактивный сетевой загрузчик. Если у вас его еще нет в CentOS 7 Droplet, вы можете установить его с помощью команды + sudo yum install -y wget + .
Для теста вам понадобится текстовый файл размером не менее нескольких сотен килобайт, который при сжатии должен уменьшиться. Если у вас нет такого файла под рукой, вы можете скачать JQuery, которая является популярной библиотекой JavaScript, и загрузить ее на свой сайт. Если вы не уверены, куда поместить файл, вы можете просто загрузить его в корневой каталог документов Apache, который в CentOS 7 называется + / var / www / html / + . Таким образом, файл будет доступен в корневом каталоге вашего сайта по умолчанию.
Как только пример тестового файла будет загружен на ваш сайт, загрузите его с помощью + wget + . Вы можете выполнить этот тест либо с локального компьютера, либо с Droplet. как это:
В приведенном выше примере вы загружаете файл + jquery-1.11.3.js с вашего сервера Apache. Чтобы использовать сжатие, мы передаем дополнительный аргумент заголовка + wget + + Accept-Encoding: gzip + .
При загрузке описанным выше способом файл + jquery-1.11.3.js + должен иметь размер 83 КБ. На самом деле, это не совсем тот же исходный файл JavaScript, и он должен быть дополнительно извлечен клиентом, что также вызывает некоторые накладные расходы на стороне клиента. Однако размер передаваемого по сети будет всего 83 КБ, что более чем в три раза меньше исходного файла (278 КБ).
Вы можете сначала подтвердить приведенный выше расчет, проверив размер загруженного файла с помощью команды Linux для вывода содержимого каталога + ls + следующим образом:
Затем вы можете снова сравнить результат с исходным файлом на вашем сайте с помощью команды + ls + :
Заключение
Как вы видели из этой статьи и примера из реальной жизни с библиотекой JQuery, Mod_deflate может помочь вам значительно снизить пропускную способность для вашего сайта. Чтобы продолжить оптимизацию вашего сайта, прочитайте о Apache content cache, которое следующий логический шаг после включения mod_deflate.
Установка и настройка модуля 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). Если эта строка не появилась, значит, модуль не установлен. Устраните эту неполадку:
- Убедитесь, что модуль установлен. Файл модуля является частью пакета httpd, который был установлен ранее (см. раздел Требования). По умолчанию он находится в /etc/httpd/modules/mod_deflate.so. кроме того, веб-сервер должен иметь возможность открывать файл; для этого установите права на файл в формате 755.
- Проверьте, загружен ли модуль. Откройте конфигурационный файл модулей 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, например:
Это снизит уровень сжатия, в результате чего файлы станут объёмнее. Однако так 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».
Настройка gzip-сжатия и кеширования в Apache2
Статья рассчитана на опытных пользователей, которые уже имеют некоторый опыт настройки Apache 2.4, использовали .htaccess и понимают нафига он нужен. Дальше речь пойдет о том, как настроить кеширование и gzip-сжатие файлов. Хотя правильно будет сказать не файлов, а ответа сервера ( response ). Поскольку ответ может формироваться динамически, те же изображения, JavaScript, CSS и т.д.
Чуть теории
Кеширование. Основной принцип заключается в том, что обмениваясь заголовками, сервер сообщает клиенту (браузеру) что такой-то контент можно закешировать на продолжительное время — неделя, месяц, год.. После чего, при последующих запросах этого контента, браузер будет вытягивать данные из кеша. Лафа может закончиться, когда:
- Время жизни кеша истекло;
- Пользователь очистил кеш вручную — Ctrl + F5 ,
- Закончилось доступное под кеш пространство и закешированные данные был перезаписан более новым;
- Данные были обновлены на стороне сервера;
Используя кеширование вы снижаете нагрузку на сервер и экономите клиенту трафик и время. Однако нужно понимать, что у матерого серфера кеш может полностью затираться ежедневно, а то и чаще — все зависит от количества посещаемых сайтов и объема доступной под кеш квоты.
Сжатие. Полезная штука, которая позволяет сжимать (с помощью gzip) данные на сервере и распаковывать после получения на клиенте (в браузере). Клиент должен уметь распаковывать сжатые данные, о чем он сообщает в заголовке Accept-Encoding, например:
Опять же мы экономим на трафике и, соответственно, сокращаем время ожидания. Но, при этом, чуть больше нагружаем ЦП при распаковке данных.
Необходимые модули Apache2
Для включения кеширования нам нужен модуль mod_deflate , для кеширования — mod_headers или mod_expires . Также mod_headers вам пригодится чтобы удалять заголовок ETag, он лишний и могут быть проблемы с кешированием через mod_header при включенном сжатии. Для включение выполните:
Для отключения модулей воспользуйтесь командой a2dismod :
Итоговый .htaccess
Сразу приведу пример файла .htaccess, в котором настроено кеширование и сжатие. Файл будет содержать краткие примечания, а ниже разберем все директивы и правила более детально.
Примечание
FilesMatch и Files
сопоставляют шаблон только с именем файла, поэтому вы не можете указывать пути к файлам в этих директивах.
Чтобы указать область видимости кеша, используйте следующие правила:
gzip-сжатие
Apache2 больше не поддерживает модуль mod_gzip, теперь основным модулем является mod_deflate, который мы включили ранее. Чтобы проверить что сжатие работает — убедитесь что ответ содержит заголовок Content-Encoding:
Сжатие может быть настроено для определенных MIME-типов файлов, за это отвечает правило AddOutputFilterByType .
Внимание!
Модуль deflate при сжатии может удалять заголовок Content-Length, поскольку длина сжатого ответа неизвестна на момент передачи заголовков. Однако, при удалении из ответа заголовка ETag — ситуация нормализуется. Почему?
Примечание
Сжимать изображения и видео файлы особого смысла нет — толку это даст мало, поскольку jpeg или gif уже сами по себе являются сжатыми форматами.
Кеширование
Для кеширования мы активировали модули mod_headers и mod_expires . Эти модули позволяют устанавливать заголовки в ответе сервера и подсказать браузеру схему кеширования.
Внимание!
Я замечал не понятное для меня поведение при включении mod_deflate и настройке кеширования через mod_headers . Пропадал заголовок Content-Length и кеширование переставало работать. Решение нашлось — удаление заголовка из ответа:
В случае с mod_expires сжатие и кеширование работало нормально даже с выключенным модулем mod_headers . Отпишитесь, если вы знаете почему происходит так.
Немного в цифрах
Проанализируем профит от gzip-сжатия на примере библиотеки jquery-2.0.3.js. По факту, файл (не минифицированный) весит 236,5KB. mod_deflate сжимает его до 70 KB — не плохо. При следующем запросе, если включено кеширование, даже эти 70 KB не будут загружаться по сети — браузер достанет jQuery из кеша.
How to Install mod_deflate in Ubuntu / CentOS
mod_deflate allows Apache web server to compress the response data before sending it to the client browser. This speeds up website performance and reduces data transfer costs for server. Here’s how to install mod_deflate in Ubuntu / CentOS.
How mod_deflate works
mod_deflate is an Apache module that enables Apache web server to compress response data before sending it to users’ browsers. It improves website performance and reduces amount of data transferred from your website. Even search engines consider low data usage on your website and improve your website rankings.
How to Install mod_deflate in Ubuntu / CentOS
Here are the steps to install mod_deflate in Ubuntu / CentOS.
1. Open Apache Configuration File
Open Apache configuration file in terminal.
You will find the Apache server configuration file located at one of the following locations, depending on your installation.
- /etc/apache2/httpd.conf
- /etc/apache2/apache2.conf
- /etc/httpd/httpd.conf
- /etc/httpd/conf/httpd.conf
If you have setup Apache virtual host, you can alternatively open virtual host file.
2. Install and Enable mod_deflate in Apache
Look for the following line
and remove # at its beginning
3. Restart Apache Web Server
Restart Apache server to apply changes.
Ubuntu/Debian
CentOS/Redhat/Fedora
4. Check if mod_deflate is working
Open terminal and run the following command to check if mod_deflate is enabled.
You should see the following output which indicates that mod_deflate is enabled.
By default, mod_deflate will compress HTML, JS and CSS files on your website.
If you want to test mod_deflate, use one of the online mod_deflate compression testing tools for websites. If you want to further optimize mod_deflate performance open its configuration file /etc/apache2/mods-enabled/deflate.conf in a text editor and update it as per your requirements.
5. How to Disable mod_deflate
If you want to disable mod_deflate just open the Apache configuration file mentioned in Step 2 and add # before the following line
Restart Apache web server to apply changes.
Hopefully, the above steps will help you install mod_deflate in Ubuntu.
Ubiq makes it easy to visualize data in minutes, and monitor in real-time dashboards. Try it Today!
Как правильно включить сжатие файлов?
Для чего нужна эта конструкция — IfModule mod_deflate.c ?
Что выполняет этот пункт — BrowserMatch ?
Настройка в .htaccess
Для чего нужна эта конструкция — IfModule mod_deflate.c ?
Проверяет, активирован ли необходимый модуль mod_deflate .
Что выполняет этот пункт — BrowserMatch
Позволяет задать поведение на основе заголовка user-agent. Используется для установки env-переменных , которые использует Apache.
Как правильно прописать настройки?
Использовать комбинацию из двух процитированных вариантов.
Раз уж в первом варианте делается проверка одного из используемых модулей, пусть делается проверка и для второго.
Данный фрагмент файла .htaccess проверяет наличие модуля mod_deflate и, если он доступен, включает сжатие для перечисленных типов файлов. После этого идет проверка наличие модуля mod_setenvif и, если он доступен, изменяются параметры сжатия для некоторых браузеров, которые некорректно обрабатывают сжатые файлы.
Установка и настройка модуля 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). Если эта строка не появилась, значит, модуль не установлен. Устраните эту неполадку:
- Убедитесь, что модуль установлен. Файл модуля является частью пакета httpd, который был установлен ранее (см. раздел Требования). По умолчанию он находится в /etc/httpd/modules/mod_deflate.so. кроме того, веб-сервер должен иметь возможность открывать файл; для этого установите права на файл в формате 755.
- Проверьте, загружен ли модуль. Откройте конфигурационный файл модулей 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, например:
Это снизит уровень сжатия, в результате чего файлы станут объёмнее. Однако так 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».