Лак за балансировщиком нагрузки не кеширует содержимое - PullRequest
0 голосов
/ 12 августа 2011

Я использую эту строку для удаления файлов cookie в default.vcl, чтобы разрешить кэширование 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 Ответ

2 голосов
/ 12 августа 2011

Существует 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'
...