Назад | Перейти на главную страницу

Apache mod deflate не сжимает вывод php

У меня установлен и запущен mod_deflate. Я могу добавить файл something.txt на свой сервер apache и использовать curl, чтобы проверить его.

curl --compressed -I /somefile.txt возвращает мне следующее, хорошее и сжатое:

Vary: Accept-Encoding
Content-Encoding: gzip

Но если я использую /some.php, я вернусь:

Accept-Ranges: bytes
X-Powered-By: PHP/5.4.4-14+deb7u5

Но нет Content-Encoding: gzip, .htaccess, который я использовал с несколькими опциями:

SetOutPutFilter DEFLATE

Или

AddOutputFilterByType DEFLATE application/json

Я также проверил, отключено ли сжатие zlib в php.ini, а также попытался отключить выходной буфер. Но что бы я ни пытался, мне никогда не удается сжать вывод php с помощью apache. Накладные расходы от apache до zip меньше, чем при использовании php zlib.

Я вижу достаточно сообщений вроде Сжатие вывода Apache работает для CSS / JS, но не для PHP но это позволяет сжатие из php. Я хочу, чтобы Apache справился с этим.

Я, должно быть, упустил здесь что-то глупое.

ОБНОВИТЬ: Я решил все вопросы, в том числе благодаря полученным ответам. В конце концов, это все равно не сработало на 100%. Это произошло из-за того, что установлен неправильный пакет. Был использован apache2filter, который отправил меня по неправильному пути.

AddOutputFilterByType - устаревший способ добавления элементов в цепочку выходных фильтров (ссылка здесь ) .:

Еще одна директива AddOutputFilterByType все еще поддерживается, но может вызывать проблемы и теперь устарела. Вместо этого используйте динамическую конфигурацию.

И у вас могут возникнуть проблемы, потому что PHP связан с одной цепочкой фильтров, которая не содержит фильтр DEFLATE.

Вы можете попробовать использовать новый синтаксис mod_filter с участием FilterChain как показано в этом вопросе (в вопросе, а не в ответах).

У меня была эта проблема, и в итоге я обнаружил, что установка параметров mod_deflate в .htaccess и httpd.conf приводит к разным результатам. Настройки httpd.conf работали для PHP при запуске в fastcgi или как DSO. В файле .htaccess PHP, работающий как fastcgi, не смог обработать директивы deflate.

Поэтому попробуйте написать правила в httpd.conf вместо .htaccess и посмотрите, решит ли это вашу проблему (не забудьте перезапустить Apache после внесения изменений).

Попробуйте это и посмотрите, работает ли это для вас:

AddOutputFilterByType DEFLATE application/x-httpd-php
AddOutputFilterByType DEFLATE application/x-httpd-fastphp