ワニスのエレメントをHTTPを使用して消去したい。このhttp呼び出しはワニス自体の背後にあるバックエンドサーバーからトリガーされるため、バックエンドサーバーは他のアクセスではなくHTTPを使用します。
以下のパージルールを、対応するACLを使用して実装しました。
curl -X PURGE http://www.example.com/image/123/photo-100-150.jpg
しかし、Regexを使用してHTTP経由でURLをパージできるようにしたい
curl -X PURGE http://www.example.com/image/123/*.jpg
そうすれば、新しい画像がアップロードされたら、この画像のすべての拡大縮小バージョンをクリアしたいと思います。方法はありますか?
これを試して:
ニス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";
}
まず、パージを使用できるユーザーのホワイトリストを定義してから、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
は、ワニスサーバーのアドレスです。
acl purge {
"127.0.0.1";
}
sub vcl_recv {
if (req.request == "PURGE") {
if (!client.ip ~ purge) {
error 405 "IP:" + client.ip + " Not allowed.";
}
ban("req.http.Host == " + req.http.Host + " && req.url ~ " + req.url);
error 200 "Host:" + req.http.Host + " url:" + req.url + " Ban added";
}
}
確かにあります。
VCLでは、「man vcl」に記載されているbanメソッドを使用します。着信要求にフィルターを作成します。これを1秒あたり2回を超える速度で使用する場合は、「禁止ルーカーフレンドリー」にして、それに応じて式を書き直すことをお勧めします。
テストされていないコード:
sub vcl_recv {
if (req.method == "PURGERE" and client.ip ~ admin_network) {
ban("req.http.Host == " + req.http.Host + " && req.url == " + req.url);
}