Nginx之gzip压缩
1. nginx gzip压缩介绍
nginx gzip压缩模块提供了压缩文件内容的功能,服务器在响应客户端请求之前,会根据一些具体的策略实施压缩,以节约网站出口带宽,同时加快数据传输效率,提升用户体验。
2. nginx gzip压缩的优点:
1. 提升用户体验。
2. 节约网站带宽成本。
3. 压缩的对象:
1. 纯文本压缩比很高。例如:html,js,css,xml,shtml等格式的文件。
2. 被压缩的纯文本文件必须要大于1KB,由于压缩算法的特殊原因,极小的文件压缩后可能反而变大。
3. 图片视频等文件尽量不要压缩,因为这些文件大多是都是经过压缩的,再一次压缩也不会减小,反而可能增大,同时压缩还会消耗服务器的CPU和内存。
4. 参数配置及配置说明
nginx的gzip压缩依赖于ngx_http_gzip_module模块。默认已经编译安装到nginx的core模块中。
    ngx_http_gzip_module模块主要负责gzip功能开启和设置,对响应数据进行在线实时压缩。
gzip可以配置在http,server,location模块中。
可以根据实际情况,看看设计到哪个模块里面比较合适。
压缩配置如下:
gzip on; 开启gzip压缩功能
gzip_min_length 1k; 如果文件超过1k,才进行压缩;如果为0,不管多大都进行压缩。如果使用的Chunk编码动态压缩,这个不起作用。
gzip_buffers 4 16k; 表示申请4个16k的内存空间作为缓存。默认情况下number*size的值为128,其中size的值大小取决于内存页一页的大小,为4KB或者8KB。
gzip_http_version 1.1; 这个一定要注意,默认为1.1;
在应用服务器前,公司还有一层Nginx的集群作为七层负责均衡,在这一层上,是没有开启gzip的。 
如果我们使用了proxy_pass进行反向代理,那么nginx和后端的upstream server之间默认是用HTTP/1.0协议通信的。 
如果我们的Cache Server也是nginx,而前端的nginx没有开启gzip。 
同时,我们后端的nginx上没有设置gzip_http_version为1.0,那么Cache的url将不会进行gzip压缩。 
              
gzip_comp_level 2; 压缩比率。 使用1或者2,就可以了。比率越高,越耗性能。
gzip_types text/css text/xml application/javascript 默认text/html总是会被压缩。
gzip_vary on; 增加响应头Vary: Accept-Encoding
gzip_disable MSIE [4-6]\. 当客户端浏览器为IE4/5/6的时候,对响应数据不进行压缩。
5. nginx压缩配置效果检查
使用谷歌浏览器的F12,进行检查,得到的响应头,如下:
         
6. ngx_http_gzip_static_module模块(这是nginx的可选模块,需要在编译的时候添加--with-http_gzip_static_module)
功能:主要负责搜索和发送经过Gzip功能预压缩的数据。这些数据以.gz为后缀存储在服务器上。
区别:这个模块与ngx_http_gzip_module的区别,该模块使用的是静态压缩,而后者是动态压缩;该模块知道响应体的大小,而后者不确定。
启用:gzip_static on | off |always
on:启用
off:关闭
alway:一直发送gzip预压缩文件,而不检查客户端是否支持gzip压缩。
7. ngx_http_gunzip_module模块(这个是nginx的可选模块,需要在编译的时候添加--with-http_gunzip_module)
功能:针对不支持gzip压缩数据处理的客户端浏览器。如果客户端不支持gzip,nginx服务器将返回解压后的数据;如果客户端支持gzip处理,nginx服务器仍然返回压缩数据。
启用:gunzip_static on | off
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号