开启Nginx的gzip压缩功能详解

默认情况下,Nginx的gzip压缩是关闭的。开启gzip压缩功能不仅能够节省带宽,也能够快速响应用户的访问,但是会增加服务器CPU的开销。Nginx默认只对text/html进行压缩,如果要对html之外的内容进行压缩传输,我们需要手动来调。
开启gzip的指令如下:

gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
#gzip_http_version 1.0;
gzip_comp_level 3;
gzip_types text/plain application/x-javascript text/css text/javascript;
gzip_disable "MSIE [1-6]\.";
gzip_proxied any;

指令解释:
gzip:gzip启用开关
gzip_min_length:启用压缩的最小临界值,大于1K才启用压缩,如果页面过于小,可能会越压越大
gzip_buffers:设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流
gzip_http_version:nginx 做前端代理时启用该选项,表示无论后端服务器的headers头返回什么信息,都无条件启用压缩
gzip_comp_level:压缩级别[1-10],数字越大压缩比越大,但处理最慢,同时也最消耗CPU,一般设置为3就可以了
gzip_types:需要压缩的文件mime类型
gzip_disable:不启用压缩的条件,IE6对Gzip不友好,所以不压缩
gzip_proxied:nginx做前端代理时启用该选项,表示无论后端服务器的headers头返回什么信息,都无条件启用压缩

关于 gzip_types ,如果你想让图片也开启gzip压缩,使用下面的参数
gzip_types text/plain application/x-javascript text/css text/javascript application/x-httpd-php image/jpeg image/gif image/png;
一般文档类型使用
text/plain text/css application/x-javascript application/javascript application/xml;

注意:

  1. gzip_http_version 的设置,它的默认值是1.1,就是说对HTTP/1.1协议的请求才会进行gzip压缩。
    如果我们前端使用了Nginx反向代理做Cache Server,那么前端cache server和后端的upstream server之间是用HTTP/1.0协议通信的。此时,前端cache server如果没有开启gzip压缩,同时,后端的nginx上没有设置gzip_http_version为1.0,那么Cache的url将不会进行gzip压缩。

    This module makes it possible to transfer requests to another server.
    It is an HTTP/1.0 proxy without the ability for keep-alive requests yet. (As a result, backend connections are created and destroyed on every request.) Nginx talks HTTP/1.1 to the browser and HTTP/1.0 to the backend server. As such it handles keep-alive to the browser.

  2. gzip_disable 的设置,这里是禁用IE6的gzip压缩,杯具的IE6某些版本对gzip的压缩支持很不好,会造成页面的假死。今天产品的同学就测试出了这个问题,后来调试后,发现是对img进行gzip后造成IE6的假死,把对img的gzip压缩去掉后就正常了,为了确保其它的IE6版本不出问题,所以就加上了gzip_disable的设置。

如需转载,请注明出处: https://chadou.me/p/186

最新发布