如何检查nginx gzip_static模块是否工作?

如何检查nginx是否提供.gz版本的静态文件(如果存在)?

我用gzip静态模块编译了nginx,但是我没有看到提到的日志中提供的.gz版本。 (我已经在同一个目录中缩小了global.js和global.css文件的.gz版本)。

nginx.conf的相关部分如下所示:

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; 

任何指针将不胜感激。

使用strace。 首先,你需要检测nginx进程的PID:

 # 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 

好吧,25044是工作进程。 现在,我们来追踪它:

 # 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 

正如你所看到的,它试图find.gz版本的文件。

更改非gzip文件的内容。 然后touch这两个文件(同时 – 即:在相同的touch实例中)。 如果在浏览器中加载文件(cache-wiped),则获得未更改的文件,然后nginx提供静态caching压缩文件。

一个简单的方法来避免“我只是获取caching?”的担心是从curl从curl获取,因为curl不caching。

我会禁用自动压缩和日志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; } } 

请注意,您可以覆盖每个服务器和位置级别的gzipgzip_staticaccess_log

有一些关于ETag响应头的提示。

如果静态文件由nginx提供,那么头文件如下所示: ETag: "135a-BQhu6KL71dyeCXcVZme6ug" ,但是,当nginx压缩响应时(通过gzip模块),它看起来像这样: ETag: W/"135a-BQhu6KL71dyeCXcVZme6ug" (注意W/ )。

您可以使用这个以及Content-Encoding: gzip来区分普通的静态文件,预压缩的静态文件和dynamic压缩的文件。

如果启用Content-Encoding列(右键单击列以启用/禁用表中的特定内容),则可以通过Network选项卡使用Chrome开发工具:

Chrome开发工具与内容编码列启用屏幕截图

我通常使用Chrome开发工具,查看相关文件的文件大小。