4

Varnishを使用して、特定のディレクトリの下にあるすべてのファイルを削除することはできますか?PHPスクリプトでこれを完了するにはどうすればよいですか?

たとえば、URLにパス/product/a-specific-product/が含まれている場合、?などのファイルを削除することもできます/product/a-specific-product/a-sub-page/か?

Varnish 3(クラスの一部:)で特定のURLを削除するために使用される次の関数がありますVarnishPurger()

public function executePurge()
{
    $purgeUrls = array_unique($this->purgeUrls);

    foreach($purgeUrls as $url)
    {
        $this->purgeUrl($url);
    }

    if (!empty($purgeUrls))
    {
        $this->purgeUrl(home_url());
    }        
}

protected function purgeUrl($url)
{
    $c = curl_init($url);
    curl_setopt($c, CURLOPT_CUSTOMREQUEST, 'PURGE');
    curl_exec($c);
    curl_close($c);    
}
4

2 に答える 2

2

たとえば、を使用してregexpパージを処理するために、VarnishでカスタムPURGEハンドラーを作成できますban_url()

たとえば、PHPでパージする場合は、VarnishがスポットするカスタムHTTPヘッダーを追加します。

curl_setopt($c, CURLOPT_HTTPHEADER, array('X-Purge-Regex-URL'));

次に、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";
}

/product/a-specific-product/これで、正規表現に一致するすべてのものに対してパージを発行すると、を含めてパージされ/product/a-specific-product/a-sub-page/ます。

ban()HTTPホストは無視されるため、仮想ホストを実行していて、特定のサイトのみをパージする場合は、代わりにreq.http.hostパラメーターを使用する必要があることに注意してreq.urlください。代わりにこのタイプのソリューションが必要な場合はお知らせください。

また、前述のように、パージは正規表現のパージであるため、パージすると、に一致するすべてのURL/productがパージされます。product

于 2012-11-27T11:58:54.297 に答える
0

これを試して:

// $version = VERSION_OF_VARNISH;
$command = $version >= 3 ? "ban" : "purge";
exec("$command req.http.host ~ $host && req.url ~ \"$pattern\"");
于 2012-11-27T12:13:16.843 に答える