Чистка лаком по 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
в основном вы делаете поиск на то, что вы хотите передать.. затем на чистку в хит / мисс