首页 > 代码库 > 34-3 varnish状态引擎详解

34-3 varnish状态引擎详解

配置说明

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

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


1、安装varnish服务

安装varnish

[root@Node1 ~]# yum -y install varnish #需要EPEL源

[root@Node1 ~]# cd /etc/varnish/

[root@Node1 varnish]# vim varnish.params 

[root@Node1 varnish]# vim default.vcl

修改

.host = "127.0.0.1"; #约17行

.host = "192.168.1.132";

修改

  .port = "8080"; #约18行

  .port = "80";

[root@node1 ~]# systemctl start varnish.service   


2、准备客户端

[root@Node2 ~]# yum -y install httpd

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

[root@Node2 ~]# systemctl start httpd.service


3、测试

在浏览器打开

http://192.168.1.131:6081/test1.html


[root@node1 ~]# varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082



测试1

[root@node1 ~]# cd /etc/varnish/

[root@node1 varnish]# cp default.vcl test.vcl

[root@node1 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);



[root@node1 ~]# 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

[root@node1 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";

    }    


[root@node1 ~]# 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


测试结果


[root@node3 ~]# curl http://192.168.1.131:6081/test5.html

Page 5 on Web1

[root@node3 ~]# curl http://192.168.1.131:6081/test5.html

Page 5 on Web1

[root@node3 ~]# curl http://192.168.1.131:6081/test5.html

Page 5 on Web1

[root@node3 ~]# 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


[root@node3 ~]# 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


[root@node3 ~]# 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(引入变量)

[root@node1 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;

    }


[root@node1 ~]# 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


[root@node3 ~]# 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



[root@node3 ~]# 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

本文出自 “追梦” 博客,请务必保留此出处http://sihua.blog.51cto.com/377227/1854434

34-3 varnish状态引擎详解