我正在使用以下代码清除网站的主页:
$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的响应与预期一致:
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: 15和X-Cache: HIT,这表明页面仍被缓存且已存在15秒。
TTL为120。
我是不是遗漏了什么?
谢谢,杰克
发布于 2013-01-31 06:10:56
为了消除所有其他php/curl问题,我将从最基本的低级检查开始。
这对我来说很有效:
netcat -C varnish_hostname 80 <<EOF
PURGE /the/url
Host: hostname
EOF一旦你得到了这个工作,你就知道你的VCL规则和VCL不是问题,你可以继续到curl/php级别。
编辑两个备注:
http
netcat -C选项用于根据协议将换行符转换为字符对。
发布于 2012-08-21 23:15:32
我想你不会在default.vcl中检查清除,default.vcl应该包含如下内容:
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";
}
}发布于 2012-08-18 13:31:55
我想评论你应该发布你的default.vcl文件,但我的声誉太低了。
PURGE是在你的vcl文件中实现的(或者至少在你期望它工作的时候应该是这样的),它做什么和不做什么都在代码中。它可能会根据您连接的ip地址阻止您的清除,也可能无法实现。
https://stackoverflow.com/questions/11900220
复制相似问题