当前位置:首页 > CN2资讯 > 正文内容

varnish代理缓存讲解

3天前CN2资讯

一、varnish的基础知识

Varnsih工作原理

   1、varnish工作原理

   客户端请求到达varnish代理,child线程中的accept接收下请求进程,交给worker threads处理,worker threads先去object expiry找缓存,

没找到就去上游服务器backend lcatinon找到资源,返回varnish代理,查看是否符合缓存规则,符合则缓存,不符合则直接返回给客户端

2、缓存分类

    代理缓存:客户端请求代理,先去找缓存,缓存没有,代理会去上游服务器找到资源,并缓存在代理,然后返回给客户端

旁路缓存:客户端去缓存找缓存,缓存没命中返回客户端,客户端去上游服务器找到资源返回到本地,然后再把资源缓存到缓存

3、Memcache适用的场景

memcache的缺点:不能适应实时更新,如果实时更新,缓存不命中,命中率低。

memcache支持分布式缓存,有mysql主从就不需要memcache,memcache适合多台mysql集群环境,此时直接到mysql缓存取查询性能较好

4、varnish各状态引擎的功用:

vcl_recv:实现安全策略,仅处理可以识别http方法,且只缓存get和head的方法,不缓存用户特有的数据(根据客户端的请求作出的缓存策略) vcl_fetch:根据服务端的响应作出的策略缓存 vcl_pipe: 用于将请求直接发往后端主机; vcl_hash: 自定义hash生成时的数据来源 vcl_pass: 用于将请求直接传递至后端主机; vcl_hit: 从缓存中查找到缓存对象时要执行的操作; vcl_miss: 从缓存中款查找到缓存对象时要执行的操作; vcl_deliver: 将用户请求的内容响应给客户端时用到的方法; vcl_error: 在varnish端合成错误响应时的缓存策略;

5、Varnish缓存的原理

二、varnish的实验

Node1 172.16.11.143 centos6.5+varnish

Node2 172.16.11.144 centos6.5+http

1、软件安装

http:///redhat/varnish-3.0/el6/x86_64/varnish/ varnish-libs-3.0.5-1.el6.x86_64.rpm varnish-3.0.5-1.el6.x86_64.rpm varnish-docs-3.0.5-1.el6.x86_64.rpm node1 rpm -ivh varnish-libs-3.0.5-1.el6.x86_64.rpm varnish-3.0.5-1.el6.x86_64.rpm /etc/logrotate.d/varnish #滚动日志 /etc/rc.d/init.d/varnish #服务 /etc/rc.d/init.d/varnishlog #日志 /var/lib/varnish #共享缓存 /var/log/varnish #日志存放 /etc/varnish/default.vcl #配置文件

2、简单的代理配置

node1

VARNISH_LISTEN_PORT=80 VARNISH_STORAGE_SIZE=64M #设置缓存大小 # # # Backend storage specification #VARNISH_STORAGE="file,${VARNISH_STORAGE_FILE},${VARNISH_STORAGE_SIZE}” VARNISH_STORAGE="malloc,${VARNISH_STORAGE_SIZE}" #缓存名字叫什么 Vim /etc/varnish/default.vcl backend default {   .host = "172.16.11.144";   .port = "80"; } Service varnish restart Ss -tnl #查看端口是否监听

Node2

Yum install httpd -y Vim /var/www/html/index.html <h1>node2</h1> Service httpd restart Chkconfig --add httpd Chkconfig httpd on

3、让后端服务器可以查看是那个客户端访问自己的

Node1

Cp /etc/varnish/default.vcl /etc/varnish/test.vcl Vim /etc/varnish/test.vcl sub vcl_recv {      if (req.restarts == 0) {         if (req.http.x-forwarded-for) {             set req.http.X-Forwarded-For =                 req.http.X-Forwarded-For + ", " + client.ip;         } else {             set req.http.X-Forwarded-For = client.ip;         }      }    return (lookup); } [root@localhost ~]# varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082 varnish> vcl.list  #查看哪些可用 200        active          2 boot available       0 test1 varnish> vcl.load test1 test1.vcl #编译 200        VCL compiled. varnish> vcl.use test1 #使用 200        varnish> vcl.list #查看具体可用 200        available       2 boot active          0 test1

