我想缓存每一个页面(即使是使用cookie),php中的后端也没有为此做好准备,所以它发送了多个Set-Cookie标头。当我删除所有session_start和setcookie函数时,页面HITs,但是当我将我的vcl设置为varnish时,会自动为我执行此操作,页面依赖MISSes。
这是我的 default.vcl :
vcl 4.0;
backend default {
.host = "myhost.app";
.port = "80";
}
sub vcl_recv {
unset req.http.cookie;
}
sub vcl_backend_response {
unset beresp.http.set-cookie;
}
sub vcl_deliver {
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT";
} else {
set resp.http.X-Cache = "MISS";
}
}
答案 0 :(得分:1)
看来你正在进入泥泞的水域,但试着强迫一下:
sub vcl_backend_response {
set beresp.ttl = 120 s;
unset beresp.http.set-cookie;
}
通过缓存忽略cookie和ttl来检查你是不是在破坏它。
答案 1 :(得分:0)
我每次都面对缓存MISS并更新JorgeNerín提到的sub vcl_backend_response{..}
。现在它显示缓存HIT,但登录没有发生。很明显因为unset beresp.http.set-cookie;
。所以我从Manipulating request headers in VCL得到了基于URL取消设置cookie的想法。我在vcl_backend_response
中应用了相同内容。在我的应用中,登录网址包含auth
。因此,除了网址包含unset beresp.http.set-cookie;
之外,我更新了auth
。现在登录正在进行并缓存HIT。希望这有助于社区
sub vcl_backend_response {
set beresp.ttl = 120 s;
if ((bereq.url ~ "auth")){
}
else{
unset beresp.http.set-cookie;
}
#rest of code
}