前言
在http的协议里,为了减少网络传输,允许将报文进行gzip压缩以后再传输。虽然网络传输体积减小了,但是服务器压缩和浏览器的解压缩消耗了CPU的计算。
后来出现了预压缩技术,就是提前把静态文件进行gzip压缩,当请求来的时候,直接读走。这样服务器就没了压缩消耗,而浏览器的解压缩性能相比网络IO,影响不大。
一 动态nginx的gzip
每次请求来的时候,要实时进行压缩。但是有个问题,就是压缩过的文件,要重复压缩,这样后面的静态压缩就派上用场了。
1.静态文件压缩
每次请求静态文件的时候,都会动态压缩静态文件。
2.反向代理压缩
反向代理返回的报文,也是可以压缩的。但也是每次动态压缩。可以根据头信息处理
3.代理缓存压缩,浏览器缓存
在做反向代理的时候,可以缓存应用服务器返回的报文,支持缓存首部Cache-Control等。缓存的文件为明文。但是反向代理和压缩缓存,可以分层来解决。反向代理服务器动态压缩,而CDN直接缓存结果(压缩与非压缩)。相当于加了2层代理来处理。
对于浏览器,开启Expire首部,则浏览器可以缓存压缩后的结果,减少服务器请求。
4.代理的vary首部压缩
其实cdn,代理服务器,原理上都是代理服务器。他们一般以url为key值进行缓存。而vary属性的设置,告诉了代理根据url缓存的同时,vary的信息也作为key。比如客户端(浏览器)请求的信息里带上了Accept-Encoding:gzip 则返回压缩副本。如果没有带这个头信息,默认返回非压缩副本。
二 静态nginx的gzip:预压缩
对于静态文件先压缩再输出是再正常不过的事了,但是这种压缩都是动态的,在每次请求都会先压缩再输出,大大浪费了很多cpu。如果前端加了反向代理缓存,那能减少这种浪费。但不是每个生产环境前端都有缓存的。而nginx有个模块Gzip Precompression,这个模块的作用是对于需要压缩的文件,直接读取已经压缩好的文件(文件名为加.gz),而不是动态压缩,对于不支持gzip的请求则读取原文件。
./configure --prefix=/opt/nginx/nginx-1.9.6 --with-http_gzip_static_module
1.gzip_static配置优先级高于gzip
2.开启nginx_static后,对于任何文件都会先查找是否有对应的gz文件
3.gzip_types设置对gzip_static无效
验证方法也很简单。可以自行压缩不同大小的×.gz文件,通过浏览器调试工具查看返回的文件大小即可。
压缩命令
gzip -c -9 jquery-1.11.2.min.js > jquery-1.11.2.min.js.gz
原始文件:284k
代码混淆,代码压缩:95k
gzip压缩:33k
可以看到,284k的jquery文件,经过处理以后,变成了33k。
nginx配置文件
http节点下配置:
gzip on;
location节点下配置
gzip_vary on;
gzip_static on;
压缩有浏览器查看
完整配置文件请参考附件
三 常用命令和技巧
以下三条命令,都可以附加上Accept-Encoding首部,来获取压缩与非压缩的服务器报文
apache-bench
./ab -n 100000 -c 16 -H 'Accept-Encoding: gzip' 'http://192.168.56.2:8080/cache_ehcache-2.10.0_web/ex^Cre'
wget
其中wget是以http/1.0请求的,这个要注意gizp里开启1.0的压缩,默认是不开启的
wget --header=Accept-Encoding:gzip --save-headers -d http://192.168.56.2:8080/cache_ehcache-2.10.0_web/expire
curl
curl -v -H "Accept-Encoding:gzip" http://192.168.56.2:8080/cache_ehcache-2.10.0_web/expire
四 参数含义
# 开启压缩
gzip on;
# 设置允许压缩的页面最小字节数,页面字节数从header头得content-length中进行获取。默认值是0,不管页面多大都压缩。建议设置成大于2k的字节数,小于2k可能会越压越大。
gzip_min_length 2k;
# 设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。 例如 4 4k 代表以4k为单位,按照原始数据大小以4k为单位的4倍申请内存。 4 8k 代表以8k为单位,按照原始数据大小以8k为单位的4倍申请内存。
# 如果没有设置,默认值是申请跟原始数据相同大小的内存空间去存储gzip压缩结果。
gzip_buffers 4 16k;
#压缩级别,1-10,数字越大压缩的越好,也越占用CPU时间
gzip_comp_level 5;
# 默认值: gzip_types text/html (默认不对js/css文件进行压缩)
# 压缩类型,匹配MIME类型进行压缩
# 不能用通配符 text/*
# (无论是否指定)text/html默认已经压缩
# 设置哪压缩种文本文件可参考 conf/mime.types
gzip_types text/plain application/x-javascript text/css application/xml;
# 值为1.0和1.1 代表是否压缩http协议1.0,选择1.0则1.0和1.1都可以压缩
gzip_http_version 1.0
# IE6及以下禁止压缩
gzip_disable "MSIE [1-6]\.";
# 默认值:off
# Nginx作为反向代理的时候启用,开启或者关闭后端服务器返回的结果,匹配的前提是后端服务器必须要返回包含"Via"的 header头。
# off - 关闭所有的代理结果数据的压缩
# expired - 启用压缩,如果header头中包含 "Expires" 头信息
# no-cache - 启用压缩,如果header头中包含 "Cache-Control:no-cache" 头信息
# no-store - 启用压缩,如果header头中包含 "Cache-Control:no-store" 头信息
# private - 启用压缩,如果header头中包含 "Cache-Control:private" 头信息
# no_last_modified - 启用压缩,如果header头中不包含 "Last-Modified" 头信息
# no_etag - 启用压缩 ,如果header头中不包含 "ETag" 头信息
# auth - 启用压缩 , 如果header头中包含 "Authorization" 头信息
# any - 无条件启用压缩
gzip_proxied expired no-cache no-store private auth;
# 给CDN和代理服务器使用,针对相同url,可以根据头信息返回压缩和非压缩副本
gzip_vary on;
五 参考资料
nginx 预压缩(gzip)静态文件
http://willko.iteye.com/blog/667091
Nginx中gzip_static模块的使用
http://inosin.iteye.com/blog/1299705
Nginx 开启Gzip压缩的方法(非常的详解)
http://www.111cn.net/sys/nginx/69492.htm
Nginx Gzip模块启用和配置指令详解
http://www.jb51.net/article/48995.htm
linux下gzip的压缩详解
http://booby325.iteye.com/blog/1685855
加速nginx: 开启gzip和缓存
http://www.darrenfang.com/2015/01/setting-up-http-cache-and-gzip-with-nginx/
配置vary
http://www.webkaka.com/blog/archives/how-to-set-Vary-Accept-Encoding-header.html
- 大小: 134.2 KB
- 大小: 41.8 KB
分享到:
相关推荐
除了gzip压缩,Nginx还提供了丰富的特性用于优化网站性能,例如缓存静态资源、使用ETag减少不必要的重传、配置合理的Keepalive超时时间等。结合负载均衡策略,如轮询、权重轮询、IP哈希等,可以进一步提高系统的可...
Nginx是一个高性能的HTTP和反向代理服务器,广泛用于Web服务器领域,以其轻量级、高并发处理能力而著称。启用gzip压缩是优化Web性能的重要步骤之一,它可以显著减少网络传输的数据量,加快页面加载速度,节省用户...
此外,`gzip_proxied`指令用于控制Nginx作为反向代理时如何处理后端服务器的响应。不同的参数值表示在特定条件下启用或禁用Gzip,例如`expired`、`no-cache`等。具体设置应根据后端服务器的配置和需求来确定。 开启...
Nginx 作为一款高性能的 HTTP 和反向代理服务器,提供了许多优化策略,其中之一就是通过 gzip 压缩来减少数据传输量,从而加快网站加载速度。本文将详细介绍如何在 Nginx 中实现 gzip 压缩,以及相关的配置参数。 ...
Nginx作为一个高性能的HTTP和反向代理服务器,支持Gzip压缩,使得网页加载速度得到了提升。 具体到操作层面,开启Nginx的Gzip压缩涉及编辑Nginx的配置文件。通常,配置文件位于/usr/local/nginx/conf/nginx.conf,...
首先需要了解的是,Nginx服务器的静态压缩功能与Apache服务器的Gzip压缩功能类似。通过压缩静态文件,可以减少网络传输的数据量,降低服务器带宽消耗,并且提高用户浏览网站时的响应速度。在Nginx中,可以使用ngx_...
在使用Nginx作为反向代理时,还可以使用gzip_proxied指令来控制是否压缩代理服务器转发的内容。 总的来说,合理配置Nginx的Gzip模块能够有效提升网站性能,但需要注意合理平衡CPU使用和网络带宽消耗。同时,随着...
**:与代理服务器建立连接的超时时间。 - **proxy_read_timeout 600;**:从代理服务器读取数据的超时时间。 - **proxy_send_timeout 600;**:向代理服务器发送数据的超时时间。 以上配置涵盖了Nginx配置文件中的...
如果设置为on,那么在响应头中会包含"Vary: Accept-Encoding",这样可以让代理服务器缓存两种版本的内容,一种是压缩过的,一种是没有压缩过的。 3. gzip_proxied any;:当Nginx作为反向代理时,该指令用来控制是否...
Nginx是一款广泛使用的高性能HTTP和反向代理Web服务器软件,它以其稳定性、丰富的功能集、简单的配置文件和较低的内存消耗而著称。在Linux环境下部署Nginx能够充分利用其优势,提高网站性能和用户体验。本文将详细...
8. `gzip_proxied`: 当Nginx作为反向代理时,这个参数决定是否对代理的响应进行压缩。可以根据不同的缓存策略设置,例如`off`、`expired`、`no-cache`、`no-store`、`private`、`no_last_modified`和`no_etag`。 9....
### Nginx 1.10.2 集群安装与配置详解 #### 一、概述 Nginx是一款高性能的HTTP服务器和反向代理服务软件,它以其高效的性能和稳定性,在众多Web服务器中脱颖而出。本文将详细介绍如何在Linux环境下安装配置Nginx ...
`:开启此选项,Nginx会在响应头中添加“Vary: Accept-Encoding”,告诉下游代理服务器或缓存服务器内容可能经过了gzip压缩。 4. `gzip_comp_level 6;`:设置gzip压缩级别,范围从1到9。级别越高,压缩效果越好,但...
Nginx作为一种高性能的HTTP服务器和反向代理服务器,在实现动静分离方面具有得天独厚的优势。 #### 二、实验环境配置 本次实验的环境配置如下: - **操作系统**:CentOS 6.5 - **Nginx 版本**:0.8.46 - **JDK ...
buffers`定义压缩的缓冲区大小,`gzip_http_version`定义HTTP协议版本,`gzip_comp_level`设置压缩级别,`gzip_types`定义哪些MIME类型进行压缩,`gzip_vary`在压缩时添加"Vary: Accept-Encoding"头,允许压缩缓存。...
Nginx是一款高性能的HTTP服务器及反向代理服务器,常用于网站服务器的搭建以及负载均衡等场景。本文将针对一段Nginx的基础配置文件进行详细解析,帮助读者更好地理解Nginx配置的各项参数及其功能。 #### 二、配置...
3. **Server**: 使用的是nginx/1.4.2作为Web服务器,这是一个高性能的反向代理和负载均衡器,可以进行进一步的配置优化,如缓存控制、压缩等。 4. **Set-Cookie**:多个Cookie被设置,可能影响页面加载时间,应考虑...