34-3 varnish状态引擎详解

配置说明

Node1:varnish服务端,IP:192.168.1.131 CentOS7.2

Node2: 测试客户端  IP:192.168.1.132 CentOS7.2

1、安装varnish服务

安装varnish

[[email protected] ~]# yum -y install varnish #需要EPEL源

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

[[email protected] varnish]# vim varnish.params 

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

修改

.host = "127.0.0.1"; #约17行

.host = "192.168.1.132";

修改

  .port = "8080"; #约18行

  .port = "80";

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

2、准备客户端

[[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

3、测试

在浏览器打开

http://192.168.1.131:6081/test1.html

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

测试1

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

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

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

在sub vcl_recv添加如下内容(约26行左右)

    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

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

vcl.show test1

200       

测试2

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

在sub vcl_deliver(约60行左右) 段添加如下内容:

    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

测试结果

[[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: Sat, 10 Sep 2016 13:36:31 GMT

Server: Apache/2.4.6 (CentOS)

Last-Modified: Fri, 09 Sep 2016 09:55:12 GMT

ETag: "f-53c102475b461"

Content-Length: 15

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

X-Varnish: 32784 13

Age: 35

Via: 1.1 varnish-v4

X-Cache: HIT

Connection: keep-alive

总结:由于该网页之前被访问过,故X-Cache的值为HIT

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

HTTP/1.1 200 OK

Date: Sat, 10 Sep 2016 13:37:56 GMT

Server: Apache/2.4.6 (CentOS)

Last-Modified: Fri, 09 Sep 2016 09:55:12 GMT

ETag: "f-53c102475b461"

Content-Length: 15

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

X-Varnish: 32786

Age: 0

Via: 1.1 varnish-v4

X-Cache: MISS

Connection: keep-alive

总结:由于该网页之前未被访问过,故X-Cache的值MISS

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

HTTP/1.1 200 OK

Date: Sat, 10 Sep 2016 13:37:56 GMT

Server: Apache/2.4.6 (CentOS)

Last-Modified: Fri, 09 Sep 2016 09:55:12 GMT

ETag: "f-53c102475b461"

Content-Length: 15

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

X-Varnish: 15 32787

Age: 25

Via: 1.1 varnish-v4

X-Cache: HIT

Connection: keep-alive

总结:网页被访问过后,X-Cache的值就变为HIT

测试3(引入变量)

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

在sub vcl_deliver(约65行左右) 段添加如下内容:

    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/test7.html

HTTP/1.1 200 OK

Date: Sat, 10 Sep 2016 14:09:05 GMT

Server: Apache/2.4.6 (CentOS)

Last-Modified: Fri, 09 Sep 2016 09:55:12 GMT

ETag: "f-53c102475b461"

Content-Length: 15

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

X-Varnish: 32789

Age: 0

Via: 1.1 varnish-v4

X-Cache: MISS 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: Sat, 10 Sep 2016 14:09:05 GMT

Server: Apache/2.4.6 (CentOS)

Last-Modified: Fri, 09 Sep 2016 09:55:12 GMT

ETag: "f-53c102475b461"

Content-Length: 15

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

X-Varnish: 17 32790

Age: 33

Via: 1.1 varnish-v4

X-Cache: HIT from 192.168.1.131

Connection: keep-alive

时间: 2024-09-28 23:15:39

34-3 varnish状态引擎详解的相关文章

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="ma

varnish基础概念详解

varnish基础概念详解 比起squid更加轻量级,大致有以下几个特点: ·可以基于内存缓存,也可以在磁盘上缓存,但是就算存放在磁盘上,也不能实现持久缓存 只要进程崩溃,此前缓存统统失效,无论是在内存还是在磁盘,但是现在已经具备持久缓存功能,但是仍然在实验阶段,经常容易崩溃,而且最大大小不能超过1G 如果期望内存大小超过几十个G,比如图片服务器,纯粹使用内存,性能未必好,这时候可以使用磁盘进行缓存,或SSD X 2 做RAID 避免磁盘损坏,在实现随机访问上 ssd硬盘要比机械硬盘要好的多,如

Varnish 3.X详解

一.varnish定义 Varnish与一般服务器软件类似,分为master(management)进程和child(worker,主要做cache的工作)进程.master进程读入命令,进行一些初始化,然后fork并监控child进程.child进程分配若干线程进行工作,主要包括一些管理线程和很多woker线程. 在网站并发量过大时:无法通过向上或向外扩展来解决时:必须引入缓存来减小服务器的压力:而互联网在传输过程中三个关键点:客户端入口.传输中间路由.服务器端出口:相对于响应报文缓存可以解决

ASP.NET状态管理详解,让你明明白白

开发WinFrom的程序员可能不会在意维护应用程序的状态,因为WinFrom本身就在客户端运行,可以直接在内存中维护其应用程序状态.但ASP.NET应用程序在服务器端运行,客户端使用无状态的http协议对ASP.NET应用程序发出请求,ASP.NET应用程序响应用户请求,向客户端发送请求的HTML代码,服务器并不会维护任何客户端状态.考虑一个有成千上万并发用户的服务器,如果为每一个用户都维护状态的话会耗费非常多的资源. 由于使用无状态的http协议作为web应用程序的通信协议,当客户端每次请求页

HTTP协议状态码详解(HTTP Status Code)(转)

原文链接:HTTP协议状态码详解(HTTP Status Code) 使用ASP.NET/PHP/JSP 或者javascript都会用到http的不同状态,一些常见的状态码为: 200 – 服务器成功返回网页 404 – 请求的网页不存在 503 – 服务不可用 1xx(临时响应) 表示临时响应并需要请求者继续执行操作的状态代码. 代码   说明 100   (继续) 请求者应当继续提出请求. 服务器返回此代码表示已收到请求的第一部分,正在等待其余部分.  101   (切换协议) 请求者已要

如何查看mysql数据库的引擎/MySQL数据库引擎详解

一般情况下,mysql会默认提供多种存储引擎,你可以通过下面的查看: 看你的mysql现在已提供什么存储引擎:mysql> show engines; 看你的mysql当前默认的存储引擎:mysql> show variables like '%storage_engine%'; 你要看某个表用了什么引擎(在显示结果里参数engine后面的就表示该表当前用的存储引擎):mysql> show create table 表名; MySQL数据库引擎详解 作为Java程序员,MySQL数据库

HTTP协议   状态码详解

http://www.cnblogs.com/TankXiao/archive/2013/01/08/2818542.html#code4xx HTTP协议   状态码详解,布布扣,bubuko.com

设计模式 - 状态模式(state pattern) 未使用状态模式 详解

状态模式(state pattern) 未使用状态模式 详解 本文地址: http://blog.csdn.net/caroline_wendy 状态模式可以控制状态的转换, 未使用设计模式时, 程序会非常繁杂. 具体方法: 1. 状态转换类. /** * @time 2014年7月11日 */ package state; /** * @author C.L.Wang * */ public class GumballMachine { final static int SOLD_OUT =

Android研究之为基于 x86 的 Android* 游戏选择合适的引擎详解

摘要 游戏开发人员知道 Android 中蕴藏着巨大的机遇. 在 Google Play 商店的前 100 款应用中,约一半是游戏应用(在利润最高的前 100 款应用中,它们所占的比例超过 90%). 如要跻身该市场,开发速度非常关键. 一些刚起步的独立开发人员更愿意从零开始来开发自己的所有代码:但是为了达到更高的质量而不用花费数年的时间进行开发,其他人可能会选择已有的游戏引擎.上章研究了英特尔 Android* 开发人员指南上的对等应用详解,在选择引擎时,你可以考虑以下几个因素: 成本 - 你