【发布时间】:2014-05-02 23:47:45
【问题描述】:
我正在使用 Wordpress 3.8.1 和 Varnish 3.0.5。由于 VCL 的噩梦,我确定 Varnish 没有缓存。而且我也不知道 Wordpress 非常标准/正确的 VCL 在哪里。
我的 Wordpress 是 Multisite,我将 Varnish 放在了 Wordpress VM 本身的顶部。 Varnish @ 8080 和 Apache @ 80/443。
由于我对VCL一无所知,所以我只是使用了一个我发现的随机VCL:
backend default {
.host = "127.0.0.1";
.port = "8080";
.connect_timeout = 60s;
.first_byte_timeout = 60s;
.between_bytes_timeout = 60s;
}
sub vcl_recv {
if (req.restarts == 0) {
if (req.http.x-forwarded-for) {
set req.http.X-Forwarded-For =
req.http.X-Forwarded-For + ", " + client.ip;
} else {
set req.http.X-Forwarded-For = client.ip;
}
}
if (req.request == "PURGE") {
if ( client.ip != "xx.xx.xx.xx") {
error 405 "Not allowed.";
}
return (lookup);
}
if (req.request != "GET" &&
req.request != "HEAD" &&
req.request != "PUT" &&
req.request != "POST" &&
req.request != "TRACE" &&
req.request != "OPTIONS" &&
req.request != "DELETE") {
return (pipe);
}
if (req.request != "GET" && req.request != "HEAD") {
return (pass);
}
if (!(req.url ~ "wp-(login|admin)") &&
!(req.url ~ "&preview=true" ) ) {
unset req.http.cookie;
}
if (req.http.Authorization || req.http.Cookie) {
return (pass);
}
return (lookup);
}
sub vcl_hit {
if (req.request == "PURGE") {
purge;
error 200 "Purged.";
}
return (deliver);
}
sub vcl_miss {
if (req.request == "PURGE") {
purge;
error 200 "Purged.";
}
return (fetch);
}
sub vcl_fetch {
if (!(req.url ~ "wp-(login|admin)")) {
unset beresp.http.set-cookie;
set beresp.ttl = 96h;
}
if (beresp.ttl <= 0s ||
beresp.http.Set-Cookie ||
beresp.http.Vary == "*") {
set beresp.ttl = 120 s;
return (hit_for_pass);
}
return (deliver);
}
(我用我的 ip 为 'xx.xx.xx.xx')
但无论如何,这不是通过始终获取age : 0 来实现的。我知道 VCL 必须处理 Wordpress COOKIES 和其他 COOKIES,如 G.A 等。
怎么做,或者我在哪里可以找到 Wordpress 的标准/正确 VCL?
【问题讨论】:
-
您在
vcl_recv中具有正确的功能,但我不确定是否有其他冲突,尽管您确实应该删除所有默认内容,它已经由 varnish it self 执行。跨度> -
这里有同样的问题。内容都被缓存了,比如图片和css文件,但是主页本身总是在标题中显示
Age: 0。出了点问题。
标签: wordpress caching cookies varnish varnish-vcl