2013-08-16 158 views
0

我试图,因为很长一段时间,把一个工作清漆(3.0.4)在我的一些网站的前面。 我从一个干净的配置文件(提供清漆,“/usr/share/doc/varnish/examples/default.vcl.gz”)开始。清漆删除Cookie时删除PHPSESSID

嗯,它的工作,但它似乎并没有缓存任何东西(我添加标题看到它: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 gallery)

你有什么想法吗?提前致谢!

回答

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;  
    } 
    // ... 
} 

现在这是什么happenning(带一个空浏览器缓存,图片缓存):

  1. 请求来清漆,清漆去除饼干。
  2. 清漆将请求传递给没有cookie的后端。
  3. 后端全面填充请求并提供一个Set-Cookie头端(因为它没有任何cookie)带有新值
  4. 漆因为它有一个Set-Cookie加载器(pastebin上的第102行),所以不能缓存对象。
  5. 清漆将图像与新的cookie一起传递到您的浏览器。
  6. 您的浏览器覆盖符合收到的Set-Cookie头的PHPSESSID cookie。
+0

它的工作就像一个魅力!感谢您的解释,我了解了我的PHPSESSID(Tx和Rx)之间的差异。非常感谢! – madoxav