怎么看nginx的gzip_static是否生效

我已经把gzip static module编译进去了,然后如下配置

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;

然后js和css的gz包也和源文件放到同个目录了,但是我日志里看不到对gz的访问,有没有什么方法可以确认,nginx确实使用gz包了?

阅读 20.7k
3 个回答

首先判断content-encoding: gzip
有表示开启了gzip;没有表示没开启gzip;

有的情况下
再看看Etag有没有W\,
有:代表服务器在线压缩
没有:表示拿了.gz,说明gzip_static生效了

curl -I -H "Accept-Encoding: gzip,deflate" http://segmentfault.com/

HTTP/1.1 200 OK
Server: nginx/1.2.3
Date: Mon, 08 Oct 2012 09:14:20 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Vary: Accept-Encoding
Set-Cookie: sfsess=5072996cb0a46.21449a2b25cb6e546fe695a152ddc5b5; expires=Tue, 09-Oct-2012 09:14:20 GMT; path=/
Content-Encoding: gzip

gzip_static 生效的前提是nginx开启了gzip_static压缩并且请求目录下存在名称相同且以.gz 结尾的文件。

使用 gzip_static 压缩的话要先准备好压缩后的 gz 文件,并且服务器会消耗更多的空间来存储压缩文件和原文件,这个有利有弊要自己衡量。

在 linux 下可以使用命令来创建压缩文件:
tar -zcvf xx.gz xx

tar -zxvf xx.gz 这个是解压文件

如何查看gzip_static on命令是否生效呢?

配置:

server {
    gzip on;
    gzip_static on; #开启
    gzip_http_version 1.1;
    gzip_disable "MSIE [1-6]\.";
    gzip_vary on;
    gzip_proxied expired no-cache no-store private auth;
    gzip_types text/css; #这里text/css必须有,其他的按需要添加
    
    # ...其他配置
}

准备文件:

$ ls -l *0c3628cca1*
-rw-r--r--  1 djw  staff  308698  4 11 20:29 styles-0c3628cca1.css
-rw-r--r--  1 djw  staff   49123  4 28 14:15 styles-0c3628cca1.css.gz

发起请求:

curl -I -H "Accept-Encoding: gzip, deflate" http://test.local/styles-0c3628cca1.css

HTTP/1.1 200 OK
Server: nginx/1.13.12
Date: Sat, 28 Apr 2018 06:30:33 GMT
Content-Type: text/css
Content-Length: 49123
Last-Modified: Sat, 28 Apr 2018 06:15:43 GMT

看下面的:
Content-Type: text/css
Content-Length: 49123
是不是跟这个一样:-rw-r--r-- 1 djw staff 49123 4 28 14:15 styles-0c3628cca1.css.gz

文件大小一个字节都不差!!!

不用谢我叫雷锋!

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题