Cache tags + Varnish
Varnish Cache - это ускоритель веб-приложений, также известный как кеширующий обратный прокси-сервер HTTP. Varnish используется на тысячах сайтов Drupal для увеличения производительности загрузки страниц в 10-1000 раз, и его можно использовать с тегами кэша, чтобы упростить аннулирование кэша.
Для базовой интеграции тегов кэша вам нужно сделать три вещи, чтобы убедиться, что Varnish хорошо работает с тегами кэша, сгенерированными Drupal:
- Обновите VCL Varnish, чтобы он правильно обрабатывал запросы BAN.
- Отправляйте заголовок кеш-тегов (например, X-Cache-Tags) с каждым запросом, содержащий разделенный пробелами список всех кеш-тегов страницы.
- Отправляйте запрос BAN с соответствующими тегами кэша всякий раз, когда обновляется содержимое или конфигурация, и срок действия страниц с соответствующими тегами кэша истекает.
Обновление Varnish VCL
Пакет Symfony FOSHttpCache содержит отличную документацию по изменениям VCL, необходимым для поддержки тегов кэша, но вот минимальные необходимые изменения VCL для начала работы (для Varnish 4.x):
Внутри vcl_recv:
sub vcl_recv {
...
# Only allow BAN requests from IP addresses in the 'purge' ACL.
if (req.method == "BAN") {
# Same ACL check as above:
if (!client.ip ~ purge) {
return (synth(403, "Not allowed."));
}
# Logic for the ban, using the X-Cache-Tags header.
if (req.http.X-Cache-Tags) {
ban("obj.http.X-Cache-Tags ~ " + req.http.X-Cache-Tags);
}
else {
return (synth(403, "X-Cache-Tags header missing."));
}
# Throw a synthetic page so the request won't go to the backend.
return (synth(200, "Ban added."));
}
}
Dentro de vcl_backend_response:
sub vcl_backend_response {
# Set ban-lurker friendly custom headers.
set beresp.http.X-Url = bereq.url;
set beresp.http.X-Host = bereq.http.host;
...
}
Dentro de vcl_deliver:
sub vcl_deliver {
# Remove ban-lurker friendly custom headers when delivering to client.
unset resp.http.X-Url;
unset resp.http.X-Host;
# Comment these for easier Drupal cache tag debugging in development.
unset resp.http.X-Cache-Tags;
unset resp.http.X-Cache-Contexts;
...
}
Обязательно перезапустите Varnish после внесения соответствующих изменений в VCL!
Отправить заголовок кеша
Вы можете включить один из следующих модулей, чтобы заставить Drupal выводить заголовок HTTP, содержащий теги кеша:
| Проект | Модуль | Заголовок |
| Varnish Purger | Varnish Purger Tags (varnish_purge_tags) | Cache-Tags |
| Generic HTTP Purger | Заголовок общего тега HTTP (purge_purger_http_tagsheader) | Purge-Cache-Tags |
Em versoes antes da 8.x-3.0-beta5 o modulo Purge configurava automaticamente Purge-Cache-Tags - removido decidindo-se responsabilidade dos submodulos.
Отправка запроса BAN при изменении содержимого или конфигурации
Используя модуль Generic HTTP Purger, вы можете перейти на страницу конфигурации Purge (admin/config/development/performance/purge) и добавить HTTP Purger.
Введите данные своего сервера Varnish (имя хоста, порт, путь и т. д.) и в конфигурации «Заголовки» введите заголовок со следующей конфигурацией:
- Заголовок: X-Cache-Tags
- Значение: [invalidation:expression]
Salvando essa configuracao e agendando cron processando a fila (drush p-queue-work) o Varnish comecara banear paginas assim que a fila disparar bans!
Некоторые примечания в этой документации были адаптированы из следующих источников: