How can I check that the nginx gzip_static module is working?

GzipNginx

Gzip Problem Overview


How can I check that nginx is serving the .gz version of static files, if they exist?

I compiled nginx with the gzip static module, but I don't see any mention of the .gz version being served in my logs. (I have minified global.js and global.css files with .gz versions of them in the same directory).

The relevant part of nginx.conf looks like this:

gzip  on;
gzip_static on;
gzip_http_version 1.0;
gzip_disable "MSIE [1-6]\.";
gzip_vary on;

gzip_comp_level 2;
gzip_proxied any;
gzip_types text/plain text/html text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;

Any pointers would be appreciated.

Gzip Solutions


Solution 1 - Gzip

Use strace. First, you need to detect PID of nginx process:

# ps ax | grep nginx
25043 ?        Ss     0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
25044 ?        S      0:02 nginx: worker process

Ok, so 25044 is the worker process. Now, we trace it:

# strace -p 25044 2>&1 | grep gz
open("/var/www/css/ymax.css.gz", O_RDONLY|O_NONBLOCK) = 438
open("/var/www/css/patches/patch_my_layout.css.gz", O_RDONLY|O_NONBLOCK) = -1 ENOENT (No such file or directory)
open("/var/www/yaml/core/iehacks.css.gz", O_RDONLY|O_NONBLOCK) = -1 ENOENT (No such file or directory)
open("/var/www/js/koznazna5.js.gz", O_RDONLY|O_NONBLOCK) = -1 ENOENT (No such file or directory)
open("/var/www/css/ymax.css.gz", O_RDONLY|O_NONBLOCK) = 216

As you can see, it is trying to find .gz versions of files.

Solution 2 - Gzip

Change the content of the non-gzipped file. And then touch both files (simultaneously—that is: in the same instantiation of touch). If when you load the file in an browser (cache-wiped) you get the non-changed file, then nginx served the static-cached-gzipped file.

An easy way to avoid “did I just fetch the cache?” worries is to fetch from the command-line with curl since curl doesn’t cache.

Solution 3 - Gzip

I would disable automatic compression and log gzip_ratio:

http {
   gzip off;
   gzip_static on;

   log_format log_with_ratio "... $gzip_ratio ...";

   server {
      access_log /var/log/nginx/file.log log_with_ratio;
   }
}

Note, that you may override gzip, gzip_static and access_log per server and location levels.

Solution 4 - Gzip

There is some hint I've noticed regarding ETag response header.

If static file is served by nginx, then header looks like this: ETag: "135a-BQhu6KL71dyeCXcVZme6ug", however, when nginx is compressing the response (through gzip module) it looks like this: ETag: W/"135a-BQhu6KL71dyeCXcVZme6ug" (notice W/).

You can use this as well as Content-Encoding: gzip to distinguish plain static files, pre-compressed static files, and files compressed on the fly.

Solution 5 - Gzip

I usually use Chrome Dev tools and look at the file sizes for the files in question.

Solution 6 - Gzip

You can use Chrome Dev Tools via the Network tab if you enable the Content-Encoding column (right-click on the columns to enable/disable specific content in the table):

[Chrome Dev Tools with Content-Encoding column enabled screenshot][1] [1]: http://i.stack.imgur.com/eSKSt.png

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionnetfluxView Question on Stackoverflow
Solution 1 - GzipMilan BabuškovView Answer on Stackoverflow
Solution 2 - GzipmxclView Answer on Stackoverflow
Solution 3 - GzipAlexander AzarovView Answer on Stackoverflow
Solution 4 - GzipSlava Fomin IIView Answer on Stackoverflow
Solution 5 - GzipSpock View Answer on Stackoverflow
Solution 6 - GzipSean DukehartView Answer on Stackoverflow