Nginx的gzip相关介绍


Posted in Servers onMay 11, 2022

简介

GZIP顾名思义,就是将文件压缩传输。图片、视频、大文件不建议使用压缩,压缩需要占用你的服务器资源,压缩完效果也不大。文章出现很多图片的话,我建议使用图床来存放你的图片。文章给大家介绍Nginx的gzip指令。

说一段废话

压缩响应数据有什么作用呢?问的好:从用户体验和IT成本两方面回答这个问题:

  • 用户体验上

网速一定的情况下,传输5MB数据比传输10MB数据的时间快了一半。所以传输数据越小用户加载页面就越快,当然相比较之下体验会更好。

  • IT成本上

对这个场景来说的成本主要是带宽成本, 数据不压缩那么传输这些数据相应的带宽肯定更大,对比之下压缩耗费的CPU资源在带宽费用上不值一提。

所以你有什么理由不用压缩呢?

背景

当然Nginx也提供了gzip的压缩方式可以使用,但是在日常的工作中我发现或多或少在使用上有些问题,有点像:用了但又好像没用的感觉。 这篇就记录一下gzip的使用方式和易错点。

指令介绍

gzip

gzip指令来自 ngx_http_gzip_module 模块,提供的核心能力就是压缩响应数据。

该模块下提供的指令如下:

gzip                on;     # 开启gzip
gzip_comp_level     6;      # 压缩等级:1-9 1:压缩最快/CPU消耗最少/压缩率最低 以次类推
gzip_min_length     1000;   # 小于此大小的数据不压缩(单位字节/byte);数据来源"Content-Length"头
gzip_buffers        32 4k;  # 压缩响应的缓冲区数量和大小(4K 内存页大小取决于平台)
gzip_proxied        any;    # 对代理的请求是否开启压缩
gzip_types text/plain application/xml application/javascript application/x-javascript text/css application/json;    # 哪些类型的数据需要被压缩
gzip_disable     "MSIE [1-5]\.";    # User-Agent 被正则匹配到的不开启压缩
gzip_vary on;               # 当gzip对请求生效时会被添加一个响应头 "Vary: Accept-Encoding"

tips:

  1. gzip 是动态压缩: 每个请求在被响应时都会在gzip逻辑内走一遍
  2. 压缩等级不是越高越好: 压缩到一定程度后就会吃力不讨好, 从js的测试来看性价比最高的级别是 5或6
  3. buffer大小设置最好是和平台的内存页保持一致: getconf PAGE_SIZE
  4. gzip_types不要瞎写: 写压缩率大的(css/js/xml/json/ttf), image图片就不要写了,压缩空间太小,又耗CPU

gzip_static

gzip_stati指令来自 ngx_http_gzip_static_module模块,提供的核心能力是静态/预压缩

该模块提供的指令如下:

gzip_static on|off|always;  # always: 不管客户端是否支持压缩我他妈全部给你压缩之后给你

 

tips:

  1. 可以复用gzip_module中以下的指令:

gzip_http_version, gzip_proxied, gzip_disable, gzip_vary

  1. gzip_static是静态压缩:意思是你的服务端需要同时存在源文件和使用gzip压缩后的源文件,这时请求的时候会优先吧压缩文件返回,这样就不用再耗费CPU去动态压缩了。(视情况来用,我们没用)
  2. 可以和gzip一同开启,没啥影响,它的优先级高于gzip

易错点提示

在实际的生产环境中架构都比较负载,不像一个单纯的Nginx一样,我配置好了就万事大吉了。

时常会遇到有些网站明明配置了gzip但是展示上看并没有生效,为什么?

此时需要梳理这个请求流程,看看这个请求都经过了哪些地方,比如 你的请求通过三次代理(CDN-->Nginx-->Nginx)那么在其中一层没有配置或者配置错误那么整体的返回数据就是没有被压缩的, 这种情况出现还是比较多的。

 


Tags in this post...

