36 web系统架构及cache基础、varnish4基础应用、varnish状态引擎详解及vcl

02 varnish4基础应用

配置环境:

node1 CentOS7.2 192.168.1.131

[[email protected] ~]# yum -y install varnish

[[email protected] ~]# vim /etc/varnish/varnish.params

修改

VARNISH_STORAGE="file,/var/lib/varnish/varnish_storage.bin,1G"

VARNISH_STORAGE="malloc,256M"

[[email protected] ~]# vim /etc/varnish/default.vcl 

修改backend default 段的内容为

backend default {

.host = "192.168.1.132";

.port = "80";

}

[[email protected] ~]# systemctl start varnish.service 

访问测试页

[[email protected] ~]# curl 192.168.1.131:6081/test1.html

Page 1 on Web1

[[email protected] ~]# varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082

200        

-----------------------------

Varnish Cache CLI 1.0

-----------------------------

Linux,3.10.0-327.el7.x86_64,x86_64,-smalloc,-smalloc,-hcritbit

varnish-4.0.3 revision b8c4a34

Type ‘help‘ for command list.

Type ‘quit‘ to close CLI session.

[[email protected] ~]# yum -y install httpd

[[email protected] ~]# for i in {1..10};do echo "Page $i on Web1" > /var/www/html/test$i.html;done

[[email protected] ~]# systemctl start httpd.service 

[[email protected] ~]# systemctl enable httpd.service

03 varnish状态引擎详解

[[email protected] ~]# cd /etc/varnish/

[[email protected] varnish]# cp default.vcl test.vcl

[[email protected] varnish]# vim test.vcl 

修改sub vcl_recv段的内容为:

sub vcl_recv {

if (req.method == "PRI") {

/* We do not support SPDY or HTTP/2.0 */

return (synth(405));

}

if (req.method != "GET" &&

 req.method != "HEAD" &&

 req.method != "PUT" &&

 req.method != "POST" &&

 req.method != "TRACE" &&

 req.method != "OPTIONS" &&

 req.method != "DELETE") {

/* Non-RFC2616 or CONNECT which is weird. */

return (pipe);

}

if (req.method != "GET" && req.method != "HEAD") {

/* We only deal with GET and HEAD by default */

return (pass);

}

if (req.http.Authorization || req.http.Cookie) {

/* Not cacheable by default */

return (pass);

}

return (hash);

}

[[email protected] ~]# varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082

200        

-----------------------------

Varnish Cache CLI 1.0

-----------------------------

Linux,3.10.0-327.el7.x86_64,x86_64,-smalloc,-smalloc,-hcritbit

varnish-4.0.3 revision b8c4a34

Type ‘help‘ for command list.

Type ‘quit‘ to close CLI session.

vcl.load test1 test.vcl

200        

VCL compiled.

vcl.list

200        

active          0 boot

available       0 test1

vcl.use test1

200        

VCL ‘test1‘ now active

[[email protected] varnish]# vim test.vcl

在sub vcl_deliver 程序段添加

    if (obj.hits>0) {

        set resp.http.X-Cache = "HIT";

    } else {

        set resp.http.X-Cache = "MISS";

    }   

[[email protected] ~]# varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082

vcl.load test2 test.vcl

200        

VCL compiled.

vcl.use test2

200        

VCL ‘test2‘ now active

测试

1)同一个地址测试3次,结果显示为HIT

[[email protected] ~]# curl http://192.168.1.131:6081/test5.html   

Page 5 on Web1

[[email protected] ~]# curl http://192.168.1.131:6081/test5.html

Page 5 on Web1

[[email protected] ~]# curl http://192.168.1.131:6081/test5.html

Page 5 on Web1

[[email protected] ~]# curl -I http://192.168.1.131:6081/test5.html

HTTP/1.1 200 OK

Date: Wed, 19 Oct 2016 02:27:57 GMT

Server: Apache/2.4.6 (CentOS)

Last-Modified: Tue, 18 Oct 2016 08:59:47 GMT

ETag: "f-53f1fea1d7c0d"

Content-Length: 15

Content-Type: text/html; charset=UTF-8

X-Varnish: 65556 65554

Age: 14

Via: 1.1 varnish-v4

X-Cache: HIT

Connection: keep-alive

2)测试一次,结果显示为MISS

[[email protected] ~]# curl  http://192.168.1.131:6081/test6.html  

Page 6 on Web1

