Tomcat – gzip compression using mod_deflate apache with tomcat

apache-2.2compressionmod-deflatetomcat

I'm trying to enable gzip compression in my Apache server which is fronting a Tomcat instance using a connector. I tried several variants of the module configuration settings in my httpd.conf. Here is my latest attempt:

<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>

I'm checking the response headers using Firebug and I verified that the request headers have Accept-Encoding: gzip deflate but every time, the Content-Encoding header is missing from response.

I tried adding the following line to httpd.conf, but it is giving an error that mod_deflate is a built-in module and cannot be loaded. I confirmed this by apachectl -t and it shows mod_deflate.c as compiled module.

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

I've a Tomcat instance that is connected to Apache via AJP connector. When I debugged my servlets, I found that the response Content-Type I'm getting for my test script is application/javascript;charset=UTF-8. I initially was using AddOutputFilterByType directive and thought that the additional charset=UTF-8 part might be messing up the MIME type for Apache, but then it isn't working with SetOutputFilter DEFLATE also.

My custom logs for deflate show the following line repeatedly:

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

I don't understand why this isn't working. My Apache version is 2.0.63. Did anybody face similar issue? Is there anyway I can debug further and check what is going on within Apache? Perhaps enabling some debug logging?

Thanks,
Venkat.

Best Answer

You need to enable compression on Tomcat not on httpd for content served by Tomcat.