Servers 相关文章推荐
Nginx服务器添加Systemd自定义服务过程解析
Mar 31 Servers
nginx 多个location转发任意请求或访问静态资源文件的实现
Mar 31 Servers
Nginx反爬虫策略,防止UA抓取网站
Mar 31 Servers
apache基于端口创建虚拟主机的示例
Apr 22 Servers
配置nginx 重定向到系统维护页面
Jun 08 Servers
Nginx反向代理至go-fastdfs案例讲解
Aug 02 Servers
使用Nginx搭载rtmp直播服务器的方法
Oct 16 Servers
nginx实现动静分离的方法示例
Nov 07 Servers
从零开始在Centos7上部署SpringBoot项目
Apr 07 Servers
云服务器部署 Web 项目的实现步骤
Jun 28 Servers
Apache Kafka 分区重分配的实现原理解析
Jul 15 Servers
详解apache编译安装httpd-2.4.54及三种风格的init程序特点和区别
Jul 15 Servers
详解如何使用Nginx解决跨域问题
May 06 #Servers
配置nginx负载均衡
May 06 #Servers
tomcat下部署jenkins的方法
排查Tomcat进程假死的问题
May 06 #Servers
使用Nginx的访问日志统计PV与UV
Tomcat配置访问日志和线程数
May 06 #Servers
tomcat正常启动但网页却无法访问的几种解决方法
May 06 #Servers
You might like
php数组函数序列之ksort()对数组的元素键名进行升序排序,保持索引关系
2011/11/02 PHP
10 个经典PHP函数
2013/10/17 PHP
PHP的cURL库简介及使用示例
2015/02/06 PHP
php获取网页上所有链接的方法
2015/04/03 PHP
ThinkPHP框架表单验证操作方法
2017/07/19 PHP
php输出形式实例整理
2020/05/05 PHP
js创建对象的几种常用方式小结(推荐)
2010/10/24 Javascript
JS保存和删除cookie操作 判断cookie是否存在
2013/11/13 Javascript
浅谈javascript面向对象程序设计
2015/01/21 Javascript
纯jquery实现模仿淘宝购物车结算
2015/08/20 Javascript
JavaScript的==运算详解
2016/07/20 Javascript
Angular 理解module和injector,即依赖注入
2016/09/07 Javascript
微信小程序 HTTPS报错整理常见问题及解决方案
2016/12/14 Javascript
基于angular实现三级联动的生日插件
2017/05/12 Javascript
jQuery查找dom的几种方法效率详解
2017/05/17 jQuery
JavaScript之创意时钟项目(实例讲解)
2017/10/23 Javascript
layui从数据库中获取复选框的值并默认选中方法
2018/08/15 Javascript
微信小程序带动画弹窗组件使用方法详解
2018/11/27 Javascript
通过JQuery,JQueryUI和Jsplumb实现拖拽模块
2019/06/18 jQuery
微信小程序获取位置展示地图并标注信息的实例代码
2019/09/01 Javascript
Vue中import from的来源及省略后缀与加载文件夹问题
2020/02/09 Javascript
10分钟学会js处理json的常用方法
2020/12/06 Javascript
初学Python函数的笔记整理
2015/04/07 Python
django开发教程之利用缓存文件进行页面缓存的方法
2017/11/10 Python
python机器学习之决策树分类详解
2017/12/20 Python
mvc框架打造笔记之wsgi协议的优缺点以及接口实现
2018/08/01 Python
python基于plotly实现画饼状图代码实例
2019/12/16 Python
美国购买肉、鸭、家禽、鹅肝和熟食网站:D’Artagnan
2018/11/13 全球购物
如何写好优秀的创业计划书
2014/01/30 职场文书
总结表彰大会主持词
2014/03/26 职场文书
企业党员公开承诺书
2014/03/26 职场文书
2014年秋季开学典礼主持词
2014/08/02 职场文书
永不妥协观后感
2015/06/10 职场文书
Apache Hudi的多版本清理服务彻底讲解
2022/03/31 Servers
python实现对doc、txt、xls等文档的读写操作
2022/04/02 Python
Python万能模板案例之matplotlib绘制直方图的基本配置
2022/04/13 Python