使用 mod_deflate apache 和 tomcat 进行 gzip 压缩

使用 mod_deflate apache 和 tomcat 进行 gzip 压缩

我正在尝试在 Apache 服务器中启用 gzip 压缩,该服务器使用连接器来前置 Tomcat 实例。我在 httpd.conf 中尝试了几种模块配置设置。这是我最近的尝试:

<IfModule mod_deflate.c>
SetOutputFilter DEFLATE
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html

DeflateCompressionLevel 9
SetEnvIfNoCase Request_URI \.(?:gif|png|jpg|jpeg)$ no-gzip dont-vary
Header append Vary User-Agent env=!dont-vary
DeflateFilterNote Input instream
DeflateFilterNote Output outstream
DeflateFilterNote Ratio ratio

LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%)' deflate
CustomLog "/var/output/logs/deflate_log" deflate
ErrorLog "/var/output/logs/deflate_error_log"
</IfModule>

我正在使用 Firebug 检查响应标头,并且我验证了请求标头有,Accept-Encoding: gzip deflate但​​是每次Content-Encoding响应中都缺少标头。

我尝试将以下行添加到httpd.conf,但它给出了一个错误,即mod_deflate内置模块无法加载。我通过 确认了这一点,apachectl -t它显示mod_deflate.c为已编译模块。

LoadModule deflate_module /usr/lib/apache2/modules/mod_deflate.so

我有一个 Tomcat 实例,它通过 AJP 连接器连接到 Apache。当我调试 servlet 时,我发现Content-Type我得到的测试脚本响应是application/javascript;charset=UTF-8。我最初使用的是AddOutputFilterByType指令,并认为附加charset=UTF-8部分可能会弄乱 Apache 的 MIME 类型,但它也无法正常工作SetOutputFilter DEFLATE

我的自定义日志deflate重复显示以下行:

GET /myservlet HTTP/1.1" -/- (-%)

我不明白为什么这不起作用。我的 Apache 版本是2.0.63。有人遇到过类似的问题吗?有没有什么办法可以进一步调试并检查 Apache 内部发生了什么?也许可以启用一些调试日志?

谢谢,Venkat。

答案1

对于 Tomcat 提供的内容,您需要在 Tomcat 上(而不是 httpd 上)启用压缩。

相关内容