Очистка кэша Varnish через Браузер с помощью PHP
Приветсвую тебя, дорогой читатель. В этой заметке я хочу поведать тебе, как можно элегантно чистить кэш Varnish. Данная статья описывает, как можно удалять страницы=объекты из кэша, используя их URL адреса.Эта статья размещена в моем блоге и набрана моими руками. Текущий результат был собран из частей нескольких материалов. Я, как приверженец свободного распространения информации, считаю своим долгом поделиться этой статьей с другими людьми путем размещения ее на страницах интернет ресурса с большей аудиторией, чем мой блог.
Итак для начала нужно описать ACL в настройках нашего хоста, что бы разрешить очистку кэша с определенных ip адресов. Для этого добавим следующее в файл /etc/varnish/default.vcl. (имя файла может отчиаться в зависимости от настройки Вашего сервера)
acl purge { «localhost»; «public_ip_address»;} Дальше добавим следующие строки в описание vcl_recv:
if (req.request == «PURGE») { if (! client.ip ~ purge) { error 405 «Not allowed.»; } else { purge_url (req.url); error 200 «Purged. Everything is fine»; } } Это нужно для того, чтобы запретить очистку кэша с внешней стороны.Для того чтобы Varnish не кэшировал саму страницу очистки кэша, нужно добавить следующие строки в vcl_fetch:
if (req.http.host == «www.your_site.com» && req.url == »^/varadm/.*\.(html|php)$») {
return (pass);
}
Для того чтобы исключить из кэширования POST запросы, удостовертесь что в vcl_recv есть вот такие строчки:
if (req.request == «POST») { return (pass); } Отключаем кеширование для запросов basic авторизации (vcl_recv):
if (req.http.Authorization || req.http.Authenticate) { return (pass); } Для того, что бы не выводить кучу ненужной информации, я для себя очистил стандартный вывод страницы ошибки: В принципе этого можно не делать:
sub vcl_error { set obj.http.Content-Type = «text/html; charset=utf-8»; synthetic {»