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

Rob*_*son 50 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;
Run Code Online (Sandbox Code Playgroud)

任何指针将不胜感激.

Mil*_*kov 83

使用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
Run Code Online (Sandbox Code Playgroud)

好的,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
Run Code Online (Sandbox Code Playgroud)

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

  • 值得注意的是:`strace`通过多次添加`-p xyz`参数来支持多个PID.有多个nginx工作进程时很有用. (13认同)
  • 使用strace更容易做的事情是"strace -fp $ PID",其中$ PID是主进程的PID.-f标志告诉strace也跟踪所有子进程. (10认同)
  • 看起来需要原始文件https://gist.github.com/ancap/7412315并且无法删除. (3认同)

mxc*_*xcl 19

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

避免"我只是获取缓存吗?"的一种简单方法是担心从命令行获取,curl因为curl不会缓存.


Ale*_*rov 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;
   }
}
Run Code Online (Sandbox Code Playgroud)

请注意,您可以覆盖gzip,gzip_static以及access_log每个服务器和位置级别.

  • 这实际上非常适合测试,如果nginx正在动态gzipping事件即(gzip on),但如果你试图用它来查看gzip_static是否打开它将只输出一个连字符...(使用nginx 1.2.6).但是,如果您打开gzip_static并关闭gzip并且内容编码是gzip,我认为您可以认为它正常工作 (2认同)