如何让varnish支持虚拟主机:

    if (req.http.host = "www.nihao.com") {

    }

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

  

上图表示以/test1.html开头结尾的url直接送给pass engine不查询缓存

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

上面这个语句表示:以/login或者/admin开头的url不查询缓存,(?i)表示后面跟的字符不区分大小写

对特定类型的资源取消其私有的cookie标识,并强行设定其在varnish服务器中缓存的时长

sub 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;

  }

}

上面是一个例子,注意它是设置在varnish中缓存的时长,而不是在浏览器中所看到的缓存时长,只要客户端请求首部中不包含

no-cache首部,此缓存将直接响应给客户端,如果请求包含了no-cache,跳过代理缓存服务器,直接向原始服务器发送请求

对后端服务器(backend)的定义

    backend name {

      .attribute = "value";

    }

.attribute可以是以下内容:

  .host: BE主机的IP

  .port:BE主机监听的PORT

  .probe: 对BE做健康状态检测

  .max_connections:并发连接最大数量  

  .url: 判定BE健康与否要请求的url

  .expected_response:期望响应状态码;默认为200

上图是一个对后端主机的的动静分离示例,probe是通过对后端主机请求url进行健康状态检测

对后端主机的调用是通过set req.backend_hint命令

上图是对后端服务器负载均衡的一个示例,注意varnish对后端的负载均衡的方法是对后端同一个网页的请求会被分配到同一台服务

器,而不是每次对一个资源的请求被负载均衡到不同的服务器

负载均衡算法:

  fallback, random, round_robin, hash

purge用于清理缓存中的某特定对象及其变种(variants),因此,在有着明确要修剪的缓存对象时可以使用此种方式。HTTP协议的

PURGE方法可以实现purge功能,不过,其仅能用于vcl_hit和vcl_miss中,它会释放内存工作并移除指定缓存对象的所有Vary:-变

种,并等待下一个针对此内容的客户端请求到达时刷新此内容。另外,其一般要与return(restart)一起使用。下面是个在VCL中配置的

示例

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";
}
return (lookup);
}
}
sub vcl_hit {
if (req.request == "PURGE") {
purge;
error 200 "Purged";
}
}
sub vcl_miss {
if (req.request == "PURGE") {
purge;
error 404 "Not in cache";
}
}
sub vcl_pass {
if (req.request == "PURGE") {
error 502 "PURGE on a passed object";
}
}

客户端在发起HTTP请求时,只需要为所请求的URL使用PURGE方法即可,其命令使用方式如下:
# curl -I -X PURGE http://varniship/path/to/someurl

varnish状态引擎2的更多相关文章

  1. WEB缓存系统之varnish状态引擎

    前文我们聊了下varnish的VCL配置以及语法特点,怎样去编译加载varnish的vcl配置,以及命令行管理工具varnishadm怎么去连接varnish管理接口进行管理varnish,回顾请参考 ...

  2. varnish状态引擎1

    vcl: state engine:各引擎之间存一定程度上的相关性:前一个engine如果可以有多种下游engine,则上游engine需要用return指明 要转移的下游engine vcl_rec ...

  3. varnish 相关说明

    一.关于Varnish Varnish 是一款高性能且开源的反向代理服务器和 HTTP 加速器,其采用全新的软件体系机构,和现在的硬件体系紧密配合,与传统的 squid 相比,varnish 具有性能 ...

  4. Vanish 详解

    1.varnish 概述:     varnish是一款高性能且开源的方向代理服务器和HTTP加速器,它的开发者poul-Henning kamp FreeBSD 核心的开发人员之一.varnish采 ...

  5. WEB缓存系统之varnish代理以及健康状态检测配置

    前文我们聊了下varnish的缓存项修剪配置,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12666406.html:今天我来说一下varnish作为代理服务 ...

  6. 学习varnish随笔

    Varnish是一款高性能.开源的反向代理服务器和缓存服务器.Varnish使用内存缓存文件来减少响应时间和网络带宽消耗.这个项目是由挪威的一家报纸Verdens Gang的网络分支起始的,其架构设计 ...

  7. varnish

    html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...

  8. Varnish缓存服务

    Varnish缓存服务详解及应用实现   1.varnish的基本介绍   Varnish 的作者Poul-Henning Kamp是FreeBSD的内核开发者之一,他认为现在的计算机比起1975年已 ...

  9. Varnish缓存服务详解及应用实现

    1.varnish的基本介绍    Varnish 的作者Poul-Henning Kamp是FreeBSD的内核开发者之一,他认为现在的计算机比起1975年已经复杂许多.在1975年时,储存媒介只有 ...

随机推荐

  1. [Java] cmd命令行如何切换目录

    cmd.exe是微软Windows系统基于WINDOWS上的命令解释程序,类似于微软的DOS操作系统.cmd.exe是一个32位的命令行程序,运行在Windows NT/2000/XP/2003/vi ...

  2. 【cl】sikuli启动不了

    公司电脑:win7+64位 问题:点击sikuli_ide没有反应 卸载了,启动电脑,重新安装.

  3. mysql 使用说明-1

    以下内容是根据官方文档翻译的,执行截图是博主自己实测结果. 3.1 Connecting to and Disconnecting from the Server 连接,断开数据库 要连接到mysql ...

  4. Eclipse Gtk+

    From: http://hi.baidu.com/spmno/item/9425018707f295dfd1f8cdbe 1. Project->Properties,然后选 C/C++ Bu ...

  5. 剑指Offer:面试题7——用两个栈实现队列(java实现)

    题目描述:用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 首先定义两个栈 Stack<Integer> stack1 = new Stack<I ...

  6. android界面布局技巧(一)

    (1)//得到手机的宽高 Display display = getWindowManager().getDefaultDisplay(); int screenWidth = display.get ...

  7. windows7 下的日期没有internet时间的选项卡

    原因1:你在某个域里面,退出就可以了 原因2:你把windows Time的服务给禁掉或者关掉了, 步骤:运行,输入services.msc 确定,查找到windows Time开了即可

  8. windows 创建服务提示失败 5 拒绝 访问拒绝

    1.桌面创建文本,输入 sc create .....echo. & pause 保存,重命名为   .bat 2.右键该文件,管理员运行

  9. MongoDB 1: NoSQL 和 SQL的区别

    导读:本篇博客,主要是结合自己在项目中的使用,简单的阐述一下NoSQL和SQL的区别.那么,根据自己的应用,NoSQL这边,选择的是MongoDB(Redis虽然也是,但属于内存存储,这里不予说明). ...

  10. 創建HTTP 服務器

    var http = require('http'); var fs = require('fs'); var server = http.createServer(function(req, res ...