【问题标题】:Unable to purge using CURL on VARNISH无法在 VARNISH 上使用 CURL 进行清除
【发布时间】:2016-12-28 10:45:24
【问题描述】:

我无法使用 CURL 清除清漆中的对象

CURL 命令: curl -X PURGE localhost/public/stylesheets/main.css -v curl 命令返回 200 OK 响应。对象没有被清除

config file in VARNISH : default.vcl
sub vcl_miss {
  if (req.request == "PURGE") {
    purge;
    error 404 "Not in cache.";
  }
   if (req.http.user-agent ~ "spider") {
    error 503 "Not presently in cache";
    }
return (fetch);
}

sub vcl_hit {
  if (req.request == "PURGE") {
    purge;
    error 200 "Purged.";
  }
     return (deliver);
}


sub vlc.recv{
if (req.request == "PURGE") {
    if (!client.ip ~ purge) {
      error 405 "Not allowed.";
    }
    return(lookup);
  }
}

请帮帮忙

【问题讨论】:

  • 您可以尝试将acl purge { "localhost"; "127.0.0.1"; } 添加到您的vcl 文件中并测试它是否有效?
  • sub "vlc.recv{" 我可以看到至少有两个错别字。如果这不是复制粘贴错误,而这实际上是您的 vcl 的样子,则需要将其更改为 'sub vcl_recv {'

标签: curl varnish varnish-vcl


【解决方案1】:

在vcl_recv上启用'PURGE'请求,然后在recv上直接执行purge,存在与否忽略,这与purge进程无关

if (client.ip ~ purge && req.request == "PURGE" ){ purge; error 999; return(error)}
if (req.request != "GET" &&
  req.request != "HEAD" &&
  req.request != "PUT" &&
  req.request != "POST" &&
  req.request != "TRACE" &&
  req.request != "OPTIONS" &&
  req.request != "DELETE") {
    /* Non-RFC2616 or CONNECT which is weird. */
    set req.http.xpass="PASS_header";
    return (pass);
}

很多时候 varnish 没有收到真正的请求者 IP(来自您的提供商的一些非透明代理,如亚马逊负载均衡器),所以忘记 client.ip ACL 并在 req.http.x-forwarded-for 上执行正则表达式匹配清除允许的 ips...它不安全...但可能是唯一简单的替代方案

对不起英语不好

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-07
    • 2017-07-22
    • 2014-06-28
    • 1970-01-01
    • 2020-02-10
    • 2021-03-08
    • 1970-01-01
    相关资源
    最近更新 更多