info home general windows unix linux debian mac os apache nginx iphone

Recent Articles

How to rename multiple files in Unix or Linux

Convert docx to doc in Mac OS X Snow Leopard or Leopard

HISTORY shell variable management in Unix/Linux

How to eject CD/DVD from your MacBook or iMac

Play Prince of Persia on Ubuntu Linux using DOSBox

Tags

How to compress your webpages

Most, if not all, major web browsers are gzip enabled these days. This was introduced in HTTP/1.1 with the "Content-Encoding" header that allows clients to send and receive compressed data.

There are 2 types of compressions - gzip and deflate.

If you're a web developer or you own a website, you can serve compressed pages to save on bandwidth and decrease page load times. This is done in different ways depending on your web server.

Apache 1.3

Apache 1.3 supports only mod_gzip. To compress your webpages using this module, first of all the "mod_gzip" module has to be installed and enabled.

In Apache's httpd.conf, load the module with a directive similar to this:

LoadModule gzip_module modules/mod_gzip.so
You can set other parameters like minimum file size for compression, etc. To enable compression only for files that are at least 1500 bytes in size:
mod_gzip_minimum_file_size 1500
To enable compression for GET and POST methods:
mod_gzip_handle_methods GET POST

Apache 2

Apache 2 supports mod_deflate. To compress your webpages using this module, install and enable the mod_deflate module.

In Ubuntu, to enable this module, the command is:

sudo a2enmod deflate
Then restart Apache with:
/etc/init.d/apache2 restart
To enable compression for HTML, text, CSS and XML files:
AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml

Read more at Apache's official documentation.

Nginx web server

If you're using the great Nginx web server, edit nginx.conf to include these entries:
gzip on;
gzip_http_version 1.1;
gzip_comp_level 4;
gzip_proxied any;
gzip_types text/plain text/html text/css text/javascript application/x-javascript text/xml application/xml application/xml+rss;

The above sends compressed content for HTML, CSS, JavaScript, XML and RSS files that are requested.

Restart Nginx
/etc/init.d/nginx restart

Lighttpd web server

If you're using the other great lightweight web server lighttpd, here's how you compress files:

Edit lighttpd.conf to include this line:

server.modules += ( "mod_compress" )

Setup a cache directory and add file types:

compress.cache-dir = "/tmp/lighttpdcache/"
compress.filetype = ( "text/html" "text/plain","text/css", "text/xml", "text/javascript" )
Restart Lighttpd
/etc/init.d/lighttpd restart

Gzip within PHP scripts

If you're hosting your sites on a shared server, you don't have access to the actual .conf file and your web hosting provider doesn't enable any form of compression, you can still serve compressed web pages through PHP.

For that, add this line to the very top of your PHP script.
ob_start("ob_gzhandler");
Here's an example of compresssing a regular HTML page:
  1. Original page:
    <html>
    <body>Hello!</body>
    </html>
    
  2. Page after adding the gzhandler statement:
    <?php ob_start("ob_gzhandler"); ?>
    <html>
    <body>Hello!</body>
    </html>
    
    Be sure to change the extension of the file from .html to .php and the page will be served gzipped.
Your PHP scripts will be served compressed.

Last Update: December 2008