Node2

Vim //etc/httpd/conf/httpd.conf LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined Service httpd reload ##################################################################################### 浏览器测试 http://172.16.11.143 Node2 tail /var/log/httpd/access_log 172.16.0.101 - - [04/Sep/2014:16:43:27 +0800] "GET /favicon.ico HTTP/1.1" 404 288 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36"

4、设置查看是否命中缓存

Node1

Vim /etc/varnish/test.vcl sub vcl_deliver {         if (obj.hits > 0) {                 set resp.http.X-Cache = "Hit Via"+" "+ server.hostname;         } else {                 set resp.http.X-Cache = "Miss Via"+" "+ server.hostname;         } return (deliver); } [root@localhost ~]# varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082 varnish> vcl.load test2 test1.vcl 200        VCL compiled. varnish> vcl.use test2 200        varnish> vcl.list 200        available       0 boot available       2 test1 active          0 test2 浏览器访问F12查看

5、精确设置那个页面不用缓存

if (req.url ~”~/test.html$”) { Return(pass) } 编译使用 Vcl.load test3 test1.vcl Vcl.use test2 Vcl.list 浏览器测试

http://172.16.11.143/test/index.html

变量使用规则

6、内置变量使用的在那个状态引擎中

7、Varnish内置变量:

请求到达时可用的内置变量: req.url req.request req.http.HEADER req.restarts: 请求被重启的次数; server.ip server.port server.hostname client.ip req.backend 向后后端主机请求时可用的内置变量 bereq.url bereq.request bereq.http.HEADER bereq.connect_timeout bereq.proto 从后端主机获取到响应的object时可用的内置变量 beresp.status beresp.response beresp.http.HEADER beresp.ttl beresp.backend.ip beresp.backend.port 缓存对象进入缓存时可用的内置变量(只能用于vcl_hit或vcl_error,且大多为只读) obj.status obj.response obj.ttl obj.hits obj.http.HEADER 响应给客户端时可用的内置变量 resp.proto resp.status resp.response resp.http.HEADER

8、设置定义acl清除缓存

