[英]Varnish 4, cache page with cookies
我想缓存每个页面(甚至包含cookie),php的后端对此没有准备,因此它发送了多个Set-Cookie标头。 当我删除所有session_start和setcookie功能时,页面会命中(HIT),但是当我将vcl设置为清漆时,页面会自动为我执行,这时页面总是会出错。
这是我的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";
}
}
看来您要进入泥泞的水域,但请尝试强制执行ttl:
sub vcl_backend_response {
set beresp.ttl = 120 s;
unset beresp.http.set-cookie;
}
通过缓存忽略cookie和ttl来检查您是否没有破坏事物。
sub vcl_backend_response{..}
所说,我每次都还要面对高速缓存MISS,并更新了sub vcl_backend_response{..}
。 现在,它正在显示高速缓存命中率,但未发生登录。 由于未unset beresp.http.set-cookie;
因此很明显unset beresp.http.set-cookie;
。 因此,我从在VCL中处理请求标头以根据URL取消设置cookie 中获得了灵感。 我在vcl_backend_response
应用了相同的vcl_backend_response
。 在我的应用中,登录URL包含auth
。 所以我更新为未unset beresp.http.set-cookie;
除URL包含auth
以外的所有地方。 现在登录正在进行,并且还缓存HIT。 希望这对社区有所帮助
sub vcl_backend_response {
set beresp.ttl = 120 s;
if ((bereq.url ~ "auth")){
}
else{
unset beresp.http.set-cookie;
}
#rest of code
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.