负载均衡器后面的清漆不缓存内容

时间:2011-08-12 17:21:33

标签: regex varnish varnish-vcl

我正在使用此行删除default.vcl中的Cookie以允许Varnish缓存

set req.http.Cookie = regsuball(req.http.Cookie, "(^|;\s*)(__[a-z]+|__utma_a2a|has_js|Drupal.toolbar.collapsed|MNO_abc_qrst_\d+)=[^;]*", "");

但它似乎不起作用。

Varnish是负载均衡器的后面,负载均衡器设置了一个持久性cookie,在标题中以这种格式出现:

Set-Cookie:MNO_abc_qrst_80=aaaaaaaaa2a5882045525d5a4a58455e445a4a423660;expires=Fri, 12-Aug-2011 17:23:23 GMT;path=/;httponly

我在模拟器中运行此正则表达式并捕获上面的行(直到第一个“;”)。所以我认为这个正则表达式应该抓住它,但似乎不是吗?当我绕过此负载均衡器时,内容会被缓存。

有什么想法吗?我错过了什么?

1 个答案:

答案 0 :(得分:2)

有两种方法可以去验证需要移除的整条生产线 或者删除该行的违规部分。我不知道你正在使用什么样的正则表达式引擎。为了获得更好的结果,至少需要负面看后面和后面的参考。

压缩验证: /^(?=(Set-Cookie:\s*))(?:\1|.*?;\s*)(?:__[a-z]+|__utma_a2a|has_js|Drupal\.toolbar\.collapsed|MNO_abc_qrst_\d+)=[^;]*(?:;|$).*$/s

压缩全球部分替换: s/(?:(?<=^Set-Cookie:)|(?<=;))\s*(?:__[a-z]+|__utma_a2a|has_js|Drupal\.toolbar\.collapsed|MNO_abc_qrst_\d+)=[^;]*(?:;|$)//g

扩展了正则表达式(在Perl中):

my $str = 'Set-Cookie: MNO_abc_qrst_80=aaaaaaaaa2a5882045525d5a4a58455e445a4a423660;expires=Fri, 12-Aug-2011 17:23:23 GMT;path=/;httponly';

## Validate part of a cookie, remove line

if ( $str =~ /
       ^ (?= (Set-Cookie: \s*))
       (?:  \1
          | .*? ; \s*
       )
       (?:   __[a-z]+
          |  __utma_a2a
          |  has_js
          |  Drupal\.toolbar\.collapsed
          |  MNO_abc_qrst_\d+
       )
       =
       [^;]*
       (?: ; | $)
       .* $
 /sx )
{
     print "Valid, remove line '$&'\n=============\n\n";
}

## Globally, replace many parts of the cookie

if ( $str =~ s/
       (?:   (?<= ^ Set-Cookie:)
          |  (?<= ;)
       )
       \s* 
       (?:    __[a-z]+
           |  __utma_a2a
           |  has_js
           |  Drupal\.toolbar\.collapsed
           |  MNO_abc_qrst_\d+
       )
       =
       [^;]*
       (?: ; | $)
 //xg )
{
     print "removed parts of cookie\n";
     print "new string = '$str'\n";
}

输出:

Valid, remove line 'Set-Cookie: MNO_abc_qrst_80=aaaaaaaaa2a5882045525d5a4a58455e
445a4a423660;expires=Fri, 12-Aug-2011 17:23:23 GMT;path=/;httponly'
=============

removed parts of cookie
new string = 'Set-Cookie:expires=Fri, 12-Aug-2011 17:23:23 GMT;path=/;httponly'