Очистка лака с использованием HTTP и REGEX
Я хочу очистить Элементы моего лака, используя HTTP. Этот HTTP-вызов запускается с внешнего сервера позади самого лака, поэтому сервер бэкэнд не имеет другого доступа, кроме HTTP.
Я выполнил следующие правила очистки с соответствующим ACL, который отлично работает для
curl -X PURGE http://www.example.com/image/123/photo-100-150.jpg
но я хочу, чтобы иметь возможность очищать URL через HTTP с помощью Regex
curl -X PURGE http://www.example.com/image/123/*.jpg
Таким образом, я хочу очистить всю масштабированную версию этого изображения после загрузки нового. Есть ли способ?
Ответы
Ответ 1
попробуйте следующее:
если лак 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";
}
Ответ 2
Сначала определите белый список тех, кто может использовать чистку, а затем добавьте чистую строфу в ваш 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.";
}
Лак будет использовать значение заголовка 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
- адрес вашего сервера лаков.
Ответ 3
Конечно, есть.
В VCL вы хотите использовать метод запрета - задокументирован в "man vcl". Он создает фильтр для входящих запросов. Если вы собираетесь использовать это со скоростью более 2 раз в секунду, я рекомендую вам google "ban luker friendly" и переписывать выражения соответствующим образом.
Неподтвержденный код:
sub vcl_recv {
if (req.method == "PURGERE" and client.ip ~ admin_network) {
ban("req.http.host == " + req.http.host + " && req.url == " + req.url);
}
Ответ 4
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";
}
}