
如果你熟悉HTTP,你应该熟悉请求-响应请求过程。
比如访问“www.jd.com”,一个完整页面的访问,往往是由很多HTTP请求完成的,这会涉及到浏览器并发的数量。具体片段如图
所示
客户端请求的资源有很多种,比如jpg、css、js、html等。不同的文件类型对应不同的MIME_TYPE。每个文件都必须通过网络传输到客户端,这样才能被浏览器渲染呈现给用户。大家一定都有给朋友发文件的经历,不管是QQ传输还是邮件传输。如果一个文件太大,你想节省一些传输时间,你总是在发送前压缩它。实际上,我们的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;测试结果图表
使用的监控工具是:chromewebdevTool工具。
大小/内容:
大小是响应头和响应体的组合大小,
内容是所请求内容的解码大小。
http://stackoverflow.com/的解释
“大小”是线路上的字节数,“内容”是资源的实际大小。许多因素会使它们变得不同,包括:
时间/延迟:
时间是从请求开始到收到最后一个字节的总时间;
延迟是从请求开始到收到第一个字节的时间;
压缩在server2.domain.com是不开的,大小基本等于内容。
当server1.domain.com压缩打开时,大小基本上等于内容大小的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时的压缩效果
压缩
120k-23.7k
120k-20.0k
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默认包含文本/html。根据server1.domain.com大于20k的文件启用压缩;仅对server2.domain.com大于50K的文件启用压缩。index.html是25.6k,所以server1.domain.com满足压缩条件,而server2.domain.com不压缩。
5.gzip_proxied参数
Gzip_proxied
语法:gzip_proxied[off|expired|no-cache|no-store|private|no_last_modified|no_etag|auth|any]…
默认值:gzip_proxied
作用域:http,server,location
nginx作为反向代理时,启用、打开或关闭后端服务器返回的结果。匹配的前提是后端服务器必须返回包含“Via”的头。
Off–关闭所有代理结果数据的压缩
Expired–启用压缩。如果标头包含“Expires”标头信息
no-Cache–启用压缩,如果标头包含“Cache-Control:no-cache”标头信息
no-store–启用压缩,如果标头包含“Cache-Control:no-store”标头信息
private–启用压缩,如果标头包含“Cache-Control:private”标头信息
no_Last_Modified–启用压缩,如果标头不包含“Last-Modified”标头信息
no_ETag–启用压缩
5.1测试配置文件
配置:gzip_proxiedno_etag如果标题不包含“ETag”标题信息,则启用压缩。
请访问http://192.168.163.146/proxytest/dist/CSS/bootstrap.min.CSS
ETag标记关闭,并且满足启用压缩的条件。但是,它不会被压缩。这个实验结果让我有点疑惑。如果有熟悉nginx的朋友,请给点意见。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)