说一段废话

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

  • 用户体验上

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

  • 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中以下的指令:

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

易错点提示

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

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

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

如何用好Nginx的gzip指令的更多相关文章

  1. Nginx 开启gzip 压缩

    随着nginx的发展,越来越多的网站使用nginx,因此nginx的优化变得越来越重要,今天我们来看看nginx的gzip压缩到底是怎么压缩的呢? gzip(GNU-ZIP)是一种压缩技术. 经过gz ...

  2. 开启Nginx的gzip压缩功能详解

    默认情况下,Nginx的gzip压缩是关闭的, gzip压缩功能就是可以让你节省不少带宽,但是会增加服务器CPU的开销哦,Nginx默认只对text/html进行压缩 ,如果要对html之外的内容进行 ...

  3. Nginx 开启gzip 压缩,实现基于域名的虚拟主机。

    一:gzip(GNU-ZIP)是一种压缩技术. 经过gzip压缩后页面大小可以变为原来的30%甚至更小,这样,用户浏览页面的时候速度会块得多. gzip 的压缩页面需要浏览器和服务器双方都支持,实际上 ...

  4. Nginx开启Gzip详解

    最近生产上发生了一些问题,原先所有的静态资源文件都是经过gzip压缩的,然而这几天突然都没有压缩了,经过一顿排查,发现是Nginx的配置有问题,借此机会详细了解了Nginx的Gzip配置. 1. Ng ...

  5. (转)nginx日志配置指令详解

    这篇文章主要介绍了nginx日志配置指令详解,nginx有一个非常灵活的日志记录模式,每个级别的配置可以有各自独立的访问日志,需要的朋友可以参考下日志对于统计排错来说非常有利的.本文总结了nginx日 ...

  6. 入门系列之在Nginx配置Gzip

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由小铁匠米兰的v 发表于云+社区专栏 简介 网站加载的速度取决于浏览器必须下载的所有文件的大小.减少要传输的文件的大小可以使网站不仅加载 ...

  7. nginx日志配置指令详解

    这篇文章主要介绍了nginx日志配置指令详解,nginx有一个非常灵活的日志记录模式,每个级别的配置可以有各自独立的访问日志,需要的朋友可以参考下日志对于统计排错来说非常有利的.本文总结了nginx日 ...

  8. nginx的gzip压缩

    随着nginx的发展,越来越多的网站使用nginx,因此nginx的优化变得越来越重要,今天我们来看看nginx的gzip压缩到底是怎么压缩的呢? gzip(GNU-ZIP)是一种压缩技术.经过gzi ...

  9. Nginx开启Gzip压缩大幅提高页面加载速度

    [root@12 conf]# vi nginx.conf gzip on;#开启GZIP gzip_min_length 1k; #不压缩临界值,大于1K的才压缩,一般不用改 gzip_buffer ...

随机推荐

  1. Spring 由哪些模块组成?

    以下是 Spring 框架的基本模块:第 393 页 共 485 页 Core module Bean module Context module Expression Language module ...

  2. synchronize、Lock、ReenTrantLock 的区别

    synchronize 和Lock: 1.synchronize 系java 内置关键字:而Lock 是一个类 2.synchronize 可以作用于变量.方法.代码块:而Lock 是显式地指定开始和 ...

  3. Effective Java —— 消除过期的对象引用

    本文参考 本篇文章参考自<Effective Java>第三版第七条"Eliminate obsolete object references" Memory leak ...

  4. C++ | 虚表的写入时机

    虚表 在C++的多态机制中,使用了 virtual 关键字声明的函数称之为虚函数,每个有虚函数的类或者虚继承的子类,编译器都会为它生成一个虚拟函数表(简称:虚表,以下用 vftable表示),表中的每 ...

  5. Linux文件管理 | Linux 文件基础知识

    目录 Linux 常用文件类别 Linux 目录结构概述 LInux 系统目录及说明 一.Linux 常用文件类别 1.文件   在Linux上系统上,有一切皆文件的说法,就是说任何软件和I/O设备都 ...

  6. 7_线性控制器设计(Linear Controller Design)

    开环系统中 状态方程,其中A的特征值将决定这个系统的表现(稳定性或者收敛速度:特征值小于0时系统稳定) 如果开环系统特征值大于0时(即系统不稳定时): 可以引入输入量U时(U是关于状态变量X的函数), ...

  7. 【控制】模型预测控制 MPC 【合集】Model Predictive Control

    1.模型预测控制--运动学模型 2.模型预测控制--模型线性化 3.模型预测控制--模型离散化 4.模型预测控制--预测 5.模型预测控制--控制律优化二次型优化 6.模型预测控制--反馈控制 7.模 ...

  8. 【动态系统的建模与分析】9_一阶系统的频率响应_低通滤波器_Matlab/Simulink分析

    magnitude response:振幅响应 phase response:相位响应 传递函数G(S)为什么将S看成jw化成G(jw)通过[动态系统的建模与分析]8_频率响应_详细数学推导 G(jw ...

  9. SVG Sprite 入门(SVG图标解决方案)

    关于浏览器图标解决方案,一直就有很多 CSS Sprite,Icon Font,CSS Icon以及SVG.相对而言svg矢量图标以及支持浏览器自身解析的优点,很多团队都已经在使用了.这篇文章主要说明 ...

  10. C++:Abstract class : invalid abstract return type for member function ‘virtual...’

    #include <iostream> #include <cmath> #include <sstream> using namespace std; class ...