当取消设置cookie时,清漆会移除PHPSESSID

时间:2013-08-16 20:24:16

标签: cookies varnish varnish-vcl

我很长一段时间都在尝试在我的一些网站上放置工作清漆(3.0.4)。 我从一个干净的配置文件(提供清漆,“/usr/share/doc/varnish/examples/default.vcl.gz”)开始。

嗯,它有效,但它似乎没有缓存任何东西(我添加了标题来查看它:https://www.varnish-cache.org/trac/wiki/VCLExampleHitMissHeader)。

所以我将这些行添加到我的sub_recv:

if (req.url ~ "\.(png|gif|jpg|jpeg|js|css|ico|pdf)$") {     
unset req.http.Cookie;      
    }

一旦我放了这些行,我的会话在加载一些图片后就会丢失,而varnishlog会显示不同的日志PHPSESSID:

16 RxHeader     c Cookie: PHPSESSID=gkl02227ef1iq4joai0tsbi026
23 TxHeader     b Cookie: PHPSESSID=oomupd8tnvirpn8eamsertuih4
...

此处已发布完整default.vcl:http://pastebin.com/gmdym1sr

编辑:也许它有一些重要性,但图像是通过像“http:/ /domain.com/?t=Thb&f=picture.jpg”这样的链接调用的(PhotoShow画廊)

你有个主意吗?提前谢谢!

1 个答案:

答案 0 :(得分:2)

您必须过滤掉图片上的Cookie'通往客户的方式:

sub vcl_fetch {
  // ... Line .82 in your pastebin
  if (req.url ~ "\.(png|gif|jpg|jpeg|js|css|ico|pdf)$") {     
    unset beresp.http.set-cookie;      
  }
  // ...
}

现在正是这样(图像缓存的空浏览器缓存):

  1. 要求Varnish,Varnish删除cookie。
  2. Varnish将请求传递给后端,没有cookie。
  3. 后端完整填写请求并提供Set-Cookie标题(因为它没有任何cookie)带有新值
  4. Varnish无法缓存该对象,因为它有一个Set-Cookie标题(您的pastebin上的第102行)。
  5. Varnish将图片与新cookie一起传递给您的浏览器。
  6. 您的浏览器会覆盖符合收到的Set-Cookie标头的PHPSESSID Cookie。