[[email protected] ~]# curl -I http://192.168.1.131:6081/test6.html

HTTP/1.1 200 OK

Date: Wed, 19 Oct 2016 02:39:41 GMT

Server: Apache/2.4.6 (CentOS)

Last-Modified: Tue, 18 Oct 2016 08:59:47 GMT

ETag: "f-53f1fea1d7ff5"

Content-Length: 15

Content-Type: text/html; charset=UTF-8

X-Varnish: 12

Age: 0

Via: 1.1 varnish-v4

X-Cache: MISS

Connection: keep-alive

显示客户端IP

[[email protected] varnish]# vim test.vcl 

修改sub vcl_deliver的内容为:

    if (obj.hits>0) {

        set resp.http.X-Cache = "HIT from" + server.ip;

    } else {

        set resp.http.X-Cache = "MISS from" + server.ip;

    }   

[[email protected] ~]# varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082

vcl.load test3 test.vcl

200        

VCL compiled.

vcl.use test3

200        

VCL ‘test3‘ now active

[[email protected] ~]# curl -I http://192.168.1.131:6081/test6.html

HTTP/1.1 200 OK

Date: Wed, 19 Oct 2016 03:08:40 GMT

Server: Apache/2.4.6 (CentOS)

Last-Modified: Tue, 18 Oct 2016 08:59:47 GMT

ETag: "f-53f1fea1d7ff5"

Content-Length: 15

Content-Type: text/html; charset=UTF-8

X-Varnish: 32770 3

Age: 5

Via: 1.1 varnish-v4

X-Cache: HIT from 192.168.1.131

Connection: keep-alive

[[email protected] ~]# curl -I http://192.168.1.131:6081/test7.html

HTTP/1.1 200 OK

Date: Wed, 19 Oct 2016 03:09:11 GMT

Server: Apache/2.4.6 (CentOS)

Last-Modified: Tue, 18 Oct 2016 08:59:47 GMT

ETag: "f-53f1fea1d7ff5"

Content-Length: 15

Content-Type: text/html; charset=UTF-8

X-Varnish: 5

Age: 0

Via: 1.1 varnish-v4

X-Cache: MISS from 192.168.1.131

Connection: keep-alive

04 varnish状态引擎及vcl

#添加后端

[[email protected] varnish]# vim test.vcl

在backend default段后添加

backend imgsrv {

    .host = "192.168.1.133";

    .port = "80";

}

#强制对某资源的请求,不检查缓存

#区分大小写(默认)

[[email protected] varnish]# vim test.vcl 

在sub vcl_recv段中添加

if (req.url ~ "^/test7.html$") {

return(pass);

}

[[email protected] ~]# varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082

vcl.load test4 test.vcl

200        

VCL compiled.

vcl.use test4

200        

VCL ‘test4‘ now active

[[email protected] ~]# curl -I http://192.168.1.131:6081/test7.html

HTTP/1.1 200 OK

Date: Wed, 19 Oct 2016 04:11:58 GMT

Server: Apache/2.4.6 (CentOS)

Last-Modified: Tue, 18 Oct 2016 08:59:47 GMT

ETag: "f-53f1fea1d7ff5"

Accept-Ranges: bytes

Content-Length: 15

Content-Type: text/html; charset=UTF-8

X-Varnish: 32791

Age: 0

Via: 1.1 varnish-v4

X-Cache: MISS from 192.168.1.131

Connection: keep-alive

结果:不管测试几次,结果均为MISS

#不区分大小写,在url前面加(?i)

[[email protected] varnish]# vim test.vcl

在sub vcl_recv段中添加

if (req.url ~ "(?i)^/login" || req.url ~ "(?i)^/admin") {

return(pass);

}   

[[email protected] ~]# varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082

vcl.load test5 test.vcl

200        

VCL compiled.

vcl.use test5

200        

VCL ‘test5‘ now active

[[email protected] ~]# mkdir /var/www/html/admin

[[email protected] ~]# vim /var/www/html/admin/index.html

From Admin Page

[[email protected] ~]# curl -I http://192.168.1.131:6081/admin/index.html

HTTP/1.1 200 OK

Date: Wed, 19 Oct 2016 04:27:53 GMT

Server: Apache/2.4.6 (CentOS)

Last-Modified: Wed, 19 Oct 2016 04:27:22 GMT

ETag: "10-53f3039b4f7b4"

