15

HTTP を使用してワニスの要素を削除したいと考えています。この http 呼び出しは、ワニス自体の背後にあるバックエンド サーバーからトリガーされるため、バックエンド サーバーには HTTP 以外のアクセスはありません。

適切に機能する ACL を使用して、次のパージ ルールを実装しました。

curl -X PURGE http://www.example.com/image/123/photo-100-150.jpg

しかし、正規表現を使用してHTTP経由でURLをパージできるようにしたい

curl -X PURGE http://www.example.com/image/123/*.jpg

そうすれば、新しい画像がアップロードされたら、この画像のすべてのスケーリングされたバージョンをクリアしたいと思います。方法はありますか?

4

4 に答える 4

13

これを試して:

ワニス 3.0 以上の場合。

vcl_recv {
    if (req.request == "PURGE") {
             if (!client.ip ~purge){
                     error 405 "Not allowed";
             }
     ban("req.http.host == " +req.http.host+" && req.url ~ "+req.url);
     error 200 "Ban added";

    }
于 2012-07-06T04:06:45.867 に答える
7

まず、パージを使用できるユーザーのホワイトリストを定義してから、VCL にパージャー スタンザを追加します。

acl purge {
"127.0.0.1";
"10.22.0.0"/16;
}


sub vcl_recv {


if (req.http.X-Purge-Regex) {
        if (!client.ip ~ purge) {
            error 405 "Varnish says nope, not allowed.";
        }
        ban_url(req.http.X-Purge-Regex);
        error 200 "The URL has been Banned.";
}

Varnish はヘッダーの値を使用しX-Purge-Regexて禁止を作成します。

したがって、次のようなものを禁止できます。

curl -v -X PURGE -H 'X-Purge-Regex: ^/assets/*.css' varnishserver:6081

また

curl -v -X PURGE -H 'X-Purge-Regex: ^/images/*' varnishserver:6081

varnishserverニスサーバーのアドレスです。

于 2015-11-17T16:52:42.387 に答える
0

確かにあります。

VCL では、「man vcl」に記載されている ban メソッドを使用します。着信要求に対してフィルターを作成します。これを 1 秒間に 2 回以上使用する場合は、Google で「ルーカー フレンドリーを禁止」して、それに応じて式を書き直すことをお勧めします。

テストされていないコード:

sub vcl_recv {
         if (req.method == "PURGERE" and client.ip ~ admin_network) {
            ban("req.http.host == " + req.http.host + " && req.url == " + req.url);
         }
于 2012-06-25T11:56:42.127 に答える