首页 > 代码库 > nginx学习之压缩解压篇(七)

nginx学习之压缩解压篇(七)

1.简介

压缩响应可以减少传输数据的大小,节省带宽。但过多的压缩会造成很大的处理开销。在发送给客户端之前,nginx会对响应做压缩,但是如果后端服务器已经

压缩过了,nginx就不再压缩。

 

2.开启压缩

 

server {
    gzip on;
    gzip_types      text/plain application/xml;
    gzip_proxied    no-cache no-store private expired auth;
    gzip_min_length 1000;
    ...
}

 

nginx默认只压缩MIME类型为text/plain的响应,使用gzip_types指定额外的压缩类型。

gzip_min_length:nginx会检查响应头中的Content-length,如果大于1000字节,就压缩,如果小于1000字节,就不压缩。

gzip_proxied:假如用户与nginx之间隔了一层代理服务器(用户的代理服务器),代理服务器发送请求到nginx,nginx将请求转发给后端服务器,后端服务器接收到响应后,不对响应做压缩,直接返回给代理服务器。通过gzip_proxied指令来配置如何对这种响应做压缩。

 

用户-----代理服务器----------nginx-----后端服务器

我们是根据请求中的Via头字段知道这个请求是来自代理服务器的。

gzip_proxied有多个参数,用于声明哪些类型的请求对应的响应需要压缩。

上面的例子中表示:

如果响应中的Cache-Control字段的值为:no-cache,no-store,private,就压缩这个响应,因为它不会缓存在用户的代理服务器上。

expired参数表示nginx会去检查响应中的Expired头字段。

auth参数表示nginx会去检查响应中的Authorization头字段。一个经过授权的响应是不能在代理服务器上缓存的,必须给终端用户。

 

配置压缩的指令可以写在http块中,可以写在server块中,可以写在location块中。

 

3.开启解压缩

由于有的客户端可以识别压缩的响应,有的客户端无法识别压缩的响应,所以就需要分别对待。

 

开启运行时解压缩,也就是在传输前进行压缩,在发送的过程中进行解压缩?

 

location /storage/ {
    gunzip on;
    ...
}

 

注意:解压缩指令在预编译的开源的nginx中没有,它属于一个单独的模块,需要编译到nginx中去。

 

4.尽量发送压缩过的静态文件

location / {
    gzip_static on;
}

 

对于请求/path/to/file,nginx会尝试先寻找/path/to/file.gz,找到后就发送出去,如果没有找到,或者客户端不支持gzip,那么就只能发送

/path/to/file了。

gzip_static的意思是提前压缩好静态文件。

注意:解压缩指令在预编译的开源的nginx中没有,它属于一个单独的模块,需要编译到nginx中去。

nginx学习之压缩解压篇(七)