acl purgers {         “127.0.0.1”;         “192.168.0.0”/24;  #定义那些可以来清除缓存 } sub vcl_recv {         if (req.request == “PURGE”) {                 if (!client.ip ~ purgers) {                         error 405 “Method not allowed”;                 } #判断ip是否为acl内的地址,不是的话就不用去寻找缓存                 return (lookup); #是acl里定义内的地址就去查找缓存         } } #在hash下面设置miss 和hit sub vcl_hit {         if (req.request == “PURGE”) {                 purge;                 error 200 “Purged”;         } #缓存命中给它个返回 error200 } sub vcl_miss {         if (req.request == “PURGE”) {                 purge;                 error 404 “Not in cache”;         } #缓存没有命中给它个error404 } #sub vcl_pass { #       if (req.request == “PURGE”) { #               error 502 “PURGE on a passed object”; #       } #} ##################################################################################### 再编译再测试 Curl -I http://172.16.11.143/index.html Curl -X PURGE http://172.16.11.143/index.html  #指定修剪缓存命中

9、varnish 检测健康状态检测

.url 探测健康状态的请求url .request 探测请求内容的格式 .window: 至少要检测多少次资源 .threshold: 至少要检测多少次资源从无到有或从有到无 .initial:varnish启动时对后端主机至少需要多少次成功探测,默认为threshold .interval:探测请求发送的周期 .expected_response: 期望主机响应的状态码 .timeout : 每次探测请求的过期时长,默认为2秒

示例

在backend default 主机下面定义 backend default {   .host = "172.16.11.144";   .port = "80";   .probe = {         .url = "/index.html";         .interval =  2s;         .window =  8;         .threshold = 2; } ##################################################################################### 编译配置 Varnishstat Backend.list #查看健康状态 我们可以去后端停掉http,在查看,开启,再查看

10、定义轮询

增加一个节点

node3 172.16.11.145 centos6.5+http

backend web1 {   .host = "172.16.11.144";   .port = "80";   .probe = {         .url = "/index.html";         .interval = 2s;         .window = 8;         .threshold = 2; } } backend web2 {   .host = "172.16.11.145";   .port = "80";   .probe = {         .url = "/index.html";         .interval = 2s;         .window = 8;         .threshold = 2; } } director webservers round-robin {         { .backend = web1; }         { .backend = web2; } } #         return (pass); #     }     set req.backend = webservers;     return (lookup); } [root@localhost ~]# varnishadm  -S /etc/varnish/secret -T 127.0.0.1:6082 varnish> varnish> vcl.load test9 test1.vcl 200        VCL compiled. varnish> vcl.use test9 200        varnish> backend.list 200        Backend name                   Refs   Admin      Probe default(172.16.11.144,,80)     5      probe      Healthy (no probe) web1(172.16.11.144,,80)        1      probe      Healthy 8/8 web2(172.16.11.145,,80)        1      probe      Healthy 8/8

也可以去网页测试

http://172.16.11.143

    你可能想看:

    扫描二维码推送至手机访问。

    版权声明:本文由皇冠云发布,如需转载请注明出处。

    本文链接:https://www.idchg.com/info/25122.html

    分享给朋友:

    “varnish代理缓存讲解” 的相关文章

    探索香港节点的地理与经济优势及其全球数据传输作用

    香港节点的地理与经济优势 谈到香港的地理和经济优势,我总是想起它的独特地理位置。香港位于亚洲的心脏地带,紧密相连着中国大陆、东南亚、日本和韩国等区域。这些距离使得这里成为了数据流量的重要连接点。无论是企业还是个人,想要快速和高效地进行国际沟通时,香港总是首选的地方之一。作为一个全球重要的金融中心,香...

    Wikihost:构建高效知识库的理想WordPress主题

    Wikihost是一个专为WordPress平台设计的知识库主题,目的在于帮助用户轻松创建和管理知识库文章与文档页面。这款主题适合各种类型的网站,从小型企业到大型社区,用户都能通过它建立富有信息性的页面。Wikihost给用户提供了一整套便捷的功能,帮助他们分享知识和信息。 我发现Wikihost的...

    如何获取便宜稳定算力以推动科研与技术创新

    便宜稳定算力是一个现代计算资源获取的概念,特别是在人工智能、深度学习及科学计算等领域中,这种计算能力的经济性与可靠性显得尤为重要。它的定义可以简单理解为以相对较低的成本获得高效、稳定的计算资源。随着科技的迅速发展,企业和研究机构对计算资源的需求逐渐增加,如何以合理的投资实现算力购买成为一个值得关注的...

    阿里云国际站:轻松注册与支付方式全解析

    什么是阿里云国际站? 在这个科技迅速发展的时代,云计算已经成为许多企业和个人开展业务的重要基础设施。阿里云国际站便是一处全球化的云计算服务平台,旨在为世界各地的用户提供高效、灵活和安全的云计算服务。它不仅支持多种功能,还具备强大的全球基础设施,能够满足不同用户的需求。 阿里云国际站被设定为一个面向全...

    深入了解M247 VPS:价格、性能与适用场景全分析

    M247 VPS概述 在如今数字化时代,云计算的需求不断上升,各种VPS(虚拟专用服务器)服务也层出不穷。今天我想和大家分享的是M247 VPS,它是一家相对年轻但却在行业内逐渐崭露头角的服务商。M247成立于2012年,隶属于M24Seven Group旗下,提供多种服务,包括VPS、虚拟主机、服...

    如何选择合适的IP站及其运作原理

    IP站的运作原理 在探讨IP站的运作原理之前,首先需要明确什么是IP站。简单来说,IP站是一种特殊的网络服务,它利用互联网协议(IP)提供不同的网络功能和服务。每个IP站都与一个或多个IP地址相连,能够用来访问信息、数据或应用程序。在我的网络体验中,无论是个人使用还是企业应用,IP站总是扮演着至关重...