Accept-Ranges: bytes

Content-Length: 16

Content-Type: text/html; charset=UTF-8

X-Varnish: 32794

Age: 0

Via: 1.1 varnish-v4

X-Cache: MISS from 192.168.1.131

Connection: keep-alive

结果:不论测试几次,结果均为MISS

对特定类型的资源取消其私有的cookie标识:

[[email protected] varnish]# vim test.vcl 

在vcl_backend_response段中添加

if (beresp.http.cache-control !~ "s-maxage") {

if (bereq.url ~ "(?i)\.jpg$") {

set beresp.ttl = 3600s;

unset beresp.http.Set-Cookie;

}

if (bereq.url ~ "(?i)\.css$") {

set beresp.ttl = 600s;

unset beresp.http.Set-Cookie;

}

}

[[email protected] ~]# varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082

vcl.load test6 test.vcl

200        

VCL compiled.

vcl.use test6

200        

VCL ‘test6‘ now active

[[email protected] ~]# cd /var/www/html/

上传两张图片1.jpg,2.jpg

示例:

[[email protected] ~]# cd /etc/varnish/

[[email protected] varnish]# vim test.vcl

修改backend段的内容为:

backend websrv1 {

.host = "192.168.1.132";

.port = "80";

.probe = {

.url = "test1.html";

}

}

backend websrv2 {

.host = "192.168.1.133";

.port = "80";

}

在vcl_recv段内添加

if (req.url ~ "(?i)^\.(jpg|png|gif)$") {

set req.backend_hint = websrv1;

} else {

set req.backend_hint = websrv2;

}   

[[email protected] ~]# varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082

vcl.load test7 test.vcl 

200        

VCL compiled.

vcl.use test7

200        

VCL ‘test7‘ now active

backend.list

200        

Backend name                   Refs   Admin      Probe

default(192.168.1.132,,80)     7      probe      Healthy (no probe)

websrv1(192.168.1.132,,80)     2      probe      Sick 0/8

websrv2(192.168.1.133,,80)     2      probe      Healthy (no probe)

[[email protected] ~]# yum -y install httpd

[[email protected] ~]# for i in {1..10};do echo "<h1>Test Page $i Web2 </h1>" > /var/www/html/test$i.html;done

[[email protected] ~]# systemctl start httpd.service

示例2:

[[email protected] varnish]# vim test.vcl

添加 

import directors;

sub vcl_init {

new mycluster = directors.round_robin();

mycluster.add_backend(websrv1);

mycluster.add_backend(websrv2);

}

在sub vcl_recv段内添加

if (req.url ~ "(?i)test1.html$") {

return(pass);

}   

set req.backend_hint = mycluster.backend();

vcl.load test8 test.vcl

200        

VCL compiled.

vcl.use test8

200        

VCL ‘test8‘ now active

时间: 2024-10-14 00:35:58

36 web系统架构及cache基础、varnish4基础应用、varnish状态引擎详解及vcl的相关文章

适应多场景应用的web系统架构探讨

背景: 虽然身处互联网时代,但还有很多信息系统仍运行在内部网络中,例如,企事业内部的OA系统,医院的HIS系统,银行的管理系统等.软件公司会针对系统应用环境,对信息系统进行逻辑业务上的修改.因此,本文主要介绍一种适应于多场景应用的web系统架构,供相关人员讨论研究. 1 系统框架图 2 分层的优势 (1)解耦:降低代码耦合度,允许前后端的分离,显示与业务的分离,前端开发与后台开发的分离. (2)复用:面向接口编程,面向接口实现,面向接口形成文档,提高接口函数的复用. (3)固化通用业务逻辑. (

浅谈大型web系统架构

动态应用,是相对于网站静态内容而言,是指以c/c++.php.Java.perl..net等服务器端语言开发的网络应用软件,比如论坛.网络相册.交友.BLOG等常见应用.动态应用系统通常与数据库系统.缓存系统.分布式存储系统等密不可分. 大型动态应用系统平台主要是针对于大流量.高并发网站建立的底层系统架构.大型网站的运行需要一个可靠.安全.可扩展.易维护的应用系统平台做为支撑,以保证网站应用的平稳运行. 大型动态应用系统又可分为几个子系统: 1)Web前端系统 2)负载均衡系统 3)数据库集群系

WEB测试---WEB系统架构

