configurationVarnish 4 VCL只caching匿名用户的特定页面(使用Django)

我使用Django和Varnish 4。

我试图达到这个目的:

  • 如果请求不是主页,通过(我试图只caching主页,目前来testing它等)
  • 如果cookie“sessionid”存在,则为每个会话传递或caching
  • 别的:通过

这是sub vcl_recv的configuration:

# cache only home page if (! req.url == "/") { return(pass); } # not caching if cookie sessionid is present if (req.http.Cookie ~ "sessionid") { return(pass); } unset req.http.cookie; 

到目前为止,清似乎总是生成一个新的页面,当它调用主页作为匿名。 我可以告诉使用标题清漆发送(“年龄”始终是0和“X-Varnish”总是不同的数字)。

这是要么我的configuration丢失的东西,还是因为Django发送一个“Vary:Cookie”的响应? 如果是这种情况,在这种情况下我怎样才能“隐藏”来自Varnish的Cookie(仅限匿名用户)?

“问题”是Django始终发送了“Vary:Cookie”头文件。 我认为这是因为'auth'插件,但我没有调查,我只是从服务器响应回来时删除头。

以下是Varnish的doc关于'vary:cookie'的说法:

糟糕的用法的另一个例子是只使用Vary:Cookie区分响应。 同样,可能会有非常多的cookie,因此会有大量的caching对象,这些对象将最有可能被其原始请求者检索。

资料来源: https : //www.varnish-software.com/book/4.0/chapters/HTTP.html#vary

这是我的VCLconfiguration看起来像(我删除了上面的部分,只是服务器configuration):

 sub vcl_recv { # caching only home page if (! req.url == "/") { return(pass); } # not caching if cookie sessionid present if (req.http.Cookie ~ "sessionid") { return(pass); } unset req.http.cookie; } sub vcl_backend_response { if (bereq.url == "/") { unset beresp.http.Vary; return(deliver); } }