Nginx演练(3)配置内容压缩

如果对HTTP熟悉的话,对request-response请求过程应该很熟悉。

1349636454_9561.jpg


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

wKiom1fE-8aRWsW9AABwjYQ_dRA050.png

客户端请求的资源内容有多种,jpg,css,js,html等。不同文件类型,对应不同MIME_TYPE。每个文件都要通过网络传输到客户端,才能被浏览器渲染,进而展现给用户。想必大家都有给朋友发送文件的经历吧,不管是QQ传输,还是Email传送。如果一个文件过大,想节省点传输时间,都会发送文件之前,先把文件压缩下。其实,我们的web服务器,也对提供压缩支持。接下来,我们通过对比的方式,具体演练下效果。

1.准备环境。

1.1 准备测试例子

以bootstrap帮助文档为例,当然你愿意也可以选择其他的资源,这不是重点。

1.2 配置nginx,支持两个虚拟主机。要求两个虚拟主机分别配置不同的压缩参数。

  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文件开启压缩

 gzip_types text/css;

测试结果图

wKiom1fE_-_w1JWMAACBLMKphqk764.png

使用的监控工具是: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.png

server1.domain.com 开启压缩,Size基本上等同Content大小的1/6。

压缩前后,时间从120ms,下降到了17ms,将近10倍。


3.理解压缩级别 gzip_comp_level

    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.png

gzip_comp_level
压缩情况
2
120k -23.7k
5
120k -20.0k
8
120k -19.5k

可见设置的级别越高,压缩效果越好。当然什么都有两面性,级别越高,CPU资源也越高。


4.按文件类型和大小进行有条件压缩

修改两个虚拟主机配置

 ...
    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.png


wKioL1fFJHGS87uSAACW4-vc2uM488.png


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

本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。
[root@example~]#yuminstallipvsadm-y安装ip_vs管理工具理论部分我们在上篇文章中详细介绍了,这次进入实操阶段[root@example~]#modprobeip_vs加载ip_vs模块[root@example~]#modprobeip_vs_rr[root@example~]#lsmod|grepip_vsip_vs_rr14200ip_vs1265342ip_vs_rrlibcrc32c12461ip_vsipv6335589271ip_vs[root@exampl
公司同事强制关机,导致vmware里面虚拟机无法启动,报错:虚拟机在使用,请获取所有权,获取之后仍然说不能使用。 这篇博文记录一个VMWare虚拟机非正常关闭后无法启动的解决方案。 我们中心的网站部署在一个WindowsXP的虚拟机上,但是由于电源问题,那台虚拟机所在的实体物理机总是重启,有时候就会导致虚拟机系统还没有正常关闭就被迫关机了。机器重启后,虚拟机系统总是无法正常启动,弹出类似下面的错误: Cannotopen the disk ‘C:\VM-machines\Windows XP-001\Wi
今天给大家展示一下,我自己写的一个自动创建Bash脚本文件头的脚本(名为create),希望能对初学脚本者带来一定的思维提示。毕竟对于一个经常写脚本的运维人员来说,每次写脚本的时候都需要重复的去写一遍文件头,也是一件很累赘的事情,既然我们学了脚本,为什么不让它来为我们减轻一下负担了。所以一个自动创建Bash脚本文件头的想法在我脑海里面产生了。 本脚本所需要实现的功能: 1,能够自动创建一个标准的Bash脚本文件头,带有详细注释信息 2,能够给新建完成的Bash脚本文件自动添加执行权限 [root@cent

Redis集群解决方案-Codis - 2016-09-05 17:09:33

Codis由豌豆荚于2014年11月开源,基于go和c开发,是近期涌现的、国人开发的优秀开源软件之一,稳定性极高,性能更是改善了很多。 Codis由四部分组成: codis-proxy:codis-proxy是客户端连接的Redis代理服务,codis-proxy本身实现了Redis协议,表现得和一个原生Redis没什么区别,对于一个业务来说,可以部署多个codis-proxy,codis-proxy本身是无状态的 codis-config:codis-config是Codis的管理工具,支持添加/删除R
grep是linux下一个重要的文本处理工具之一,全称是 Globel Search Regular Expression and Printing out the line( 全面搜索正则表达式并把行打印出来 ) 是一种强大的文本搜索工具,是一个对行进行操作的搜索工作,它能使用正则表达式搜索文本,并把匹配的行打印出来。 grep家族包括grep、egrep和fgrep。 egrep表示扩展的grep,相比grep支持更多的元字符,"grep -E"相当于egrep。fgrep是fast grep,不支持

OpenLDAP 加密传输 - 2016-09-05 17:09:08

一、自建证书颁发机构 关于证书发布机构的大家,请查看我的博文 《CentOS 6使用openssl搭建根CA》 。 我下面所操作的是根据前面几篇博文配置好的LDAP,在那上面来进行改动。服务端的IP是192.168.2.10,客户端的IP是192.168.2.11。 二、OpenLDAP 服务端设置 假设我们的CA自建证书和服务器证书都创建好了,CA的公钥是cacert.pem,服务端的证书名称是ldap.crt,私钥文件是ldap.key,所有的文件放到/etc/openldap/certs。 注意 ,
区别: 1. 两个文件都是设置环境变量文件的,/etc/profile是永久性的环境变量,是全局变量,/etc/profile.d/设置所有用户生效 2. /etc/profile.d/比/etc/profile好维护,不想要什么变量直接删除/etc/profile.d/下对应的shell脚本即可,不用像/etc/profile需要改动此文件 用法: CentOS 中每个用户都要指定各自的环境变量,其中包括可执行的 path路径,这些路径决定了每个用户在执行时的命令工具。 一般情况下,可以再每个用户的环境
原因: 有些情况下服务器系统不是自己装的,raid也不是自己配置的,或者当你接收一个岗位,远程登录系统后可能就不知道系统是否有做raid,raid级别?因此在这里博主总结一下Linux下查看软、硬raid信息的方法,分享一下。 软件raid:( 只能通过Linux系统本身来查看) 1)查看阵列状态: cat /proc/mdstat [root@ test ~] #cat/proc/mdstat 1 2 3 4 Personalities:[raid6][raid5][raid4] md0:activer
环境准备:( Nginx,tomcat 的安装部署本例不赘述。) 192.168.1.13 nginx 192.168.1.225 tomcat7 , terracotta 192.168.1.226 tomcat7 部署 terracotta+tomcat 集群: 一:安装 java 程序至系统,配置 java 环境。 #vi/etc/profileexportJAVA_HOME=/usr/local/javaexportPATH=/usr/local/java/bin:$PATH 二:部署单 terr
一、企业网络安全管理面临的新问题 现在计算机和移动智能设备越来越普及,有一些企业网用户不再满足于只让实名登记的、有实际办公用途的计算机上网,他们把家中的笔记本、智能手机、平板电脑带到单位,通过非法架设SOHO路由器、随身WIFI、安装免费WIFI软件等,绕过网络管理员的检测,实现非法接入企业网,然后就可以通过他们自己的设备实现一些移动平台的网络应用。这些SOHO路由器、随身WIFI的一个大卖点:“就是可以绕过检测,隐匿接入”,因为这些设备都可以关闭信号的广播发送,通过信号检测的方法也搜不到。 非法接入问题