设为首页 收藏本站
查看: 637|回复: 0

[经验分享] Nginx演练(3)配置内容压缩

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-9-5 15:55:36 | 显示全部楼层 |阅读模式
如果对HTTP熟悉的话,对request-response请求过程应该很熟悉。
1349636454_9561.jpg

比如访问“www.jd.com",一个完整页面的访问,往往会经过很多次的HTTP请求共同完成,这中间会涉及到浏览器并发数。具体片段如图

wKiom1fE-8aRWsW9AABwjYQ_dRA050.jpg
客户端请求的资源内容有多种,jpg,css,js,html等。不同文件类型,对应不同MIME_TYPE。每个文件都要通过网络传输到客户端,才能被浏览器渲染,进而展现给用户。想必大家都有给朋友发送文件的经历吧,不管是QQ传输,还是Email传送。如果一个文件过大,想节省点传输时间,都会发送文件之前,先把文件压缩下。其实,我们的web服务器,也对提供压缩支持。接下来,我们通过对比的方式,具体演练下效果。
1.准备环境。
1.1 准备测试例子
以bootstrap帮助文档为例,当然你愿意也可以选择其他的资源,这不是重点。
1.2 配置nginx,支持两个虚拟主机。要求两个虚拟主机分别配置不同的压缩参数。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
  server {
        # 监听的IP和端口
        listen 192.168.163.146:80;
        server_name server1.domain.com;
        access_log logs/server1.access.log main;
        gzip on;
        gzip_buffers 4 8k;
        gzip_comp_level 2;
        gzip_min_length 20;
        gzip_proxied off;
        gzip_types text/css;
        gzip_vary off;
        location /
        {
            index index.html index.htm;
            #存放目录
            root /u01/up1/bootstrap-3.3.5/docs;
        }
    }

    server {
        # 监听的IP和端口
        listen 192.168.163.146:80;
        server_name server2.domain.com;
        access_log logs/server2.access.log main;        
        location /
        {
            index index.html index.htm;
            #存放目录
            root /u01/up2/bootstrap-3.3.5/docs;
        }
    }



2. 对css文件开启压缩
1
gzip_types text/css;



测试结果图
wKiom1fE_-_w1JWMAACBLMKphqk764.jpg
使用的监控工具是:chrome web devTool工具。
Size/Content:

Size是响应头部和响应体结合起来的大小,
Content是请求内容解码后的大小。
来自http://stackoverflow.com/的解释
"Size" is the number of bytes on the wire, and "content" is the actual size of the resource. A number of things can make them different, including:
  • Being served from cache (small or 0 "size")
  • Response headers, including cookies (larger "size" than "content")
  • Redirects or authentication requests
  • gzip compression (smaller "size" than "content", usually)


Time/Latency:

Time是从请求开始到接收到最后一个字节的总时长;
Latency是从请求开始到接收到第一个字节的时间;


server2.domain.com 未开启压缩,Size基本上等同于Content.

wKioL1fE__Czvh9-AACDnEs00pw843.jpg
server1.domain.com 开启压缩,Size基本上等同Content大小的1/6。
压缩前后,时间从120ms,下降到了17ms,将近10倍。

3.理解压缩级别 gzip_comp_level
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    server {
        # 监听的IP和端口
        listen 192.168.163.146:80;
        server_name server1.domain.com;
        access_log logs/server1.access.log main;
        gzip on;
        gzip_buffers 4 8k;
        #修改gzip_comp_level为5
        gzip_comp_level 5;
        gzip_min_length 20;
        gzip_proxied off;
        gzip_types text/css;
        gzip_vary off;
        location /
        {
            index index.html index.htm;
            #存放目录
            root /u01/up1/bootstrap-3.3.5/docs;
        }
    }




gzip_comp_level为5的压缩效果
wKiom1fFA8nQMcNgAACAC4FQ-5g191.jpg
gzip_comp_level
压缩情况
2
120k -23.7k
5
120k -20.0k
8
120k -19.5k
可见设置的级别越高,压缩效果越好。当然什么都有两面性,级别越高,CPU资源也越高。


4.按文件类型和大小进行有条件压缩
修改两个虚拟主机配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
...
    server {
        # 监听的IP和端口
        listen 192.168.163.146:80;
        server_name server1.domain.com;
        access_log logs/server1.access.log main;
        gzip on;
        gzip_buffers 4 8k;
        gzip_comp_level 2;
        #大小超过20k的进行压缩
        gzip_min_length 20k;
        gzip_proxied off;
        gzip_types text/css application/xml;
        gzip_vary off;
        location /
        {
            index index.html index.htm;
            #存放目录
            root /u01/up1/bootstrap-3.3.5/docs;
        }
    }

    server {
        # 监听的IP和端口
        listen 192.168.163.146:80;
        server_name server2.domain.com;
        access_log logs/server2.access.log main;
        gzip on;
        gzip_buffers 4 8k;
        gzip_comp_level 2;
       #大小超过50k的进行压缩
        gzip_min_length 50k;
        gzip_proxied off;
        gzip_types text/javascript application/xml;
        gzip_vary off;  
        location /
        {
            index index.html index.htm;
            #存放目录
            root /u01/up2/bootstrap-3.3.5/docs;
        }
    }
    ...




由于gzip_types 默认包括text/html。根据配置server1.domain.com 大于20k的文件,启用压缩;server2.domain.com 大于50K的文件,才启用压缩。index.html大小为25.6k,所以server1.domain.com满足压缩条件,而server2.domain.com不进行压缩。

wKiom1fFJHDArxq9AAD6KWBoba4822.jpg

wKioL1fFJHGS87uSAACW4-vc2uM488.jpg

5.gzip_proxied 参数
gzip_proxied
语法: gzip_proxied [off|expired|no-cache|no-store|private|no_last_modified|no_etag|auth|any] …

默认值: gzip_proxied off

作用域: http, server, location

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 – 无条件启用压缩

5.1 测试的配置文件


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
  server {
        listen 80;
        gzip on;
        gzip_buffers 4 8k;
        gzip_comp_level 2;
        gzip_proxied no_etag;
        gzip_vary off;
        add_header X-Via $server_addr;
        location /proxytest
        {
          proxy_pass http://localhost:8000/;
        }     
    }
    server {
        listen 8000;
        #server_name server1.domain.com;
        access_log logs/server1.access.log main;
        location /
        {
            index index.html index.htm;           
            root /u01/up1/bootstrap-3.3.5/docs;
        }
       location ~ \.css$ {
          etag off;
          root /u01/up1/bootstrap-3.3.5/docs;
       }
    }



配置: gzip_proxied no_etag; 如果header头中不包含 “ETag” 头信息就启用压缩。
访问http://192.168.163.146/proxytest/dist/css/bootstrap.min.css

wKioL1fGQD3xuoUoAAB19EtnwRg556.jpg
确认关闭了ETag标签,满足了启用压缩的条件。但是,并不会进行压缩,这个实验结果,让我有点摸不清头脑。如果有对nginx熟悉的朋友,欢迎指点下。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-268034-1-1.html 上篇帖子: redis演练(3) redis事务管理 下篇帖子: redis演练(4) redis基准测试
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表