Nginx中gzip配置:
一、作用:
- 减少从服务器下载的文件和
请求的资源大小
,大幅提高页面加载速度。
二、原理:
浏览器------请求-------> 声明可以接收gzip压缩 ;或者deflate压缩;或compress压缩;或sdch压缩
- 从http协议的角度看----请求头 声明:acceopt-encoding: gzip deflate sdch[是指压缩算法, 其中sdch是google倡导的一种压缩方式 ]
服务器---> 回应----把内容用gzip方式压缩-------->发给浏览器-接收gzip压缩内容----解码gzip---->浏览观看
三、gzip配置的常用参数:
- 1:其中
gzip可以为on 或者off, 它告诉nginx是否采用gzip压缩的形式来发送数据
,启动压缩将会减少我们发送的数据量。 - 2:其中
gzip_disable为指定的客户端禁用gzip功能
,通常我们设置为IE6,这样可以使得我们方案能够广泛兼容,这里Nginx是正则匹配。 - 3:其中
gizp_vary和代理有关
,如果设置为on的话,它会再Header里面增加Vary头部。 - 4:其中
gzip_proxied是Nginx作为反向代理的时候启用
,如果设置为off则关闭所有的代理结果数据压缩,用any表示无条件压缩所有数据结果。 - 5:其中
gzip_comp_level则是设置压缩等级
,等级越低其压缩速度越快,它的压缩比也越小,它的值可以是从1到9。- 关于
gzip_comp_level
注意事项:- 随着压缩级别的升高,压缩比有所提高,但到了级别6后,很难再提高;
- 随着压缩级别的升高,处理时间明显变慢;
gzip很消耗cpu的性能,高并发情况下cpu达到100%;
- 建议:
- 不是压缩级别越高越好,其实gzip_comp_level 1的压缩能力已经够用了,后面级别越高,压缩的比例其实增长不大,反而
很吃处理性能
。
- 不是压缩级别越高越好,其实gzip_comp_level 1的压缩能力已经够用了,后面级别越高,压缩的比例其实增长不大,反而
- 关于
- 6:其中
gzip_buffers则是设置gzip申请内存的大小
,其作用是按块大小的倍数申请控件。通常第一个参数是申请几个块,第二个参数则是一个块的大小是多少。 - 7:其中
gzip_http_version则是用于识别http协议的版本
,这个主要是兼容最早期的浏览器
,由于之前很多浏览器是不支持gzip压缩的,因此用户会看到乱码
,不过目前基本上所有浏览器都支持gzip压缩了,因此该参数可以忽略。- 如果这里配置的是1.1的话,可能再配置nginx和后端的upstream server的时候会发现gzip没有开启
因为nginx和后端的upstream server之间默认是用HTTP/1.0协议通信的
- 建议:这里使用1.0
- 如果这里配置的是1.1的话,可能再配置nginx和后端的upstream server的时候会发现gzip没有开启
- 8:
gzip_min_length 最小压缩临界值
(默认是20字节)。- 当返回内容大于此值时才会使用gzip进行压缩,以K为单位,当值为0时,所有页面都进行压缩。
- 9:而
gzip_types则是设置需要压缩的mime类型
,没有设置的值是不会进行压缩的。 - 注意:图片/mp3这样的二进制文件,不比压缩
- 因为压缩率比较小, 比如100->80字节,而且压缩也是
耗费CPU资源的
,比较小
的文件不必压缩
- 因为压缩率比较小, 比如100->80字节,而且压缩也是
四、Nginx服务器上配置gzip:
-
首先进入服务器打开nginx.conf配置文件。
-
vim /etc/nginx/nginx.conf
:打开总的配置文件再http{ }
括号下添加:gzip on; gzip_disable "msie6"; gzip_vary on; gzip_proxied any; gzip_comp_level 1; gzip_buffers 16 8k; gzip_http_version 1.0; gzip_min_length 256; gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/vnd.ms-fontobject application/x-font-ttf font/opentype image/svg+xml image/x-icon image/jpeg image/gif image/png;
- 为什么再nginx.conf主配置项中添加,而不去conf.d的目录中给每个配置项创建?
- 因为该conf.d目录中所有的配置项中的都需要开启gzip, 所以再主配置项中添加即可。
- 为什么再nginx.conf主配置项中添加,而不去conf.d的目录中给每个配置项创建?
-
再nginx.conf添加完,使用
命令
:wq: 保存vim 打开nginx.conf 配置项中的内容
nginx - t
:检查配置项是否正确nginx -s reload
:平缓重启nginx 服务器
-
五、打开浏览器进行对比:
首先查看没有配置过gzip:
- 把gzip on; 改为
gzip off
关掉 - 请求该网址,打开开发者工具:
- 可以看到请求资源的大小是4.2KB
- 把gzip off 改为
gzip on
打开: - 发起同样的请求,打开开发者工具:
- 可以看到请求资源的大小是2.0KB
- 打开
Response Headers
: