(清漆2.1.5)不同的清漆处理请求的不同方法
我在清漆中出现了一些奇怪的情况。我试图通过从NodeJS发起的PURGE请求来使缓存对象无效。
我的测试包括请求对象,让它缓存,然后执行清除请求,然后再次请求(导致提取),然后再次请求它导致刷新缓存对象的命中。
当我通过Firefox调试控制台测试它时,它工作正常。所有步骤似乎按预期工作。当我在NodeJS中测试整个过程时,它按预期工作,就好了。但是,当我通过Firefox让对象缓存,然后尝试通过NodeJS使其无效时,它会报告404 Not in缓存。
我100%确定我使用的是相同的URI,我不知道它为什么会这样做。有没有人遇到过这个问题?如果是的话,这个问题的解决方案是什么?
这是我的VCL:
backend default {
.host = "127.0.0.1";
.port = "80";
}
acl purge {
"localhost";
"*loadbalancer-ip*";
}
sub vcl_recv {
if (req.request == "PURGE") {
if(!client.ip ~ purge) {
error 405 "Not allowed.";
}
return (lookup);
} else if (req.url ~ "(?i)\.(jpeg|jpg|png|gif|ico|js|css|xml)$") {
unset req.http.Cookie;
return (lookup);
} else {
return (pass);
}
}
sub vcl_hit {
if (req.request == "PURGE") {
set obj.ttl = 0s;
error 200 "Purged";
}
}
sub vcl_miss {
if (req.request == "PURGE") {
error 404 "Not in cache.";
}
}
sub vcl_fetch {
if (req.url ~ "(?i)\.(jpeg|jpg|png|gif|ico|js|css|xml)$") {
unset beresp.http.set-cookie;
return (deliver);
}
}
sub vcl_deliver {
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT";
} else {
set resp.http.X-Cache = "MISS";
}
}
正如你看到的,我的配置是非常简单的。此配置仅用于测试目的,我知道使用loadbalancer IP并不安全,一旦一切正常,我会将其更改为使用Forwarded-For IP。