Nginx之gzip模块解读

news2025/1/10 23:07:24

目录

gzip基本介绍

gzip工作原理

Nginx中的gzip

不建议开启Nginx中的gzip场景


gzip基本介绍

gzip是GNUzip的缩写,最早用于UNIX系统的文件压缩。HTTP协议上的gzip编码是一种用来改进web应用程序性能的技术,web服务器和客户端(浏览器)必须共同支持gzip。目前主流的浏览器,Chrome,firefox,IE等都支持该协议。常见的服务器如Apache,Nginx,IIS同样支持gzip。

gzip工作原理

 

  • 1)浏览器请求url,并在request header中设置属性accept-encoding:gzip。表明浏览器支持gzip。
  • 2)服务器收到浏览器发送的请求之后,判断浏览器是否支持gzip,如果支持gzip,则向浏览器传送压缩过的内容,不支持则向浏览器发送未经压缩的内容。一般情况下,浏览器和服务器都支持gzip,response headers返回包含content-encoding:gzip。
  • 3)浏览器接收到服务器的响应之后判断内容是否被压缩,如果被压缩则解压缩显示页面内容。

Nginx中的gzip

为提高用户获取响应数据的速度,Nginx 服务器可以将响应数据进行 gzip 压缩,在减小响应数据的大小后再发送给用户端浏览器,相对于使用户浏览 Web 页面,上述方式显示速度更快。

要想启用响应数据 gzip 压缩(ngx_http_gzip_module 模块)功能,需要用户浏览器也支持 gzip 解压功能

指令作用域默认值指令值可选项指令说明
gziphttp、server、location、if in locationoffon 或 off启用 gzip 功能
gzip_buffershttp、server、location32 4k 或 16 8k--设置 gzip 压缩缓冲区
gzip_comp_levelhttp、server、location1--设置 gzip 压缩级别,取值范围为 1~9,该指令值越大,压缩程度越高
gzip_disablehttp、server、location----当请求头中的属性字段 User-Agent 的内容与指令值正则匹配时关闭 gzip 压缩功能
gzip_http_versionhttp、server、location1.11.0 或 1.1设置压缩请求的最早 HTTP 协议版本
gzip_min_lengthhttp、server、location20--设置启用 gzip 压缩的响应数据的最小长度,判断依据为响应头中 Content-Length 的值。如果 Content-Length 不存在,则该指令无效;如果指令值为 0,则表示全部压缩
gzip_proxiedhttp、server、locationoffoff 或 expired 或 no-cache 或 no-store 或 private 或 no_last_modified 或 no_etag 或 auth 或 any根据被代理服务器返回响应数据的响应头属性字段判断是否启用 gzip 压缩
gzip_typeshttp、server、locationtext/html--设置可进行 gzip 压缩的响应数据的 MIME 类型,指令值为 * 时表示所有 MIME 类型
gzip_varyhttp、server、locationoffon 或 off在响应头中添加 Vary:Accept-Encoding,返回给前端代理或 CDN 服务器,用于判岗是否向客户端发送 gzip 的缓存副本,避免代理或 CDN 服务器将 gzip 压缩后的缓存副本响应给不具备 gzip 解压能力的浏览器

其中 gzip_proxied 指令的指令值可选项说明如下:

  • off:关闭该指令功能;
  • expired:若 HTTP 响应头中包含属性字段 Expires,则启用压缩;
  • no-cache:若 HTTP 响应头中包含属性字段 Cache-Control:no-cache,则启用压缩;
  • no-store:若 HTTP 响应头中包含属性字段 Cache-Control:no-store,则启用压缩;
  • private:若 HTTP 响应头中包含属性字段 Cache-Control:private,则启用压缩;
  • no_last_modified:若 HTTP 响应头中不包含属性字段 Last-Modified,则启用压缩;
  • no_etag:若 HTTP 响应头中不包含属性字段 ETag,则启用压缩;
  • auth:若 HTTP 响应头中包含属性字段 Authorization,则启用压缩;
  • any:对所有响应数据启用压缩。

