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

Устранение срока действия Varnish кэшированного ответа GET на запрос POST

Я изучаю слои кеширования для своего стека приложений и серьезно подумываю о Varnish. Varnish звучит великолепно, но большая часть моих данных не только динамична, но и требует аутентификации для доступа и уникальна для отдельных пользователей.

Судя по тому, что я читал до сих пор, кажется, что есть два варианта:

  1. При получении запроса POST в приложении я мог прикрепить настраиваемый заголовок к ответу на Varnish от исходного сервера, использовать VCL для его анализа, вручную истечь срок действия существующего кеша, указанного настраиваемым заголовком (обычно это ответ GET на тот же ресурс , в моем случае), а затем удалите заголовок из ответа в Varnish, прежде чем возвращать его пользователю. Я почти уверен, что это возможно.

  2. Сконфигурируйте / создайте сценарий VCL для выполнения всего, поэтому, когда поступает запрос POST и возвращается ответ со статусом 200, срок действия кэша ответов GET на соответствующем ресурсе истекает. Я не уверен, возможно ли это.

В принципе, мне интересно:

  1. Можно ли использовать VCL для прямого принудительного истечения срока действия кешированного ответа в случае запроса к другому ресурсу? Если так, фрагменты будут очень признательны!

  2. Есть лучший способ сделать это? Я не думаю, что у меня возникнут проблемы с настройкой Varnish для обработки кеширования уникальных ответов, я просто добавлю токен API к имени файла кеша. Что мне действительно нужно для выполнения этой работы, так это возможность разрешить моему приложению принудительно истекать в Varnish, когда пользователь выполняет действие (POST), обновляющее GET.

Обычно то, что вы возвращаете в запросе POST, отличается от результата запроса GET. Поведение Varnish по умолчанию таково, что запросы POST не кэшируются. Однако, чтобы ответить на ваши вопросы:

  1. Это возможно. Для этого воспользуетесь банами: ban("obj.http.x-url ~ " + req.url); (пример бана, дружественного бану)

  2. Поскольку вы можете управлять кодом своего приложения, лучший способ - настроить обработчик очистки в Varnish, а затем направить ему запрос на выпуск приложения (через curl). Фактически, ваш обработчик очистки может использовать запреты, как указано выше, или он может использовать return(purge). Баны обычно используются для аннулирования кеша сразу для нескольких объектов, тогда как очистка аннулирует одну страницу.

Поэтому, как только ваше приложение увидит запрос POST, оно (при условии, что вы закодируете необходимую логику) отправит запрос PURGE для Varnish с URL-адресом ресурса, который необходимо сделать недействительным (не обязательно должен быть тот же URL).