В моем стеке приложений я использую 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);
}
}
посмотри это..
https://www.varnish-cache.org/docs/trunk/tutorial/purging.html
в основном вы выполняете поиск того, что хотите передать ... затем для очистки в попадании / промахе