4. Nginx 服务器的 Gzip 压缩

  • 由ngx_http_gzip_module 模块处理的9 个指令

    该模块主要负责 Gzip 功能的开启和设置,对响应数据实时压缩

    • gzip 指令
      • 该指令用于开启或者关闭 Gzip 功能

        gzip on | off;

    • gzip_buffers 指令
      • 该指令用与设置 Gzip压缩文件使用缓存空间的大小

        gzip_buffers number size;

        • number 指定 Nginx 服务器需要向系统申请缓存空间的个数。
        • size 指定每个缓存空间的大小
      • 默认情况下 number*size 大小为 128 ,其中 size 的大小为系统内存一页的大小 4kb
    • gzip_comp_level 指令
      • 该指令用于设定 Gzip 的压缩程度,包括级别 1 到 9,1表示压缩程度最低,压缩效率最高
        • gzip_comp_level leve1(默认值为1)
    • gzip_disable 指令
      • 针对不同类型的客户端发起的请求,可以选择性的开启或者关闭 Gzip 的功能。

        gzip_disable regex ...

      • regex 的标识根据客户端浏览器的标志进行设置,支持正则表达式

        gzip_disable MSIE [4-6]\.

    • gzip_http_version 指令
      • 针对不同的 http 协议版本 选择性的开启或关闭 Gzip 的功能,该指令用于设置开启 Gzip 功能的最低 HTTP 版本
        • gzip_http_version 1.1(默认)
    • gzip_min_length 指令
      • 根据响应页面的大小,选择性的开启或者关闭 Gzip 功能
        • gzip_min_length length;(默认值为20,建议设置为1Kb,即1024)
    • gzip_proxied 指令
      • 该指令在使用 Nginx 反向代理功能时有效。主要用于设置 Nginx 服务器是否对后端服务器返回的结果进行 Gzip 压缩,该指令的语法结构为:

        gzip_proxied off|expired|no-cache | no_store | private | no_last_modified | no_etag | auth |any ...

      • 参数

           

    • gzip_types 指令
      • 根据响应页的 MIME 类型选择性的开启 Gzip 压缩功能,该指令用来设置 MIME 类型,被设置的类型将被压缩。

        gzip_types mime-type ...; (默认值为 text/html)

      • 该指令设置为 on 时, Nginx 会对所有的 text/html 类型页面进行压缩,设置为 * 时,表示对所有的 MIME 类型的页面进行 GZIP 压缩

      • gzip-vary
        • 该指令用于设置在使用 Gzip 功能时是否发送带有 "Vary: Accept-Encoding"头域的响应头部,该头域的功能时告诉接收方发送的数据进行了压缩处理,开启后在响应头部添加"Accept-Encoding:gzip"

          gzip_vary on | off 默认关闭

  • 由 ngx_http_gzip_stactic_module 模块处理的命令
    • 此模块主要负责搜索和发送经过 Gzip 功能预压缩的数据
      • 数据以 ".gz" 作为后缀储存在服务器上
      • 如果客户端请求的数据在之前压缩过,并且浏览器支持 Gzip 压缩,就直接返回压缩后的数据
    • 区别
      • ngx_http_gzip_stactic_module 使用静态压缩,在响应报头中指明长度。用于服务器可确定数据长度的情况。
      • ngx_http_gzip_module 使用动态压缩,适用于服务器无法确定响应数据长度的情况(如大文件下载)
    • 指令
      • gzip-static on|off|always;
        • on 开启
        • off 关闭
        • always 一直发送Gzip预压缩文件,而不检查客户端浏览器是否支持 Gzip 压缩
      • 其他指令与 ngx_http_gunzip_module 相同
        • 注:gzip_proxied 只接收以下指令

          gzip_proxied expired no-cache no-store private auth;

        • 该模块下的 gzip_vary 指令未压缩的内容添加 "Vary:Accept-Encoding"头域,而不是给所有内容都添加,如果需要给所有的响应头部添加该头域,可以通过 Nginx 配置的 add_header 指令实现
        • 该模块是可选模块,如需使用,必须在 Ningx 程序配置时添加 --with-http_gzip_static_module 指令
  • 由 ngx_http_gunzip_module 模块处理的 2 个指令
    • 简介
      • 对于没有能力解压及无法处理 Gzip 压缩数据的客户端,需要在 Nginx 服务器向其发送之前先将该数据解压,ngx_http_gunzip_module 模块用来对不支持 gzip 压缩数据处理的客户端浏览器,对压缩数据进行解压处理。
      • 当客户端不支持 gzip 时,使用该模块可解决数据解析问题,同时保证 Nginx 服务器 与后端服务器交互数据或者本身存储数据时任然使用压缩,减少服务器之间数据传输量,降低本地存储空间缓存使用率
      • 主要命令有以下几个:gunzip gunzip_buffers gzip_http_version、gzip_proxied gzip_disable gzip_vary 等
    • 指令
      • gunzip_static on|off
        • on 开启该功能
        • off 关闭该功能
        • 该指令默认关闭该功能,当功能开启时,如果客户端浏览器不支持 Gzip 处理,Nginx 将返回解压后的数据。如果支持,忽略该指令
      • gunzip_buffers number size;
        • number 指定 Nginx 服务器在对 Gzip 数据进行减压时需要向系统申请 number*size 大小的空间,默认情况下 number*size 的值为128。其中 size 的值也取系统内存页一页的大小 为 4KB 或者 8KB

          gunzip_buffers 32 4K|16 8K

      • 其他指令与 ngx_http_gzip_module 模块使用相同
    • 注意

      该模块为可选模块,如果要使用,必须在 Nginx 程序配置时添加 --with-http_gunzip_module 指令

  • 压缩模块的使用
    • 为了使 Nginx 服务器能够在全局范围内应用 Gzip 压缩功能,可将其放入 http 块中。
    • 要使各个虚拟主机差别性对待,可以将对应的 server 块中添加各自的 Gzip 指令
    • 对于少数的逆序主机差别性对待,也可以在 http 全局块中配置 Gzip 指令后在少数的 server 块中添加配置

  • 压缩模块使用注意事项
    • gzip 压缩功能与 IE6 浏览器运行脚本的兼容性问题
    • Nginx 服务器与其他服务器交互时产生的 gzip 压缩功能相关问题
      • 大多数 服务器产品都有 gzip 压缩的功能,对于包含了多层级服务器的系统,Nginx 如果作为前端服务器如果开启了 gzip 压缩功能,后端服务器最好不要再开启。
posted @ 2019-12-25 13:19  天上的白云真白呀  阅读(314)  评论(0编辑  收藏  举报