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

时间:2010-03-17 08:51:54

标签: gzip nginx

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

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

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;

任何指针都会受到赞赏。

6 个答案:

答案 0 :(得分:82)

使用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

正如您所看到的,它正在尝试查找.gz版本的文件。

答案 1 :(得分:19)

更改非gzip压缩文件的内容。然后touch两个文件(同时 - 即:在touch的同一实例中)。如果在浏览器中加载文件(缓存擦除),则会获得未更改的文件,然后nginx会提供static-cached-gzipped文件。

一种简单的方法可以避免“我刚刚获取缓存吗?”担心的是使用curl从命令行获取,因为curl不会缓存。

答案 2 :(得分:17)

我会禁用自动压缩并记录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

答案 3 :(得分:1)

我注意到有关ETag响应标题的一些提示。

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

您可以使用此W/来区分纯静态文件,预压缩静态文件和动态压缩的文件。

答案 4 :(得分:-3)

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

答案 5 :(得分:-3)

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

Chrome Dev Tools with Content-Encoding column enabled screenshot