当客户端浏览器不支持 gzip 压缩时,可以使用 ngx_http_gunzip_module 模块将压缩的数据解压后发送给客户端。对支持 gzip 压缩的浏览器不做处理。 

gzip_static always;                  # 始终发送静态的gzip压缩数据
gunzip on;                           # 若客户端浏览器不支持gzip压缩数据,则解压后发送
gunzip_buffers 16 8k;                                         # 解压缓冲区大小为128KB
gzip_proxied expired no-cache no-store private auth;    # 当被代理的服务器符合条件时,
                                                        # 对响应数据启用gzip压缩

gzip on;                             # 启用动态gzip压缩功能
gzip_min_length  1k;                 # 响应数据超过1KB时启用gzip压缩
gzip_buffers     4 16k;              # 动态压缩的缓冲区大小是64KB
gzip_comp_level 3;                   # 压缩级别为3
gzip_types       text/plain application/x-javascript
                text/css application/xml text/javascript
                application/x-httpd-php image/jpeg
                image/gif image/png; # 对指定的MIME类型数据启用动态压缩
gzip_vary on;                        # 向前端代理或缓存服务器发送添加"Vary: Accept-
                                     # Encoding"的响应数据

不建议开启Nginx中的gzip场景

Nginx的Gzip压缩功能虽然好用,但是下面两类文件资源不太建议启用此压缩功能。

  • 1) 图片类型资源 (还有视频文件) 原因:图片如jpg、png文件本身就会有压缩,所以就算开启gzip后,压缩前和压缩后大小没有多大区别
  • 2) 大文件资源 原因:会消耗大量的cpu资源,且不一定有明显的效果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1033560.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

diskGenius专业版使用:windows系统下加载ext4 linux系统分区并备份还原资源(文件的拷贝进、出)

前言 EXT4是第四代扩展文件系统(英语:Fourth extended filesystem,缩写为 ext4)是Linux系统下的日志文件系统,是ext3文件系统的后继版本。 所以我们在windows系统下是不能识别的,也不能对其写入、拷贝出文…

竞赛 基于深度学习的植物识别算法 - cnn opencv python

文章目录 0 前言1 课题背景2 具体实现3 数据收集和处理3 MobileNetV2网络4 损失函数softmax 交叉熵4.1 softmax函数4.2 交叉熵损失函数 5 优化器SGD6 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习的植物识别算法 ** …

如何使用 Pyinstaller 编译打包 Python 项目生成 exe 可执行文件(2023 年最新详细教程)

pyinstaller 概述 PyInstaller 是一个将 Python 程序转换为独立可执行文件的工具。它能够在 Windows、Linux、Mac OS X、AIX 和 Solaris 等系统上运行。相较于其他类似的工具 PyInstaller 主要优点 1. PyInstaller 与任何 Python 版本兼容,从 2.3 版本开始支持。 …

包含漏洞的str_replace函数绕过

str_replace函数绕过(双写就可以绕过) DWVA中等级别的时候会有防御过滤,过滤之后之前的本地远程包含就会发生执行错误 本地包含绕过 因为把../会替换成空,所以原来有../的地方要写成 ..././ 这样中间的红色部分去掉之后还剩…

大词表语言模型在续写任务上的一个问题及对策

©PaperWeekly 原创 作者 | 苏剑林 单位 | 科学空间 研究方向 | NLP、神经网络 对于 LLM 来说,通过增大 Tokenizer 的词表来提高压缩率,从而缩短序列长度、降低解码成本,是大家都喜闻乐见的事情。毕竟增大词表只需要增大 Embedding 层和…

总结C/C++中程序内存区域划分

总结C/C中程序内存区域划分: 1. 栈区(stack): 在执⾏函数时,函数内局部变量的存储单元都可以在栈上创建。函数执⾏结束时 这些存储单元⾃动被释放。栈内存分配运算内置于处理器的指令集中,效率很⾼&#x…

安卓机型-MTK芯片掉串码 掉基带 如何用工具进行修复 改写参数

在早期MTK芯片机型中较多使用AP BP方式来修复mtk芯片机型的串码。目前MTK机型对于丢基带 掉串码问题大都使用MODEM META工具来进行修复串码或者改写参数。今天以一款mtk芯片机型来做个演示, 高通芯片类的可以参考; 高通改串相关 工具仅支持在联发科芯片组上运行的…

小样本目标检测:ECEA: Extensible Co-Existing Attention for Few-Shot Object Detection

论文作者:Zhimeng Xin,Tianxu Wu,Shiming Chen,Yixiong Zou,Ling Shao,Xinge You 作者单位:Huazhong University of Science and Technology; UCAS-Terminus AI Lab 论文链接:http://arxiv.org/abs/2309.08196v1 内容简介: 1&…

少儿编程 2023年5月中国电子学会图形化编程等级考试Scratch编程三级真题解析(选择题)

2023年5月scratch编程等级考试三级真题 选择题(共25题,每题2分,共50分) 1、关于变量,下列描述错误的是 A、只能建一个变量 B、变量可以隐藏 C、变量可以删除 D、变量的值可以修改 答案:A 考点分析:考查变量相关知识 变量可以根据题目的需要建立多个,所以答案A错…

web:[GXYCTF2019]Ping Ping Ping

题目 点进题目,页面只显示/?ip,没有其他信息 联系到题目名为ping,猜测题目于ping地址有关,先尝试一下 构造payload http://31e941af-c0d7-49c9-a3fe-84cb13d8adae.node4.buuoj.cn:81/?ip127.0.0.1 这里猜测可能为远程命令执行…

[JAVAee]SpringBoot日志文件

目录 日志的作用 SpringBoot中的日志 框架说明 日志对象的获取 日志的分类 日志的级别设置 日志的打印 日志的持久化 日志的作用 日志可以帮助我们发现程序的问题并进行定位.日志还可以记录用户的登录信息,分析用户的意图.日志能记录程序执行的时间,记录数据.为日后的程…

【Web开发 | Django】数据库分流之道:探索Django多数据库路由最佳实践

🤵‍♂️ 个人主页: AI_magician 📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。 👨‍💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!&…

Python中统计单词出现的次数,包含(PySpark方法)

思路: 定义一个函数,使用open函数,将文本内容打开。 定义一个空字典和空列表,进行循环及条件判断操作def count_word(file_path):dict_data {} #定义一个空字典f open(file_path,"r",encoding"UTF-8")lis…

C# Onnx Yolov8 Detect 水果识别

效果 项目 代码 using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System…

Chrome浏览器删除网站cookies的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

iOS——ViewController的生命周期

ViewController ViewController的生命周期是指在应用程序运行过程中,ViewController实例从创建到销毁的整个过程。在这个过程中,ViewController会经历一系列的生命周期方法,这些方法可以帮助开发者管理ViewController及其相关的视图和逻辑。…

20230919在WIN10下使用python3将PDF文档转为DOCX格式的WORD文档

20230919在WIN10下使用python3将PDF文档转为DOCX格式的WORD文档 2023/9/19 11:20 python pdf word https://blog.csdn.net/u013185349/article/details/130059657 Python实现PDF转Word文档 AcceptedLin 已于 2023-04-10 14:45:17 修改 1243 收藏 1 文章标签: pd…

软件系统的测试方法

软件系统测试是确保软件质量和功能的关键步骤,选择适当的测试方法取决于项目的性质、需求和资源可用性。通常,综合运用多种测试方法可以更全面地评估软件系统的质量和性能。下面列举了一些常见的软件系统测试方法,希望对大家有所帮助。北京木…

通过http发送post请求的三种Content-Type分析

通过okhttp向服务端发起post网络请求,可以通过Content-Type设置发送请求数据的格式。 常用到的三种: 1)application/x-www-form-urlencoded; charsetutf-8 2)application/json; charsetutf-8 3)multipart/form-dat…

数据融合的并行计算

1、 数据融合的算法 数据融合的算法当中,需要对每一个格点i进行逐个计算,公式如下 2、出现的问题 但是随着背景场的空间分辨率的提高,格点数急剧增加。如空间分辨率为0.01的话,那么15✖15的空间范围内就有1500✖1500个格点。那…