(清漆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。