Apache mod deflate 不会压缩 php 输出

Apache mod deflate 不会压缩 php 输出

我已经启动并运行了 mod_deflate。我可以在我的 apache 服务器中放入一个 something.txt 文件,然后使用 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

我还检查了 php.ini 中是否关闭了 zlib 压缩,并尝试将输出缓冲区设置为关闭。但无论我怎么尝试,php 输出都无法被 apache 压缩。从 apache 到 zip 的开销比我使用 php zlib 时要小。

我看过足够多这样的帖子Apache 输出压缩适用于 CSS/JS,但不适用于 PHP但这样可以启用 php 压缩。我希望 apache 能够处理它。

我肯定忽略了这里一些愚蠢的事情。

更新:我解决了所有问题,也得益于给出的答案。但最终它仍然没有 100% 正常工作。这是由于安装了错误的包。使用了 apache2filter,导致我走上了错误的路径。

答案1

AddOutputFilterByType是在输出过滤器链中添加内容的一种不推荐的方式(参考这里).:

另一个指令 AddOutputFilterByType 仍受支持,但可能会出现问题,现已弃用。请改用动态配置。

您可能会遇到一些问题,因为 PHP 与一个不包含 DEFLATE 过滤器的过滤器链相关联。

您可以尝试使用新的语法mod_filter过滤链如图所示在这个问题中(在问题中,而不是在答案中)。

答案2

我遇到了这个问题,最后发现在 .htaccess 和 httpd.conf 中设置 mod_deflate 选项会导致不同的结果。在 fastcgi 或作为 DSO 运行时,httpd.conf 设置在 PHP 中有效。在 .htaccess 文件中,作为 fastcgi 运行的 PHP 无法理解 deflate 指令。

因此,请尝试在 httpd.conf 而不是 .htaccess 中写入规则,看看是否能解决您的问题(请不要忘记在进行更改后重新启动 Apache)。

答案3

尝试一下,看看它是否适合你:

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

相关内容