Использует ли Varnish 4 хэш-ключ для поиска объектов при очистке или запрете?

122
17

Когда лак делает недействительным кеш через Purge и Ban, использует ли хеш-ключи, определенные в vcl_hash, для поиска объектов? Если я собираюсь сделать недействительным кеш пользовательским заголовком obj.http.page_id вместо obj.http.url рекомендованным в этой статье, повлияет ли это на производительность, поскольку хеш-ключи не используют http.page_id? Я не вижу упоминания об этом в документе, но хочу дать понять, прежде чем использовать новый метод.

   sub vcl_recv {

if (req.method == "PURGE") {

if (!client.ip ~ purge) {

return (synth(405, "Not allowed."));
}

ban("obj.http.url ~ ^" + req.url);

return (purge);
}
}

sub vcl_hash {
hash_data(req.url);
if (req.http.host) {
hash_data(req.http.host);
} else {
hash_data(server.ip);
}
}

спросил(а) 2016-01-25T08:30:00+03:00 5 лет, 8 месяцев назад
1
Решение
65

Если вы делаете BAN, тогда ему не нужно сопоставлять хэш, так как BAN будет применяться, когда объект просматриваются.

Однако PURGE будет выполнять обычный поиск объектов, и поэтому вы не сможете сделать это с помощью альтернативного ключа.

ответил(а) 2016-02-10T08:38:00+03:00 5 лет, 8 месяцев назад
65

BAN более активен, чем PURGE. PURGE должен точно соответствовать объекту из значения, возвращаемого из vcl_hash(). BAN может использовать регулярные выражения и помещается в список BAN. Каждый входящий запрос должен проверить список BAN при определении того, содержит ли кеш устаревшие данные. Перемещение списка BAN для каждого запроса может привести к снижению производительности, если количество BAN становится слишком большим. Хорошей новостью является то, что BAN удаляются с помощью запрета-lurker-потока, который просматривает кеш и сравнивает временную метку объектов в кеше с меткой времени запроса BAN. Если нет объектов кеша с временной меткой раньше, чем запрос BAN, соответствующий регулярному выражению BAN, BAN удаляется из списка, поскольку он больше не является полезным.

Возможно, было бы полезно иметь отдельные условия для PURGE и BAN:


if (req.method == "BAN")
{
// TODO: Add client validation as needed
ban("obj.http.x-url ~ " + req.url);
return(synth(901, "BAN Set for " + req.url));
}

if (req.method == "PURGE")
{
// TODO: Add client validation as needed
return(purge);
}

ответил(а) 2016-04-27T23:23:00+03:00 5 лет, 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема