Назад | Перейти на главную страницу

Удаление лака на 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);
    }
}

посмотри это..

https://www.varnish-cache.org/docs/trunk/tutorial/purging.html

в основном вы выполняете поиск того, что хотите передать ... затем для очистки в попадании / промахе