我使用Django和Varnish 4。
我试图达到这个目的:
这是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); } }