Nginx的Gzip压缩简单配置

  1. 云栖社区>
  2. 博客列表>
  3. 正文

Nginx的Gzip压缩简单配置

期待l 2018-08-07 14:44:00 浏览41991 评论0

摘要: ngx_http_gzip_module模块 主要负责Gzip功能的开启和设置,对相应数据进行实时压缩.gzip指令 用于开启Gzip功能 gzip on | off,默认为offgzip_buffers指令 用于设置Gzip压缩文件使用缓存空间的大小 gzip_buffers number...

ngx_http_gzip_module模块

  • 主要负责Gzip功能的开启和设置,对相应数据进行实时压缩.

gzip指令

  • 用于开启Gzip功能

    • gzip on | off,默认为off

gzip_buffers指令

  • 用于设置Gzip压缩文件使用缓存空间的大小

    • gzip_buffers number szie
    • number指定服务器需要向系统申请缓存空间的个数
    • szie指定每个缓存空间的大小

gzip_comp_level

  • 用于指定Gzip压缩程度,1到9,从压缩率最低到最高,压缩时间是从最快到最慢

    • gzip_comp_level level,默认为1

gzip_disable

  • 针对不同种类客户端发起的请求,可以选择性关闭或开启Gzip

    • gzip_disable regex ...
    • regex根据客户端的浏览器标志User-Agent进行设置,支持使用正则表达式
  • 常见的浏览器标志
    ug3

ug2
ug1

  • User-Agent可以更改所以实际情况还要具体分析

    • gzip_disable MSIE [4-6]\.:表示可以匹配MSIE 4,MSIE 5,MSIE 6的所有浏览器,响应他们的时候Nginx不进行Gzip压缩

gzip_http_version

  • 早期的浏览器或http客户端有的不支持gzip.会显示乱码,所以针对不同http协议版本,需要选择性的开启或关闭Gzip功能

    • gzip_http_version 1.0|1.1:用于设置开启Gzip功能最低Http协议版本,默认1.1

gzip_min_length

  • 设置页面的字节数,当响应页面的大小小于配置值时,才启用Gzip,响应页面的大小通过Http响应头部中的Content-lenth获取.
  • 为什么使用这个配置:因为如果太小的字节压缩后反而因为添加头而变得更大了

    • gzip_min_length 1024默认20,设置为0时不管响应页面大小如何通通压缩

