0

この行を使用して 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

この正規表現をエミュレーターで実行したところ、上記の行がキャッチされました (最初の ";" まで)。したがって、この正規表現はそれをキャッチする必要があると思いますが、そうではないようですか? このロード バランサーをバイパスすると、コンテンツがキャッシュされます。

何か案は?私は何が欠けていますか?

4

1 に答える 1

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'
于 2011-08-12T19:08:05.630 に答える