Networking

How to configure gzip compression with NGINX

If you're looking to gain a bit more performance out of your NGINX web server, Jack Wallen shows you how with the help of gzip compression.

Image: Jack Wallen

NGINX is an outstanding, open source web server. It's easy to get up and running, lightweight, and geared for speed. However, as with any server software, there are always ways to eek out as much performance as possible. NGINX is not short on options. One such performance route admins will take is that of the gzip compression available with NGINX. With the help of compression, the server will be sending smaller objects to clients, thereby the pages will be faster to load. One of the big mistakes with compression is betting the whole farm and compressing every object available for each page.

Unfortunately, with this option comes a bit of a trade off. Compressing every object can take significant CPU resources from your server hardware. That, in turn, will cause a slowdown in NGINX, thus rendering the configuration null. How do you avoid that defeating tradeoff?

Simple.

Instead of compressing every object, configure NGINX to only compress large files and avoid the temptation to compress smaller files (such as images, executables, etc.).

I'm going to show you how to achieve this with a couple of quick steps. Before you do, you might want to run Google's PageSpeed Insights on your page before and after this configuration (so you can see, for yourself, the gains made).

The configuration

You'll be surprised at how simple this is. Open up the file /etc/nginx/nginx.conf. The first thing you need to do is look for the directive:

gzip on;

Comment that out like so:

#gzip on;

Now add the following contents above the line you just commented out:

gzip on;
gzip_vary on;
gzip_min_length 10240;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xml;
gzip_disable "MSIE [1-6]\.";

Here's an explanation for the configuration, line by line:

  • gzip on; - enables gzip compression
  • gzip_vary on: - tells proxies to cache both gzipped and regular versions of a resource
  • gzip_min_length 1024; - informs NGINX to not compress anything smaller than the defined size
  • gzip_proxied - compress data even for clients that are connecting via proxies (here we're enabling compression if: a response header includes the "expired", "no-cache", "no-store", "private", and "Authorization" parameters)
  • gzip_types - enables the types of files that can be compressed
  • gzip_disable "MSIE [1-6]\."; - disable compression for Internet Explorer versions 1-6

Once you've added the options, save and close the nginx.conf file and restart NGINX with the command:

sudo service nginx restart

NGINX should now be serving up compressed files that meet your minimum length and type configurations. Head on back to Google's PageSpeed Insights to make sure you're seeing some improvement.

Making fast faster

NGINX is already a fast web server; that you can eek out even more performance, speaks highly to what the developers have accomplished. Give this configuration a go and watch your web server reach new levels of page serving speeds.

Also see

About Jack Wallen

Jack Wallen is an award-winning writer for TechRepublic and Linux.com. He’s an avid promoter of open source and the voice of The Android Expert. For more news about Jack Wallen, visit his website jackwallen.com.

Editor's Picks

Free Newsletters, In your Inbox