29 окт. 2015 г., 18:51

Какие настройки modx отвечают за gzip-сжатие отдаваемых файлов ?

В настройках php gzip-сжатие отключено — проверил через phpinfo:
zlib.output_compression Off Off zlib.output_compression_level -1 -1 zlib.output_handler no value no value
Тем не менее, браузеры получают все файлы в сжатом виде. И вот, не могу найти, кто и где включает это сжатие… В настройках apache никаких директив не обнаружил. nginx не установлен. Логично предположить, что это modx на лету включает сжатие, если в системе установлено расширение zlib (установлено). Но в настройках modx не нашёл соответствующих настроек. Может, modx включает сжатие в безусловном порядке — без всяких настроек?
В корневом .htaccess (который в комплекте с modx) сжатие не включено (закомментировано):
#php_flag zlib.output_compression On #php_value zlib.output_compression_level 5

Вопрос: а что это за скрипты? Логично предположить, что это те, которые получаются в случае, если сжатие скриптов включено (настройка compress_js), и это работает только для бэкэнда. Если эта настройка отключена, то сжатие всех скриптов должно быть только на совести самого сервера.
Сжимает веб сервер. Лично у меня за это отвечает модуль индейца под названием deflate. Посмотрите включён ли у вас этот модуль. Отключите, перезагрузите apache. Вообще-то странное желание добровольно снизить производительность своего сайта. Несжатые файлы как вы понимаете будут гораздо большего размера.
Не понимаю, о каких скриптах речь, но compress_js — да, отвечает только за сжатие скриптов в админке (при этом настройка manager_js_zlib_output_compression отвечает за использование php-модуля zlib для этого самого сжатия). Что касается сжатия html и статики, отдаваемой клиенту (не минификации/обфускации, а именно gzip-запаковки ), то да — никаких других настроек в modx нет (например, отвечающих за сжатие отдаваемого html). И это логично, т.к. в общем случае сжатию должны подвергаться не только html, но и внешние (отдельно подключаемые) стили со скриптами и некоторые прочие форматы данных — за них modx не отвечает.
Лично у меня за это отвечает модуль индейца под названием deflate. Посмотрите включён ли у вас этот модуль.
Модуль «deflate_module» у меня подключен. Поскольку нигде в настройках Apache директив AddOutputFilterByType и SetOutputFilter нет, будем считать, что этот модуль при подключении автоматически включает gzip-сжатие с «умолчательными» настройками. А именно: — gzip-сжатие html, js, css (в т.ч.) — при этом для html заголовок Content-Encoding: «gzip» отдаёт, для js и css — нет (впрочем, gismeteo.ru и yastatic.net для js и css почему-то тоже не отдают)
Отключите, перезагрузите apache. Вообще-то странное желание добровольно снизить производительность своего сайта. Несжатые файлы как вы понимаете будут гораздо большего размера.
Так я не хочу отключать сжатие, я всего лишь хочу взять его под собственный контроль, прописать директивы руками. А если кто-то где-то сжимает, нужно знать кто, где и с какими параметрами это делает…
Я не знаю под какой ОС вы находитесь, но в случае с убунту выглядит это так. В /etc/apache2/mods-available находятся все модули доступные apache. В /etc/apache2/mods-enabled модули которые подключены у вас на данный момент. Конфиг модуля можно посмотреть здесь /etc/apache2/mods-enabled/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> # vim: syntax=apache ts=4 sw=4 sts=4 sr noet
У меня (Debian) /etc/apache2/mods-enabled/deflate.conf чуть проще:
<IfModule mod_deflate.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 </IfModule>
Так или иначе, этот конфиг — то, что я искал. Именно он и работает. Только не ясно, почему заголовок Content-Encoding: «gzip» не отдаётся для css и js (для html — отдаётся)…
Да всё отдаётся. Просто вы пытаетесь настроить то, что и так работает и в чём как мне кажется слабо разбираетесь. Примеры html, css, js
[IMG]http://www.picshare.ru/uploads/151030/MQ6g6LWBs1.jpg[/IMG]
[IMG]http://www.picshare.ru/uploads/151030/B19b33cjrp.jpg[/IMG]
[IMG]http://www.picshare.ru/uploads/151030/G3ldbZmy08.jpg[/IMG]
Не стоит переходить на личности. Не красиво. Что касается заголовка Content-Encoding: «gzip», то он действительно не передавался. И не передавался из-за того, что ответ был не 200-м, а 304-м (обновил страницу без ctrl). Логично. Но вводит в заблуждение тот факт, что браузер для этого самого 304-го ответа не ставит прочерк в поле «Передано» (для 304-х картинок — прочерк ставит). Вместо этого указывает сжатый размер, как будто content физически передавался:
Вот в чём дело. Директива AddOutputFilterByType с версии Apache 2.1 (как только появился mod_filter) — приобрела статус deprecated. А с версии 2.3.7 переезжает из ядра в модуль mod_filter.
Именно поэтому в вышеприведённом примере файла конфигурации модуля «deflate.conf» (первый пример для Ubuntu) дополнительно выполняется проверка загрузки модуля modx_filter.
P.S. Вместо директивы AddOutputFilterByType также можно использовать более универсальный вариант на основе директивы FilterChain. Вот примеры: пример1, пример2.

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