繁体   English   中英

清漆4,带有cookie的缓存页面

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM