如何检查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; } }
请注意,您可以覆盖每个服务器和位置级别的gzip
, gzip_static
和access_log
。
有一些关于ETag
响应头的提示。
如果静态文件由nginx提供,那么头文件如下所示: ETag: "135a-BQhu6KL71dyeCXcVZme6ug"
,但是,当nginx压缩响应时(通过gzip模块),它看起来像这样: ETag: W/"135a-BQhu6KL71dyeCXcVZme6ug"
(注意W/
)。
您可以使用这个以及Content-Encoding: gzip
来区分普通的静态文件,预压缩的静态文件和dynamic压缩的文件。
如果启用Content-Encoding列(右键单击列以启用/禁用表中的特定内容),则可以通过Network选项卡使用Chrome开发工具:
Chrome开发工具与内容编码列启用屏幕截图
我通常使用Chrome开发工具,查看相关文件的文件大小。