gzip_proxied

  • 在使用Nginx服务器的反向代理功能时有效,前提是在后端服务器返回的响应页头部中,Requests部分包含用于通知代理服务器的Via头域,主要用于设置Nginx服务器是否对后端服务器返回的结果进行Gzip压缩

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

      • off:关闭nginx对后端服务器返回结果的Gzip压缩,默认
      • expired:当后端服务器响应页头部包含用于指示相应数据过期时间的expired头域时,启用对响应数据的压缩
      • no-cache:当后端服务器响应页投不包含用于通知所有缓存机制是否缓存的Cache-Control头域,且其指令之为no-cache时,启用对响应数据的压缩
      • no-store:当后端服务器响应页投不包含用于通知所有缓存机制是否缓存的Cache-Control头域,且其指令之为no-store时,启用对响应数据的压缩
      • private:当后端服务器响应页投不包含用于通知所有缓存机制是否缓存的Cache-Control头域,且其指令之为private时,启用对响应数据的压缩
      • no_last_modified:当后端服务器响应页头部不包含用于指明需要获取数据最后修改时间的Last-Modified头域时,启用压缩
      • no_etag:当后端服务器响应页头部不包含用于标示被请求变量的实体值的ETag头域时,启用压缩
      • auth:当后端服务器响应页头部包含用于标示HTTP授权证书的Authorization头域时,启用压缩
      • any:无条件全部压缩
    • 看的一脸懵逼,,我的先去了解一下HTTP Header消息了..
      [https://en.wikipedia.org/wiki/List_of_HTTP_header_fields]()

[https://blog.csdn.net/phone13144830339/article/details/80176934]()
[https://blog.csdn.net/u014175572/article/details/54861813/]()

gzip_types

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

    • gzip_types mime-type ,默认text/html

gzip_vary

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

    • gzip_vary on|off,默认off
    • 强制服务器在响应头部添加"Vary:Accept-Enconding":add_header Vary Accept-Enconding gzip

ngx_http_gzip_static_module模块处理的指令

  • 主要负责搜索和发送经过Gzip功能与压缩的数据,这些数据以".gz"为后缀名存储在服务器上,如果客户端请求的数据在之前被压缩过,并且客户端浏览器支持Gzip压缩,就直接返回压缩后的数据
  • 该模块与ngx_http_gzip_module模块不同的是:该模块使用的静态压缩,在HTTP响应头部包含Content-Length头域来指明包文体的长度,用于服务器可确定相应数据长度的情况,而后者默认使用Chunked编码的动态压缩,主要适用于服务器无法确定相应数据长度情况

gzip_static

  • 用于开启和关闭该模块,该模块是可选的,使用必须进行配置--with-http_gzip_static_module

    • gzip_static on|off|always

      • always一直发送Gzip预压缩文件,而不检查客户端浏览器是否支持Gzip压缩
    • 另外对于该模块下的gzip_vary指令,开启后只给未压缩的内容添加"Vary:Accept-Enconding"头域,而不是对所有内容都添加,如果都添加就add_header Vary Accept-Enconding gzip

ngx_http_gunzip_module

  • 用来针对不支持Gzip压缩数据处理的客户端浏览器,对压缩数据进行解压处理的

gunzip

  • 可选模块,必须在Nginx配置--with-http-gunzip_module
  • 用于开启和关闭

    • gunzip on|off,默认off
    • 功能开启时,如果客户端浏览器不支持Gzip处理,服务器将解压后的数据返回,如果客户端支持Gzip,Nginx服务器忽略该指令的设置,返回压缩数据

gunzip_buffers

  • 跟gzip_buffers是一样的,
  • 其他的指令和ngx_http_gzip_module下的模块使用方法一样

Gzip的使用

  • 烦人的配置列的差不多了,下面是一个简单的配置实例

    user  root;
    worker_processes  1;
    error_log  /var/log/nginx/error.log warn;
    pid        /var/run/nginx.pid;
    events {
        worker_connections  1024;
    }
    http {
        gunzip on;                #gunzip开启
        gzip on;                  #gzip开启
        gzip_min_length 1024;     #响应页数据上限,当指定的响应资源大于1k时压缩
        gzip_buffers 4 16k;       #缓存空间大小 4*16k=64k
        gzip_comp_level 2;        #压缩级别2
        gzip_types text/plain application/x-javascript text/css application/xml;  #压缩源文件类型
        gzip_vary on;             #检查预压缩文件
        include       /etc/nginx/mime.types;
        default_type  application/octet-stream;
        log_format  main '$http_user_agent' '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
        access_log  /var/log/nginx/access.log  main;
        sendfile        on;
        #tcp_nopush     on;
        keepalive_timeout  65;
        include /etc/nginx/conf.d/*.conf;
    }
    • 放在http块中,就能够在全局范围内应用Gzip压缩功能,如果需要在server中不使用Gzip,就直接在server中配置gzip off不需要更改http块

Nginx与其他服务器交互时产生的Gzip压缩功能问题

  • 产生问题原因:

    • 问题一:多层服务器同时开启Gzip压缩功能
    • 问题二:多层服务器之间对Gzip压缩功能支持能力不同导致
  • 问题一:如果Nginx开启了压缩,后端服务器就不要再开启了,否则会导致客户端浏览器在刷新过程中数据下载不完整的问题发生

用云栖社区APP,舒服~

【云栖快讯】诚邀你用自己的技术能力来用心回答每一个问题,通过回答传承技术知识、经验、心得,问答专家期待你加入!  详情请点击

网友评论

期待l
文章9篇 | 关注0
关注
用配置管理(Application Configuration Management,简称 ... 查看详情
面向阿里云ECS实例、HPC和Docker的文件存储服务。 查看详情
用于实时预测用户对物品偏好,支持企业定制推荐算法,支持A/B Test效果对比 查看详情
为您提供简单高效、处理能力可弹性伸缩的计算服务,帮助您快速构建更稳定、安全的应用,提升运维效... 查看详情
阿里云总监课正式启航

阿里云总监课正式启航