WEB系统架构分为  B/S.C/S.P2P 三种模式. B/S: browser/server,浏览器/服务器模式. B/S架构特点:标准协议.部署灵活 .核心运算在服务器端.发布应用只需要发布服务器:随着服务器运算能力的上升和云计算的应用,B/S架构越来越来流行.B/S提供诸多功能应用实现C/S的特色,例如ajax的无刷新.浏览器扩展让浏览器能够做更多C/S架构才能做到的事. 常用的WEB服务器软件包括 Apache.IIS.Tomcat.Nginx.Lighttp. Apache:Apac

【Android基础】内容提供者ContentProvider的使用详解

1.什么是ContentProvider 首先,ContentProvider(内容提供者)是android中的四大组件之一,但是在一般的开发中,可能使用的比较少. ContentProvider为不同的软件之间数据共享,提供统一的接口.也就是说,如果我们想让其他的应用使用我们自己程序内的数据,就可以使用ContentProvider定义一个对外开放的接口,从而使得其他的应用可以使用咱们应用的文件.数据库内存储的信息.当然,自己开发的应用需要给其他应用共享信息的需求可能比较少见,但是在Andro

千万pv大型web系统架构,学习从点滴开始

架构,刚开始的解释是我从知乎上看到的.什么是架构?有人讲, 说架构并不是一 个很 悬 乎的 东西 , 实际 上就是一个架子 , 放一些 业务 和算法,跟我们的生活中的晾衣架很像.更抽象一点,说架构其 实 是 对 我 们 重复性业务 的抽象和我 们 未来 业务 拓展的前瞻,强调过去的经验和你对整个行业的预见. 我们要想做一个架构的话需要哪些能力?我觉得最重要的是架构师一个最重要的能力就是你要有 战 略分解能力.这个怎么来看呢: 第一,你必须要有抽象的能力,抽象的能力最基本就是去重,去重在整个架构中

大型web系统架构详解

动态应用,是相对于网站静态内容而言,是指以c/c++.php.Java.perl..net等服务器端语言开发的网络应用软件,比如论坛.网络相册.交友.BLOG等常见应用.动态应用系统通常与数据库系统.缓存系统.分布式存储系统等密不可分. 大型动态应用系统平台主要是针对于大流量.高并发网站建立的底层系统架构.大型网站的运行需要一个可靠.安全.可扩展.易维护的应用系统平台做为支撑,以保证网站应用的平稳运行. 大型动态应用系统又可分为几个子系统: (1) Web前端系统 (2) 负载均衡系统 (3)

软测理论——浅谈大型web系统架构

动态应用,是相对于网站静态内容而言,是指以c/c++.php.Java.perl..net等服务器端语言开发的网络应用软件,比如论坛.网络相册.交友.BLOG等常见应用.动态应用系统通常与数据库系统.缓存系统.分布式存储系统等密不可分. 大型动态应用系统平台主要是针对于大流量.高并发网站建立的底层系统架构.大型网站的运行需要一个可靠.安全.可扩展.易维护的应用系统平台做为支撑,以保证网站应用的平稳运行. 大型动态应用系统又可分为几个子系统: 1)Web前端系统 2)负载均衡系统 3)数据库集群系

Web系统架构的思考

大型系统所需要具备的能力 作为一个大型Web系统,那得有大型系统所具备的能力,能够在业务逻辑上更有优势处理各种"大"(数据量大,并发量大,系统逻辑复杂,需求开发迭代快速)的问题.那么一个这样一个系统应该具有哪些能力呢? 所说的处理能力,也就是从一个非技术层面体现一个系统性能的问题.就像老板告诉你,这个系统要快,要好,要稳定,要实时监控数据等等!而对于一个技术人员来讲,你该怎么实现老板对这个系统的标准呢? 这篇文章,我将把一个系统架构比作一个河流,更准切的来讲应该是是由河流,河塘,大坝等

[置顶] 浅谈大型web系统架构

转载原文:http://blog.csdn.net/dinglang_2009/article/details/6863697 分类: 大规模Web 2.0架构 2011-10-11 18:27 12708人阅读 评论(5) 收藏 举报 web服务器负载均衡数据库缓存系统 目录(?)[+] 动态应用,是相对于网站静态内容而言,是指以c/c++.php.Java.perl..net等服务器端语言开发的网络应用软件,比如论坛.网络相册.交友.BLOG等常见应用.动态应用系统通常与数据库系统.缓存系统