我正在尝试在 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 上)启用压缩。