Какие настройки 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

Comments

Вопрос: а что это за скрипты? Логично предположить, что это те, которые получаются в случае, если сжатие скриптов включено (настройка 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

Не стоит переходить на личности. Не красиво. Что касается заголовка Content-Encoding: «gzip», то он действительно не передавался. И не передавался из-за того, что ответ был не 200-м, а 304-м (обновил страницу без ctrl). Логично. Но вводит в заблуждение тот факт, что браузер для этого самого 304-го ответа не ставит прочерк в поле «Передано» (для 304-х картинок — прочерк ставит). Вместо этого указывает сжатый размер, как будто content физически передавался:

jquery.min.js http://www.picshare.ru/view/6851629/

Вот в чём дело. Директива AddOutputFilterByType с версии Apache 2.1 (как только появился mod_filter) — приобрела статус deprecated. А с версии 2.3.7 переезжает из ядра в модуль mod_filter.

Именно поэтому в вышеприведённом примере файла конфигурации модуля «deflate.conf» (первый пример для Ubuntu) дополнительно выполняется проверка загрузки модуля modx_filter.

P.S. Вместо директивы AddOutputFilterByType также можно использовать более универсальный вариант на основе директивы FilterChain. Вот примеры: пример1, пример2.