清漆 4,清除 - 我以为我已经弄清楚了
Varnish 4, Purging - I thought I had it all figured out
好吧,我会保持简单,PURGE 请求(或者我是这么认为的?)几乎都是按字面意思处理的:
acl purge {
"localhost";
"127.0.0.1";
}
然后
if (req.method == "PURGE") {
if (!client.ip ~ purge) {
return(synth(405, "This IP is not allowed to send PURGE requests."));
}
return (purge);
}
我相当确定以上两个陈述都是 "correct",我挂断的是如果我发送
curl -X PURGE http://domain.com/
或
curl -X PURGE http://domain.com/.*
并且 Varnish 发送回 200 Purged well...缓存被清除了吗?即使它只是主页而不是整个缓存(发誓它全部使用上面的 .* 方法)是并且上面的代码片段是正确的是否有任何特殊原因 http://domain.com(如在实际主页中)是没有清除?
varnishncsa 显示:
MYIP - - [16/Feb/2015:23:23:10 -0600] "PURGE http://domain.com/ HTTP/1.1" 200 241 "-" "curl/7.29.0"
我知道我一定漏掉了一些愚蠢的东西,但我想不通?
official documentation 基本上说明了您所做的,但请记住 PURGE != BAN,您可以在 BAN 中使用正则表达式,但不能在 PURGE 中使用。使用 PURGE,您可以删除一个特定 url.
的所有 Vary 定义副本
在我对 4.0.2 的测试中,它按建议工作,我缓存了主页,我做了一个 curl -X PURGE http://localhost:8080/
并且在 varnishlog 中我看到(除其他外):
* << Request >> 65542
- Begin req 65541 rxreq
- Timestamp Start: 1424188792.108573 0.000000 0.000000
- Timestamp Req: 1424188792.108573 0.000000 0.000000
- ReqStart ::1 60496
- ReqMethod PURGE
- ReqURL /
- VCL_acl MATCH purge "localhost"
- VCL_return purge
- VCL_call HASH
- VCL_return lookup
- VCL_call PURGE
重新加载我看到一个 MISS 和后端请求(因为它不在缓存中):
* << BeReq >> 65548
- Begin bereq 65547 fetch
- Timestamp Start: 1424188815.112540 0.000000 0.000000
- BereqMethod GET
- BereqURL /
- BereqProtocol HTTP/1.1
- VCL_call BACKEND_RESPONSE
- TTL VCL 120 21600 0 1424188815
- VCL_return deliver
* << Request >> 65547
- Begin req 65546 rxreq
- ReqMethod GET
- ReqURL /
- VCL_return hash
- VCL_call HASH
- VCL_return lookup
- Debug "XXXX MISS"
- VCL_call MISS
- VCL_return fetch
- Link bereq 65548 fetch
顺便说一句,将“::1”添加到清除 acl 中的 ips 列表中,以防万一您使用的是 ipv6。它会返回 405,但谁知道呢。
好吧,我会保持简单,PURGE 请求(或者我是这么认为的?)几乎都是按字面意思处理的:
acl purge {
"localhost";
"127.0.0.1";
}
然后
if (req.method == "PURGE") {
if (!client.ip ~ purge) {
return(synth(405, "This IP is not allowed to send PURGE requests."));
}
return (purge);
}
我相当确定以上两个陈述都是 "correct",我挂断的是如果我发送
curl -X PURGE http://domain.com/
或
curl -X PURGE http://domain.com/.*
并且 Varnish 发送回 200 Purged well...缓存被清除了吗?即使它只是主页而不是整个缓存(发誓它全部使用上面的 .* 方法)是并且上面的代码片段是正确的是否有任何特殊原因 http://domain.com(如在实际主页中)是没有清除?
varnishncsa 显示:
MYIP - - [16/Feb/2015:23:23:10 -0600] "PURGE http://domain.com/ HTTP/1.1" 200 241 "-" "curl/7.29.0"
我知道我一定漏掉了一些愚蠢的东西,但我想不通?
official documentation 基本上说明了您所做的,但请记住 PURGE != BAN,您可以在 BAN 中使用正则表达式,但不能在 PURGE 中使用。使用 PURGE,您可以删除一个特定 url.
的所有 Vary 定义副本在我对 4.0.2 的测试中,它按建议工作,我缓存了主页,我做了一个 curl -X PURGE http://localhost:8080/
并且在 varnishlog 中我看到(除其他外):
* << Request >> 65542
- Begin req 65541 rxreq
- Timestamp Start: 1424188792.108573 0.000000 0.000000
- Timestamp Req: 1424188792.108573 0.000000 0.000000
- ReqStart ::1 60496
- ReqMethod PURGE
- ReqURL /
- VCL_acl MATCH purge "localhost"
- VCL_return purge
- VCL_call HASH
- VCL_return lookup
- VCL_call PURGE
重新加载我看到一个 MISS 和后端请求(因为它不在缓存中):
* << BeReq >> 65548
- Begin bereq 65547 fetch
- Timestamp Start: 1424188815.112540 0.000000 0.000000
- BereqMethod GET
- BereqURL /
- BereqProtocol HTTP/1.1
- VCL_call BACKEND_RESPONSE
- TTL VCL 120 21600 0 1424188815
- VCL_return deliver
* << Request >> 65547
- Begin req 65546 rxreq
- ReqMethod GET
- ReqURL /
- VCL_return hash
- VCL_call HASH
- VCL_return lookup
- Debug "XXXX MISS"
- VCL_call MISS
- VCL_return fetch
- Link bereq 65548 fetch
顺便说一句,将“::1”添加到清除 acl 中的 ips 列表中,以防万一您使用的是 ipv6。它会返回 405,但谁知道呢。