Чистка лаком по 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

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

Другие вопросы по тегам