http – 如何使Varnish忽略,而不是删除cookie

即使存在cookie,我也希望使用Varnish来缓存某些页面.我需要注意三种可能性:

>匿名用户正在查看某个页面
>登录用户正在查看具有轻量级自定义的页面.这些自定义项都存储在已签名的cookie中,并由Javascript动态填充. vary-cookie http标头未设置.
>登录用户正在查看包含数据库中自定义数据的某个页面. vary-cookie http标头已设置.

预期的行为是:

>缓存页面.这是Varnish处理的最基本方案.
>缓存页面,不要删除cookie,因为一些Javascript逻辑需要它.
>永远不要缓存此页面,因为vary-cookie表示cookie内容会影响此页面的输出.

我已经阅读了一些关于Varnish的文档,我无法分辨这是否是默认行为,或者我是否需要在VCL中进行一些设置以实现它.

最佳答案
默认情况下,Varnish不会使用Cookie标头缓存请求:

http://varnish-cache.org/svn/trunk/varnish-cache/bin/varnishd/default.vcl

  sub vcl_recv {
(...)
  if (req.http.Authorization || req.http.Cookie) {
        /* Not cacheable by default */
        return (pass);
    }
    return (lookup);

您需要将所需的行为编码到配置中.请注意,Cookie是客户端请求的一部分,而不是“页面”(对象,真的). “页面”(对象)带有一个“Set-Cookie”标题 – 这是将被缓存的标题.

此外,“Vary:Cookie”并不意味着“不缓存”.这意味着为每个收到的Cookie值缓存一个对象.

如果您的应用程序没有基于Cookie生成任何内容,则忽略它可能是安全的:

-      if (req.http.Authorization || req.http.Cookie) {
+      if (req.http.Authorization) {

做一些测试,你会得到它的支持.希望这可以帮助.

转载注明原文:http – 如何使Varnish忽略,而不是删除cookie - 代码日志