首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >清除Varnish缓存失败

清除Varnish缓存失败
EN

Stack Overflow用户
提问于 2012-08-10 18:55:05
回答 4查看 8.5K关注 0票数 4

我正在使用以下代码清除网站的主页:

代码语言:javascript
复制
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "http://www.mysite.com:8080/");
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PURGE");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, 1000);

$r = curl_exec($ch);

echo "<PRE>$r</PRE>";

curl_close($ch);

来自Varnish的响应与预期一致:

代码语言:javascript
复制
HTTP/1.1 200 Purged.
Server: Varnish
Content-Type: text/html; charset=utf-8
Retry-After: 5
Content-Length: 382
Accept-Ranges: bytes
Date: Fri, 10 Aug 2012 10:50:56 GMT
X-Varnish: 617777456
Age: 0
Via: 1.1 varnish
Connection: close
X-Cache: MISS

所以现在我认为它被清除了,但是进一步调用页面来检查头文件表明它没有被清除。因为同时设置了Age: 15X-Cache: HIT,这表明页面仍被缓存且已存在15秒。

TTL为120。

我是不是遗漏了什么?

谢谢,杰克

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-01-31 06:10:56

为了消除所有其他php/curl问题,我将从最基本的低级检查开始。

这对我来说很有效:

代码语言:javascript
复制
netcat -C varnish_hostname 80 <<EOF
PURGE /the/url
Host: hostname

EOF

  • 将varnish_hostname替换为您的实际varnish hostname.
  • Replace 80替换为varnish侦听的实际端口。
  • 将// url替换为要清除的URL的路径部分,以清除
    • 将hostname替换为要清除的URL中的主机名部分。

一旦你得到了这个工作,你就知道你的VCL规则和VCL不是问题,你可以继续到curl/php级别。

编辑两个备注:

http

  • 您可能必须快速键入以上命令以防止连接过早关闭,因为现在许多堆栈不允许在连接建立和
  1. 请求之间有较长的延迟,以防止半开放的DoS攻击。你可以通过提前准备整个输入,将其复制到粘贴缓冲区,然后单击鼠标粘贴整个格式回复信息。
  2. HTTP请求报头必须以如上所示的双新行结尾。netcat -C选项用于根据

协议将换行符转换为字符对。

票数 5
EN

Stack Overflow用户

发布于 2012-08-21 23:15:32

我想你不会在default.vcl中检查清除,default.vcl应该包含如下内容:

代码语言:javascript
复制
acl purge {
        "localhost";
        "192.168.55.0"/24;
}

sub vcl_recv {
        # allow PURGE from localhost and 192.168.55...

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

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

sub vcl_miss {
        if (req.request == "PURGE") {
                error 200 "OK but nothing to purge - URL was not in cache";
        }
}
票数 2
EN

Stack Overflow用户

发布于 2012-08-18 13:31:55

我想评论你应该发布你的default.vcl文件,但我的声誉太低了。

PURGE是在你的vcl文件中实现的(或者至少在你期望它工作的时候应该是这样的),它做什么和不做什么都在代码中。它可能会根据您连接的ip地址阻止您的清除,也可能无法实现。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11900220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档