zoukankan      html  css  js  c++  java
  • varnish状态引擎2

    如何让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

  • 相关阅读:
    【修正】gooogleman嵌入式联盟部分图标,并增加gooogleman名片(20101205)
    【程序基础】==和=号的区别
    gooogleman嵌入式开发板联盟准备配发嵌入式视频教程
    【终极版】gooogleman嵌入式开发板联盟图标发布以及使用说明
    关于wince驱动和应用学习的N个问题
    【原创】深刻体会wince 驱动中Sleep函数的作用
    网站策划的经典语录
    repeater中用单选按钮
    一个专业制作网站者的自白
    (原创)文件压缩代码
  • 原文地址:https://www.cnblogs.com/linuxboke/p/5510623.html
Copyright © 2011-2022 走看看