清漆4,缓存页面与cookie

时间:2014-12-09 17:27:13

标签: php cookies varnish varnish-vcl

我想缓存每一个页面(即使是使用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";
    }
}

2 个答案:

答案 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
}