Nginx - 压缩模块
1. 前言
在 Nginx 中与网页压缩相关的模块有两个:一个是 HttpGzipModule,另一个是 HttpGzipStaticModule。前者用于启用在文件传输过程中使用 gzip 压缩,而后者的作用是将一个文件以压缩的方式传递到一个支持压缩功能的客户端之前,首先检查是否已经存在相应的以 '.gz' 结尾的文件名格式,这样可以避免重复压缩而造成资源浪费.
因此,对于 Nginx 的网页压缩传输在 Nginx 中的配置将其分为两种模式:一种是动态的, 实时压缩输出(边压缩,边输出),而另一种则是静态的, 找到同名文件的 .gz 格式文件就输出。
2. HttpGzipModule
HttpGzipModule 用于在文件传输过程中启用 gzip 压缩,压缩率通过变量 $gzip 来设定。
2.1 示例
2.2 指令
指令名称:gzip
语法:gzip on | off
默认值:gzip off
使用环境:http、server、location
功能:启动或禁止 gzip 压缩功能。 指令名称:gzip_buffers
语法:gzip_buffer number size
默认值:gzip_buffers 4k/8k
使用环境:http、server、location
功能:该指令用于指定存放被压缩响应的缓冲的数量和大小。如果没有设置大小,那么一个缓冲的大小等于一个页码的大小,具体页码的大小依赖于所在的系统平台,不是 4KB 就是8KB。
获取系统内存页码大小的方法很简单:
[root@10.0.10.158 ~]#getconf PAGE_SIZE 指令名称:gzip_comp_level
语法:gzip_comp_level …
默认值:gzip_comp_level
使用环境:http、server、location
功能:该指令用于设定压缩级别,可以设定的级别从 - , 是最小的压缩率,也是最快的,占用CPU资源最少;而9是压缩率最高的,也是最慢的,占用cpu资源最大。 指令名称:gzip_disable
语法:gzip_disable regex
使用环境:http、server、location
功能:可以通过该指令对一些特定的用户代理不使用压缩功能,就可以使用正则表达式,但这需要PCRE的支持。该指令从0..23以后才开始提供。从 Nginx 0.7.63版本后,可以使用"msie6" 来禁止对 IE5. 和 IE 的压缩。 指令名称:gzip_http_version
语法:gzip_http_version 1.0 | 1.1
默认值:gzip_http_version 1.1
使用环境:http、server、location
功能:该指令用于决定对指定的 HTTP 请求协议版本进行压缩或者不压缩,其依赖于客户端的HTTP请求版本。 指令名称:gzip_min_length
语法:gzip_min_length length
默认值:gzip_min_length
使用环境:http、server、location
功能:该指令用于设置响应体的最小长度,单位为字节。如果响应体的长度低于指定的值,那么就不使用压缩。长度的决定从 'Content-Length' 头获取。 指令名称:gzip_proxied
语法:gzip_proxied [ off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any ]
默认值:gzip_proxied off
使用环境:http、server、location
功能:该指令用于设置启用或禁止从代理服务器上收到的响应体 Gzip 压缩功能。 指令名称:gzip_types
语法:gzip_types mime-type [ mime-type… ]
默认值:gzip_types text/html;
使用环境:http, server, location
功能:该指令用于设定除了默认的 text/html MIME 类型外,对其他的那些 MIME 类型也启用压缩功能。 指令名称:gzip_vary
语法:gzip_vary on | off
默认值: gzip_vary off
使用环境:http、server、location
功能:该指令用于设定是否向响应数据包添加 Vary: Accept-Encoding HTTP 头(header)。
gzip 指令部分
gzip 指令是挺多的,一般常用的如下:
gzip on; # ¿ªÆôѹËõ
gzip_disable "msie6"; # IE ½ûֹѹËõ
gzip_proxied any; # ÈκÎÎļþ¶¼Ñ¹Ëõ
gzip_comp_level ; # ѹËõµÈ¼¶
gzip_vary on; # ͨ¹ý¿Í»§¶ËÅжÏѹËõ
gzip_min_length 1k; # ѹËõµÄ×îСÈÝÁ¿
# ѹËõ¸ñʽ£¬¸ù¾ÝÐèÇóµ÷Õû
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
gzip 常用指令
2.3 测试
生成一个较大的页面
浏览器直接访问
查看有没有开启gzip压缩功能
curl -I -H "Accept-Encoding: gzip,deflate" http://10.0.10.158/hello.html
3. HttpGzipStaticModule
gzip_static 生效的前提是 nginx 开启了 gzip_static压缩并且请求目录下存在名称相同且以 .gz 结尾的文件。
使用 gzip_static 压缩的话要先准备好压缩后的 gz 文件,并且服务器会消耗更多的空间来存储压缩文件和原文件,这个有利有弊要自己衡量。
3.1 指令
gzip_static
语法:gzip_static on | off
默认值:gzip_static off
使用环境:http、server、location
功能:用于启用 HttpGzipStaticModule
3.2 测试
通过访问,系统会去读页面文件,文件的最新访问时间会被修改。所以通过文件的访问时间可以确定是哪个文件被访问了。
接下来,通过浏览器访问:
再次查看 hello.html* 最新访问时间:
通过对比,本次浏览器访问的是 hello.html.gz 文件,文件大小为: 244K,通过浏览器访问:243.55KB。
4. 总结
gzip 和 gzip_static 模块的区别就是:gzip是动态压缩,压缩过程中会消耗一定的资源,gzip_static 是需要提前将页面转换为.gz格式的文件,需要额外的空间来存储。它们的压缩比例和传输大小都是通过相同的参数设定的。
可以这么说:
gzip 是通过计算换空间,gzip_static 是通过空间换计算。
Nginx - 压缩模块的更多相关文章
- mac下Nginx+lua模块编译安装
Nginx的nb之处就不说了,lua也是一个小巧的脚本语言,由标准C编写而成,几乎可以运行在所有的平台上,也非常强大,其他特性请自行度娘.nginx_lua_module是由淘宝的工程师清无(王晓哲) ...
- Nginx学习笔记六Nginx的模块开发
1.Nginx配置文件主要组成:main(全局配置)这部分的指令将影响其他所有部分.server(虚拟主机配置)这部分指令主要用于指定虚拟主机域名,IP和端口.upstream(主要为反向代理,负载均 ...
- Nginx 功能模块
一.Nginx 核心功能模块 Nginx 核心功能模块负责 Nginx 的全局应用,主要对应主配置文件的 Main 区块和 Events 区块,这里有很多 Nginx 必须的全局参数配置. Nginx ...
- (转)nginx 常用模块整理
原文:http://blog.51cto.com/arm2012/1977090 1. 性能相关配置 worker_processes number | auto: worker进程的数量:通常应该为 ...
- Nginx软件模块说明
Nginx软件模块说明 Nginx常用模块 注:以下只是列举Nginx常用模块,需要详细了解更多模块可以登录Nginx官方网站查看 功能模块 模块说明 ngx_http_core_module 包含一 ...
- Nginx常用模块及作用
Nginx模块详解 nginx模块分为两种,官方和第三方,我们通过命令 nginx -V 查看 nginx已经安装的模块! [root@localhost ~]# nginx -V nginx ver ...
- Nginx相关模块学习使用实践指南
转载自:https://www.bilibili.com/read/cv16150654?spm_id_from=333.999.0.0 0x01 Nginx 常用模块使用实践 官方模块使用手册:ht ...
- 基于Nginx dyups模块的站点动态上下线并实现简单服务治理
简介 今天主要讨论一下,对于分布式服务,站点如何平滑的上下线问题. 分布式服务 在分布式服务下,我们会用nginx做负载均衡, 业务站点访问某服务站点的时候, 统一走nginx, 然后nginx根据一 ...
- Nginx 切片模块、断点续传
熟悉 CDN 行业主流技术的朋友应该都比较清楚,虽然 Nginx 近几年发展的如日中天,但是基本上没有直接使用它自带的 proxy_cache 模块来做缓存的,原因有很多,例如下面几个: 不支持多盘 ...
随机推荐
- LINUX第四周学习
<Linux内核设计与实现>第四周读书笔记——第五章 5.1 与内核通信57 系统调用在用户空间进程和硬件设备之间添加了一个中间层,该层主要作用有三个: 首先它为用户空间提供了一种硬件的抽 ...
- 如何使用android design support library
Android应用Design Support Library完全使用实例 - OPEN 开发经验库http://www.open-open.com/lib/view/open143338585611 ...
- 解题:BJOI 2006 狼抓兔子
题面 可以看出来是最小割,然后你就去求最大流了 这么大的范围就是让你用网络流卡的?咋想的啊=.=??? 建议还是老老实实用 平面图最小割等于其对偶图最短路 这个东西来做吧,虽然这个东西跑的也挺慢的,最 ...
- 【MST】P2323 [HNOI2006]公路修建问题
Description 给定 \(n\) 个点 \(m - 1\) 条无向边,每条边有两种边权,贵一点的和便宜一点的.要求至少选择 \(k\) 条贵边使得图联通且花费最大的边权值最小. Input 第 ...
- 详细BP神经网络预测算法及实现过程实例
1.具体应用实例.根据表2,预测序号15的跳高成绩. 表2 国内男子跳高运动员各项素质指标 序号 跳高成绩() 30行进跑(s) 立定三级跳远() 助跑摸高() 助跑4—6步跳高() 负重深蹲杠铃() ...
- Python 字符串前面加u,r,b的含义
1.字符串前加 u 例:u"我是含有中文字符组成的字符串." 作用: 后面字符串以 Unicode 格式 进行编码,一般用在中文字符串前面,防止因为源码储存格式问题,导致再次使用时 ...
- python线程进程
多道技术: 多道程序设计技术 所谓多道程序设计技术,就是指允许多个程序同时进入内存并运行.即同时把多个程序放入内存,并允许它们交替在CPU中运行,它们共享系统中的各种硬.软件资源.当一道程序因I/O请 ...
- Struts2框架基础概念总结
一.struts2框架 Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的 ...
- Java上传文件夹(Jersey)
背景介绍:公司要在CMS系统上为运营人员提供一个功能供运营人员将做好的活动页面上传到阿里云存储上,上传的内容为一个文件夹,文件夹内部有.html网页,JS文件夹下有JS文件,CSS文件夹下有样式表,I ...
- 应用jfinal发送微信模板消息的一个bug
严格来讲,这不是一个bug,只是我们应用的方式不对.微信发送模板消息的方法是: HttpUtils.post(sendApiUrl + AccessTokenApi.getAccessTokenStr ...