4

だから私は初めてニスを使用しています。私はそれがどのように機能するかを読むのにかなりの時間を費やしましたが、キャッシュを選択的にパージする方法を理解できません。

私はこのようなURLを持っていると言うように

/?account=123&url=google.com

と別のような

/?account=123&url=stackoverflow.com

ここでキャッシュをパージする必要がありaccount=123ます。

パージを発行することしか理解できません

/?account=123&url=stackoverflow.com

URLがPURGEメソッドを使用して着信URLと一致する場合にのみキャッシュをパージします。

どんな助けでも大歓迎です。

4

4 に答える 4

4

これが機能します。ワニス3では、選択的パージは禁止と呼ばれます。だからあなたは使う必要があります

ban("obj.http.x-url ~ " + req.url);
于 2012-06-05T16:31:23.847 に答える
3

同様の問題に直面し、HTTPリクエストを使用してコンテンツをパージするために別のX-Purge-Regex-URLリクエストヘッダーを使用することになりました。

これを実現するために使用しているVCLは次のとおりです。

acl purge {
  "localhost";
  "10.1.1.0"/28;
}

sub vcl_recv {
  if (req.http.X-Purge-Regex-URL) {
    if (!client.ip ~ purge) {
      error 405 "Not allowed.";
    }
    ban_url(req.url);
    error 200 "Banned URL";
  }
}

あなたの場合、私たちはを使用してコンテンツをパージすることができますcurl -H "X-Purge-Regex-URL: True" --head "http://my.host.addr/?account=123"

ban_url()HTTPホストを気にしないことに注意してください。一致するすべてのURLをすべてのホストから削除します。これが必要なものでない場合は、とを使用ban()してコンテンツを禁止するために使用する必要がreq.http.hostありreq.urlます。

于 2012-08-29T12:07:57.553 に答える
1

HTTP PURGE methosを使用すると、特定のURLをパージできます。

正規表現を使用してパージするには、telnet接続を使用して管理ポートをニスするか、コマンドラインツールvarnishadmを使用する必要があります。

通常、あなたはそうすることができます

telnet localhost 6082

telnetを使用すると、ニスサーバーに接続した後、purgeコマンドでパージを実行できます。

purge req.url ~ /?account=123

上記は「/?account=123」に一致するすべてのURLを削除します

HTTP PURGEリクエストのように特定のページをパージする場合は、チルダ(〜)の代わりに二重等号を使用する必要があります。

purge req.url == /?account=123

ドメイン全体をパージすることもできます

purge req.http.host == yourdomain.com

またはドメインの特定のページ:

purge req.http.host == yourdomain.com && req.url ~ /?account=123
于 2012-04-10T13:15:47.547 に答える
0

私はワニスの専門家ではありませんが、これが私のために働いたものです:

acl purge {
  "localhost";
  "10.1.1.0";
}

sub vcl_recv {
  if (req.http.X-Purge-Regex-URL) {
    if (!client.ip ~ purge) {
      error 405 "Not allowed.";
    }
    ban_url(req.url);
    #error 200 "Banned URL";
  }
}

私がコメントアウトしたことに注意してくださいerror 200 "Banner URL"-私の場合、これが問題を引き起こしていました。

于 2014-09-29T14:33:41.750 に答える