Nginx gzip_static模块 避免零拷贝失效

 

gzip_static on|off


nginx对于静态文件的处理模块:
 该模块可以读取预先压缩的gz文件,这样可以减少每次请求进行gzip压缩的CPU资源消耗。该模块启用后,nginx首先检查是否存在请求静态文件的gz结尾的文件,如果有则直接返回该gz文件内容。为了要兼容不支持gzip的浏览器,启用gzip_static模块就必须同时保留原始静态文件和gz文件。这样的话,在有大量静态文件的情况下,将会大大增加磁盘空间。我们可以利用nginx的反向代理功能实现只保留gz文件。
 

使用sendfile指令如果需要对磁盘当中的内容做gzip压缩作为http body发送给客户端sendfile就会退化,sendfile功能就没有了,需要使用gzip static模块(sendfile作为0拷贝,但是我们一定要做压缩,那么一定要读到磁盘当中)

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

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

猜你喜欢

转载自blog.csdn.net/qq_34556414/article/details/106938178