前言
HTTP中包体【body】压缩协商对应的头字段为Accept-Encoding/Content-Encoding。对于HTTP包体压缩,Nginx的ngx_http_gzip_module模块提供了动态gzip压缩功能,并且有很精细的控制。
包括:
开启关闭gzip压缩: gzip on|off 对指定类型的文件进行压缩: gzip_types 文件最小压缩阈值: gzip_min_length 设置压缩率: gzip_comp_level 查看压缩率: $gzip_ratio 是否插入Vary: Accept-Encoding头字段: gzip_vary 禁止指定浏览器使用压缩:gzip_disable 是否对代理请求响应压缩:gzip_proxied关于Nginx gzip基本功能,其语义,逻辑,配置和使用都相当简单,网上相关文章也很多,本文不再赘述,具体细节可以参看下文的配置实例及说明。本文将重点讨论其中的gzip_proxied指令的语义和使用,其涉及若干个参数,特定的应用场景,最为复杂,且网上文章涉及不多。
语义:
gzip_proxied的基本逻辑是对于代理请求,根据请求及回应的头字段决定是否压缩响应包体。判断的依据是请求头中是否携带Via头字段。
如:
拓扑:
对应的典型网络拓扑如下:
client — proxy1 — proxy2 — … proxyn — reverse proxy — origin web
我们的配置点在reverse proxy上, 也就是企业提供对外WEB服务的边缘的反向代理服务器。通常,proxyx会通过Via头字段标记消息自己的版本号和名称,从而形成了一条有序的消息路径,方便排错。
这是一个取自京东首页的Via字段的值,表示博主访问京东首页中间经过了2台代理服务器。
仿真:
我们可以通过在curl中添加头字段Via,模拟该场景。
验证:
响应包体是否压缩,可以curl -I查看响应头中是否有Content-Encoding: gzip
如:
压缩率可以查看log
其中5.16就是压缩率
本文使用的是nginx 1.20.1, 客户端工具是curl 7.61.1, 测试文件为200_accept_encoding.css,可自行选择任意文件测试。
gzip_proxied的参数解析:
off gzip_proxied的缺省参数是off,语义是不对代理请求的回应进行压缩。 any 对任意代理请求回应压缩,语义正好和off相反。 expired 如果回应中包含头字段Expires,并且其值响应导致不会缓存,则压缩。因此可以构造缓存不过期,缓存过期2种场景,分别验证。回应中添加Expires头字段可以用expires指令。注:响应中需要显示地携带Cache-Control头字段,如果不包含则压缩。
响应中添加Cache-Control头字段用add_header指令
可以同时设置多个gzip_proxied条件:
add_header也可以为Cache-Control设置多个值,对于这种有冲突的Cache-Control设置,以最严格的限制为准,如本例是no-store生效。
ETag默认打开,用etag off可以关闭。
#未找到关闭last_modified的方法,abort。
auth 语义是请求中包含Authorization时压缩配置下面2条指令可以仿真基本网页认证:
小结:
gzip_min_length的优先级高于gzip_proxied,如果由于gzip_min_length的设置导致不压缩,则gzip_proxied即使满足压缩条件也不会压缩。 上述gzip_proxied的参数,除auth是看请求头字段,其它都是看响应头字段。 off, any是一对互斥参数,表达了对代理请求是全部不压缩,或全部压缩两种相反的语义。 no-cache,no-restore,priviate,no_etag,no_last_modified,都和缓存相关,表达的语义可以归纳为如果响应不缓存,则压缩,其区别只在于判断的条件的差异,当然,也可以一次性都设置上。那么为何响应不缓存就压缩呢?官方文档没有描述,博主推测和使用场景有关。
a. 不缓存意味着不会在代理服务器上保留响应副本,那么应该尽早在消息源头压缩,减少链路上的带宽消耗。
b. gzip是CPU密集型的使用,如果响应缓存,则可以选择在下游代理服务器上启用压缩,从而分担上游服务器的压力。下面是具体的配置,实践实践再实践才是理解和领会相关指令和参数最有效的方法。
配置文件:
参考:ngx_http_gzip_module
总结
到此这篇关于一篇文章读懂nginx中gzip功能的文章就介绍到这了,更多相关nginx gzip功能内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://blog.csdn.net/weixin_45462681/article/details/122999112