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 相关文章推荐
如何利用map实现Nginx允许多个域名跨域
Mar 31 Servers
Nginx域名转发使用场景代码实例
Mar 31 Servers
nginx实现动静分离的方法示例
Nov 07 Servers
详解nginx安装过程并代理下载服务器文件
Feb 12 Servers
忘记Grafana不要紧2种Grafana重置admin密码方法详细步骤
Apr 07 Servers
Nginx流量拷贝ngx_http_mirror_module模块使用方法详解
Apr 07 Servers
Nginx 安装SSL证书完成HTTPS部署
Apr 28 Servers
安装Windows Server 2012 R2企业版操作系统并设置好相关参数
Apr 29 Servers
git stash(储藏)的用法总结
Jun 25 Servers
Linux在两个服务器直接传文件的操作方法
Aug 05 Servers
Win10系统搭建ftp文件服务器详细教程
Aug 05 Servers
源码安装apache脚本部署过程详解
Sep 23 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中在foreach中使用foreach ($arr as &$value) 这种类型的解释
2013/06/24 PHP
windows下配置apache+php+mysql时出现问题的处理方法
2014/06/20 PHP
JQuery Tips(4) 一些关于提高JQuery性能的Tips
2009/12/19 Javascript
JavaScript Ajax Json实现上下级下拉框联动效果实例代码
2013/11/23 Javascript
点击标签切换和自动切换DIV选项卡
2014/08/10 Javascript
Jquery1.9.1源码分析系列(十五)动画处理之外篇
2015/12/04 Javascript
JavaScript编写页面半透明遮罩效果的简单示例
2016/05/09 Javascript
JS获取IE版本号与HTML设置IE文档模式的方法
2016/10/09 Javascript
JS实现简易的图片拖拽排序实例代码
2017/06/09 Javascript
Node调用Java的示例代码
2017/09/20 Javascript
bootstrap Table服务端处理分页(后台是.net)
2017/10/19 Javascript
详解基于vue-cli配置移动端自适应
2018/01/13 Javascript
jQuery+vue.js实现的多选下拉列表功能示例
2019/01/15 jQuery
vue实现随机验证码功能的实例代码
2019/04/30 Javascript
基于layui轮播图满屏是高度自适应的解决方法
2019/09/16 Javascript
基于vue和websocket的多人在线聊天室
2020/02/01 Javascript
[47:21]Liquid vs TNC Supermajor 胜者组 BO3 第一场 6.4
2018/06/05 DOTA
[01:06:19]DOTA2-DPC中国联赛定级赛 LBZS vs SAG BO3第二场 1月8日
2021/03/11 DOTA
python3爬取各类天气信息
2018/02/24 Python
PyQt5+requests实现车票查询工具
2019/01/21 Python
python+selenium select下拉选择框定位处理方法
2019/08/24 Python
python3 反射的四种基本方法解析
2019/08/26 Python
英国最大的在线奢侈手表零售商:Jura Watches
2018/01/29 全球购物
葡萄牙航空官方网站:TAP Air Portugal
2019/10/31 全球购物
EJB的几种类型
2012/08/15 面试题
人力资源管理专业毕业生自我评价
2013/09/21 职场文书
新学期校长寄语
2014/01/18 职场文书
《长相思》听课反思
2014/04/10 职场文书
个人总结与自我评价
2014/09/18 职场文书
信访工作汇报材料
2014/10/27 职场文书
环境卫生工作汇报材料
2014/10/28 职场文书
保密法制宣传月活动总结
2015/05/07 职场文书
高中班主任培训心得体会
2016/01/07 职场文书
基于Python绘制子图及子图刻度的变换等的问题
2021/05/23 Python
JavaScript数组 几个常用方法总结
2021/11/11 Javascript
Java 实战项目之家居购物商城系统详解流程
2021/11/11 Java/Android