Nginx gzip模块提供了压缩文件内容的功能,用户请求的内容在发送到用户客户端之前,nginx会根据一些具体的策略实施压缩,以节约网站出口带宽,同时加快数据传素效率,提升用户体验。
优点:
发送给用户的内容变小了,用户访问页面的速度快了,提升用户体验。
节约带宽成本。
缺点:
额外浪费一些cpu资源。
需要和不需要压缩的对象:
纯文本内容压缩比例很高,因此纯文本的内容最好进行压缩,例如html, js, css, xml, shtml。
被压缩的纯文本文件最好大于1KB,由于压缩算法的特殊原因,极小的文件压缩后可能反而变大。
图片、视频一般都经过压缩,因此不再建议压缩,不再额外耗费cpu。
gzip相关参数:
gzip on; #开启gzip压缩功能
gzip_min_length 1k; #默认为0,表示不管页面多大都进行压缩,建议设置成大于1k, 如果小于1k可能会越压越大gzip_buffers 4 32k; #压缩缓冲区大小,表示申请4个单位为16k的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果
gzip_http_version 1.1; #压缩版本,前端为squid2.5时使用1.0, 用于设置识别HTTP协议版本,默认时1.1,目前大部分浏览器已经支持GZIP解压,使用默认即可
gzip_comp_level 2; #压缩比例,1压缩比最小,处理速度最快;9压缩比最大,传输速度快,但处理慢,也比较耗CPU
gzip_types text/css text/html application/javascript; #指定压缩的类型,text/html类型总是会被压缩,这个就是HTTP原理部分讲的媒体类型
gzip_vary on; #vary header支持,该选项可以让前端的缓存服务器缓存经过gzip压缩的页面,例如用squid缓存经过nginx压缩的数据
完整的配置如下:
注意:不同的nginx版本中,gzip_types的配置可能会有不同,对应的文件类型,请查看conf/目录下的mime.types文件
gzip on;
gzip_min_length 1k;
gzip_buffers 4 32k;
gzip_http_version 1.1;
gzip_comp_level 3;
gzip_types text/css text/html text/xml application/javascript;
gzip_vary on;
curl -I -H "Accept-Encoding: gzip,deflate" http://127.0.0.1/index.html
gzip效果检查,大部分浏览器的debug功能均可看到压缩前后的数据传输大小。