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

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

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

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

  2. Configure / script VCL, чтобы делать все, поэтому, когда приходит запрос POST и возвращается ответ со статусом 200, срок действия кэша ответов GET на соответствующем ресурсе истекает. Я не уверен, возможно ли это.

В основном, мне интересно:

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

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

0
задан 17 February 2017 в 10:08
1 ответ

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

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

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

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

0
ответ дан 5 December 2019 в 08:37

Теги

Похожие вопросы