Enable GZIP Compression on nginx Servers

By  on  

Speed kills, and there's nothing like a speedy website.  When you come to this blog, I want you to have a great experience, which is why I've worked tirelessly to compress every asset and avoid unnecessary synchronous interactions.  In reviewing my site with Google Pagespeed Insights, I noticed that my virtual private server from Media Temple wasn't configured to serve assets gzip compressed.  Oh no!  Here's how I enabled gzip compression and made my site miles faster!

Create a file at /etc/nginx/conf.d/gzip.conf with the following content:

gzip on;
gzip_proxied any;
gzip_types text/plain text/xml text/css application/x-javascript;
gzip_vary on;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";

With that file now in place, restart your server and you will now be serving site assets with gzip compression.  Google takes site speed into account when ranking and placing your sites in their search engine so do your users a favor and strive for the fastest site possible -- especially for mobile users!

Recent Features

  • By
    An Interview with Eric Meyer

    Your early CSS books were instrumental in pushing my love for front end technologies. What was it about CSS that you fell in love with and drove you to write about it? At first blush, it was the simplicity of it as compared to the table-and-spacer...

  • By
    fetch API

    One of the worst kept secrets about AJAX on the web is that the underlying API for it, XMLHttpRequest, wasn't really made for what we've been using it for.  We've done well to create elegant APIs around XHR but we know we can do better.  Our effort to...

Incredible Demos

  • By
    Simple Image Lazy Load and Fade

    One of the quickest and easiest website performance optimizations is decreasing image loading.  That means a variety of things, including minifying images with tools like ImageOptim and TinyPNG, using data URIs and sprites, and lazy loading images.  It's a bit jarring when you're lazy loading images and they just...

  • By
    LightFace:  Facebook Lightbox for MooTools

    One of the web components I've always loved has been Facebook's modal dialog.  This "lightbox" isn't like others:  no dark overlay, no obnoxious animating to size, and it doesn't try to do "too much."  With Facebook's dialog in mind, I've created LightFace:  a Facebook lightbox...

Discussion

  1. You can use

    gzip_comp_level 1

    Sets a gzip compression level of a response. Acceptable values are in the range from 1 to 9.

    • Nice article, I also like to use gzip_min_length parameter which reduces some overhead to gzip small responses.

  2. To test if gzip is enabled, run:

    curl -H "Accept-Encoding: gzip" -I http://davidwalsh.name/
    

    You should see content-encoding: gzip

  3. Sean Hsien

    For production systems, I would suggest the use of gzip_static.

  4. Marlin Gezker

    If you want to quickly test whether GZIP is enabled on your website or not use this tool: http://www.giftofspeed.com/gzip-test/
    Saved me a lot of time. It also shows you the compression percentages and stuff (for some of my pages it was 70% or more! :-))

  5. so gzip is only work on text type content?

  6. gzip_types text/plain text/xml text/css application/x-javascript text/javascript application/xml+rss;

    I prefer this line as this enables for javascript too

  7. Brent

    This snippet made it so when I restarted nginx it failed. Not sure what the deal is. Just an FYI for anyone planning to follow those directions exactly.

    • Flawid

      nginx fails to restart because sometimes you’ll have gzip already enabled.
      So removing the line “gzip on;” or commenting it with a # should do the job!

    • If you are using Ubuntu 10.04 just execute this command “sudo nginx”, and it shows you where is the problem if exist, my Nginx fails because this line “gzip on;”.
      It seems Gzip already ON but no configuration was set.

  8. Hey Brent,
    That depends on where you put the code and how you did it.
    Can you share your error So I can help.

  9. I put the code into my website config file at /etc/nginx/sites-enabled/foobar.com/ and it works 100%

Wrap your code in <pre class="{language}"></pre> tags, link to a GitHub gist, JSFiddle fiddle, or CodePen pen to embed!