3

サーバー経由でキャッシュされた無効なコンテンツにBANリクエストを送信しようとしています。URL には、Varnish がチェックする正規表現が含まれています。このリクエストの送信に成功しました:curlVarnish

1. curl -X BAN "https://oursite.com/product/item/(100|7|9||8|7|6|5|4|2|1)"

<!DOCTYPE html>
<html>
  <head>
    <title>200 Ban added</title>
  </head>
  <body>
    <h1>Error 200 Ban added</h1>
    <p>Ban added</p>
    <h3>Guru Meditation:</h3>
    <p>XID: 66211</p>
    <hr>
    <p>Varnish cache server</p>
  </body>
</html>

しかし、より複雑な URL

2. curl -X BAN "https://oursite.com/product/(search/home$|item/(391|1232))"

// What I'm trying to remove are:

1./product/search/home
2./product/item/391
3./product/item/1232

デフォルト.vcl

if (req.method == "BAN") {

        if (!client.ip ~ purge) {

            return(synth(403, "Not allowed."));
        }

        ban("req.url ~ ^"+req.url);

        return(synth(200, "Ban added"));
}

ワニスログ:

*   << BeReq    >> 163855
-   Begin          bereq 163854 pass
-   Timestamp      Start: 1450969228.080453 0.000000 0.000000
-   BereqMethod    BAN
-   BereqURL       /product/(search/home$|item/(391|1232))
-   BereqProtocol  HTTP/1.1
-   BereqHeader    User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.19.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2
-   BereqHeader    Host: oursite.com

に示すように、curl リクエストは正常に行われましたvarnishlogが、正規表現が機能しない理由がわかりません。どのページもパージされません。誰が私に何が問題なのか教えてもらえますか? 脱出するにはどのキャラクターが必要ですか?

4

1 に答える 1

0

正規表現は問題ないようです。最初の括弧の後にスラッシュをエスケープ
しようとする必要があると思います。Varnish は括弧の間の式を正規表現 (これで問題ありません) として解釈しており、正規表現ではスラッシュは区切り文字 (ある種の特殊文字) であると想定しています。 これはうまくいくかもしれません:

curl -X BAN "https://oursite.com/product/(search\/home$|item\/(391|1232))"
于 2016-07-22T12:49:41.793 に答える