Varnish在取消设置cookie时删除PHPSESSID



很长一段时间以来,我一直在尝试在我的一些网站前涂上一层工作清漆(3.0.4)。我从一个干净的配置文件(带有varnish的文件,"/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向我显示了不同的日志PHPSSID:

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画廊)的链接调用的

你有主意吗?提前感谢!

您必须在图像到达客户端的途中过滤回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. 请求传给瓦尼什,瓦尼什取出饼干
  2. Varnish在没有cookie的情况下将请求传递到后端
  3. 后端完全填充请求,并提供一个带有新值的Set-Cookie headder(当它没有任何Cookie时)
  4. Varnish无法缓存对象,因为它有一个Set Cookie头标(你的pastebin上的第102行)
  5. Varnish将图像和新cookie一起传递到浏览器
  6. 您的浏览器会覆盖您的PHPSESSID cookie,该cookie符合收到的Set cookie标头

最新更新