Nginx 的压缩输出配置

     gzip(GNU -ZIP) 是一种压缩技术。经过gzip压缩后页面大小可以变为原来的30%设置更小。现在浏览器都支持gzip压缩,在HTTP请求中发送一行 "Accept-Encoding: gzip, deflate", 这时候Nginx 服务器可以输出经过gzip 压缩后的页面给浏览器,浏览器再解压。 这可以将网络线路上传输的大量数据消减60%以上,不仅节省了服务器的带宽,也加速了单位数据传输速率,加速了用户的下载体验!!!
    Nginx 服务器通过ngx_http_gzip_module 模块、ngx_http_gzip_static_module 模块和ngx_http_gunzip_module 模块对这些指令进行解析和处理。
   ngx_http_gzip_module 模块处理的9个指令:
    gzip                         on | off;
    gzip_buffers            32  4k  |  16  8k;
    gzip_comp_level     2 ;
    gzip_disable            "MSIE[1-6]\.";
    gzip_http_version    1.0 | 1.1;
    gzip_min_length      1024;
    gzip_proxied
    gzip_types
    gzip_vary                  on | off;
   
    ngx_http_gzip_static_module 模块用来搜索和发送经过Gzip功能预压缩的数据,如果客户端请求的数据在之前被压缩过,且客户端浏览器支持Gzip压缩,就直接返回压缩后的数据。处理的指令:
    gzip_static                 on  | off  | always;
   
    ngx_http_gunzip_module  模块用来对不支持Gzip压缩数据处理的客户端浏览器,对压缩数据进行解压处理的。处理的2个指令:
    gunzip_static               on  |   off ;
    gunzip_buffers            32 4k |  16 8k;

    gzip 压缩指令位于 http{...} 两个大括号之间:
    http {
           
            gzip   on                                                                                                  # 开启gzip 功能
            gzip_min_length     1000;                                                                        # 响应页数据上限
            gzip_buffers            4 8k;                                                                        # 缓存空间大小  4 个空间 , 每个空间大小 8k
            gzip_comp_level     2;                            # 压缩级别为2 。 级别从1-9,1 压缩程度最低,效率高,9 压缩程度最高,压缩效率最低
            gzip_http_version   1.1;                                                                          # 开启Gzip功能的最低http 协议版本
            gzip_types text/plain application/x-javascript text/css application/xml;      # 压缩源文件类型
            gzip_vary                on ;                           # 启用压缩标识,告诉接收方发送的数据经过了压缩处理, Vary:Accept-Encoding:gzip
            gzip_static               on ;                          # 检查预压缩文件
            gzip_disable          "MSIE[1-6]\.";             # 当客户端浏览器是IE 1-6 时 不使用Gzip压缩, ie6 对 Gzip 支持不太好 
    }

   Nginx 与其他服务器交互时Gzip 压缩功能的注意:
   1、 对于多层服务器的系统来说,Nginx 服务器作为前端服务器如果开启了Gzip压缩功能,后端服务器最好就不要开启了,否则会导致客户端浏览器在刷新过程中数据下载不完整的问题发生。
   2、Squid 服务器通常被用作Web 缓存服务器,3.0版之前的Squid 服务器 对 http 1.1 的 支持 不是特别 完善,它仅支持静态压缩,要求HTTP响应头中必须包含Content-length 头域, 不能使用 Chunked 编码, 但 Nginx 使用 ngx_http_gzip_module 模块实现Gzip 压缩功能情况居多,该模块默认使用 Chunked 编码进行动态压缩,于是就导致了问题。
     这就要 开启 Nginx 的 ngx_http_gzip_static_module 模块的功能:
     gzip_static     on;
     gzip_http_version    1.0;
     add_header    Vary Accept-Encoding  Gzip;