Чистка лаком по POST или PUT
В моем стеке приложений я использую CouchDB (в данном случае, по сути, это простой REST-сервер), и я хочу поставить перед ним Varnish, чтобы облегчить нагрузку чтения.
Я знаю, что когда мое приложение обновляет документ через POST или же PUT что старый документ признан недействительным, но из-за заголовков, которые выдает CouchDB, Varnish не осознает этого и продолжает обслуживать старую версию для последующего GET Запросы.
В принципе, я хотел бы иметь возможность purge документ по заданному URL REST, когда POST или же PUT Метод отправляется на тот же URL.
Могу ли я настроить Varnish для достижения этой цели?
Я мог бы получить мою заявку на отправку PURGE запрос после каждого POST или же PUT но я бы предпочел, чтобы кэш был невидимым для приложения, так как для небольших установок он может работать без Varnish.
В основном в vcl Я хотел бы сделать это:
sub vcl_recv {
if ( req.request == "POST" || req.request == "PUT" ) {
purge;
return(pass);
}
}
Но purge; метод недоступен в vcl_recv
Обновить
Я, кажется, достиг чего-то, приближающегося к выше, используя ban вместо purge - немедленно последующий запрос к POST запускает GET и далее GET запросы обслуживаются из кеша, поэтому, похоже, я неправильно понял семантику.
Моя подпрограмма в настоящее время:
sub vcl_recv {
if ( req.request == "POST" || req.request == "PUT" ) {
ban("req.url == " + req.url);
return(pass);
}
}
1 ответ
Видеть это..
https://www.varnish-cache.org/docs/trunk/tutorial/purging.html
в основном вы делаете поиск на то, что вы хотите передать.. затем на чистку в хит / мисс