清漆缓存禁止模式匹配

varnish cache banning with pattern matching

好吧,老实说,我不知道 varnish vcl,我可以解决一些基本的问题,但我不是很了解,这显然是我遇到问题的原因。

我正在尝试通过 http 请求设置缓存禁止,但是请求不能通过 DNS 进入,而是通过 varnish box 的 IP 地址,否则我不能确定每个 varnish框缓存将刷新目标;这是因为我们在 ELB 后面有几个清漆盒,所以您不能保证禁止请求不会两次进入同一个盒子,因此通过 IP 执行此操作。

我正在使用它来确保只允许禁止允许的 IP,但这不起作用:

sub vcl_hit {
    if (req.request == "BAN") {
        ban("req.url ==" + req.url);
        error 200 "Purged";
    }
}

我真的不知道该怎么做才能让它工作,我看过了,但我发现的大多数教程似乎都是针对完整 URL 而不仅仅是 ip + pattern_to_purge

答案是使用:

 if (req.request == "BAN") {
    if (req.http.X-Debug != "True") {   
      error 405 "Not allowed.";
    }
    ban("obj.http.x-url ~ " + req.url);
    error 200 "ban added";
  }

虽然这将 return 200 无论缓存中的项目是否存在,它确实添加了禁令。

根据你的配置示例,我希望你使用 varnish 3 您可以添加允许执行清除的 ips 列表,如下所示

acl ban_allowed_ip {
    "127.0.0.1";
    "127.0.0.2";
}

在您的 if(req.request =="BAN") 中添加以下内容

if (!client.ip ~ ban_allowed_ip) {
    error 405 "Not allowed.";
}