Enable Gzip Compression In Apache HTTPD With Mod_Deflate

Published: {ts '2012-07-24 00:00:00'}
Author: Steven Neiland
Site Url: http://www.neiland.net/article/enable-gzip-compression-in-apache-httpd-with-moddeflate/

GZip compression is a simple, effective way to save bandwidth and speed up your site. For anybody using Apache HTTPD here is a simple walk through of the steps required to enable it.

Note that there is a side effect of enabling gzip compression you need to be aware of.

Beware Higher CPU Overhead

By adding a compression step to your server you are increasing the cpu cost of each resource request. If your server is already under heavy load this additional overhead could be a serious downside. Only you can judge if the benefits outweigh the costs.

So lets get started.

Step 1: Enable mod_deflate

The first step to adding compression is to install the mod_deflate module. If you dont have it already then you can download it from the module page of the apache httpd project website and add it to your httpd modules directory. Slackware comes with this module already present.

Once you have confirmed the mod_deflate module exists open the "httpd.conf" file and either add or un-comment the LoadModule directive for mod_deflate.

Slackware Conf File Location

/etc/httpd/httpd.conf
#uncomment this to enable mod_deflate LoadModule deflate_module modules/mod_deflate.so

Step 2: Create a Deflate Rule Set

With the module enabled we must now tell Apache HTTPD what type of files we want it to compress. To do this we create a file named httpd-deflate.conf (this is my naming convention but you can actually name it anything you want).

vi /etc/httpd/extra/httpd-deflate.conf

Lets tell Apache that we want to gzip all files except those file formats which we know are already compressed. We also put in some browser specific compression rules. Copy the following code into the httpd-deflate.conf and save it.

#Set to gzip all output SetOutputFilter DEFLATE #exclude the following file types SetEnvIfNoCase Request_URI \.(?:exe|t?gz|zip|iso|tar|bz2|sit|rar|png|jpg|gif|jpeg|flv|swf|mp3)$ no-gzip dont-vary #set compression level DeflateCompressionLevel 9 #Handle browser specific compression requirements BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4.0[678] no-gzip BrowserMatch bMSIE !no-gzip !gzip-only-text/html SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0

Step 3: Load Deflate Rule Set

At this stage you can choose to load our deflate rule set for all sites or per vhost. To load the rule set it for all sites place this line in httpd.conf.

# Deflate configuration Include /etc/httpd/extra/httpd-deflate.conf

If you just want to use these rules for one website put this command in the body of that individual vhost in the "httpd-vhost.conf" file.

Step 4: Restart Apache HTTPD

Finally we save our changes and restart apache httpd. For Slackware folks here is the restart command for apache.

/etc/rc.d/rc.httpd restart

Alternative Config: Deflate Named Types

In my previous deflate file we compressed everything except a list of excluded types. An alternative approach is to only compress for named types (for example html, css, js). Here is a deflate rule set I have used this approach.

#set compression level DeflateCompressionLevel 9 #compress these named file types AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/plain AddOutputFilterByType DEFLATE text/xml AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE application/x-javascript AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE text/javascript AddOutputFilterByType DEFLATE text/x-js AddOutputFilterByType DEFLATE application/json AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE application/javascript #Handle browser specific compression requirements BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4.0[678] no-gzip BrowserMatch bMSIE !no-gzip !gzip-only-text/html SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0