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中去。