看来 Varnish 缺少或没有正确验证缓存。当我尝试清除缓存时,我收到 200 OK 缓存已成功清除,但我的页面没有更新。我只是对我的 footer.php 进行 HTML 更改(使用 WordPress),但它们没有出现。我检查了我的标题,它们如下:
HTTP/1.1 200 OK
Server: nginx/1.6.0
Content-Type: text/html
Last-Modified: Wed, 23 Apr 2014 18:47:17 GMT
ETag: "53580ab5-2"
Content-Length: 2
Accept-Ranges: bytes
Date: Fri, 10 Oct 2014 15:53:28 GMT
X-Varnish: 21166333
Age: 0
Via: 1.1 varnish
Connection: keep-alive
X-Varnish 标头中缺少“填充缓存的请求的 ID”。
因此我检查了标题,直接从托管我网站的 VPS 运行命令,它似乎运行正常:
HTTP/1.1 200 OK
Server: nginx/1.6.0
Content-Type: text/html; charset=UTF-8
Vary: Accept-Encoding
X-Powered-By: PHP/5.4.33
X-Pingback: http://example.com/xmlrpc.php
Date: Fri, 10 Oct 2014 15:52:56 GMT
X-Varnish: 21166331 21166330
Age: 21
Via: 1.1 varnish
Connection: keep-alive
这是我的 VCL 文件:
backend default {
.host = "127.0.0.1";
.port = "8080";
}
acl purge {
"localhost";
"127.0.0.1";
"173.10.93.222";
}
sub vcl_recv {
if (req.request == "BAN") {
error 200 "Cached Cleared Successfully.";
}
if (req.request == "PURGE") {
if (!client.ip ~ purge) {
error 405 "Not allowed.";
}
return(lookup);
}
if (req.url ~ "^/$") {
unset req.http.cookie;
}
}
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.";
}
if (!(req.url ~ "wp-(login|admin)")) {
unset req.http.cookie;
}
if (req.url ~ "^/[^?]+.(jpeg|jpg|png|gif|ico|js|css|txt|gz|zip|lzma|bz2|tgz|tbz|html|htm)(\?.|)$") {
unset req.http.cookie;
set req.url = regsub(req.url, "\?.$", "");
}
if (req.url ~ "^/$") {
unset req.http.cookie;
}
}
sub vcl_fetch {
if (req.url ~ "^/$") {
unset beresp.http.set-cookie;
}
if (!(req.url ~ "wp-(login|admin)")) {
unset beresp.http.set-cookie;
}
}
当我检查网站 www.isvarnishworking.com 时,我得到了以下信息:
是的!有点!Varnish 似乎正在响应该 URL,但“Age”标头小于 1。
非常感谢您的帮助,我觉得这很简单。我应该注意,这是在 NGINX 服务器上运行的。
我的 style.css 似乎更新得很好,只是页面的 DOM 没有更新。
答案1
没关系,看起来 Varnish 在初始页面加载后就可以正常工作了,但我更新的文件无法显示的原因是由于 APC。