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.")); } }
Внутри 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; ... }
Внутри 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 |
Обратите внимание, что в некоторых версиях до 8.x-3.0-beta5 модуль Purge автоматически настраивал заголовок Purge-Cache-Tags, но он был удален, так как было решено, что вместо этого ответственность должны быть подмодулями.
Отправка запроса BAN при изменении содержимого или конфигурации
Используя модуль Generic HTTP Purger, вы можете перейти на страницу конфигурации Purge (admin/config/development/performance/purge) и добавить HTTP Purger.
Введите данные своего сервера Varnish (имя хоста, порт, путь и т. д.) и в конфигурации «Заголовки» введите заголовок со следующей конфигурацией:
- Заголовок: X-Cache-Tags
- Значение: [invalidation:expression]
Как только вы сохраните эту конфигурацию очистки и сконфигурируете задание cron для обработки очереди очистки (drush p-queue-work), Varnish должен начать блокировать страницы, как только очередь очистки вызовет запреты!
Некоторые примечания в этой документации были адаптированы из следующих источников:
Drupal’s online documentation is © 2000-2020 by the individual contributors and can be used in accordance with the Creative Commons License, Attribution-ShareAlike 2.0. PHP code is distributed under the GNU General Public License.