Приветсвую тебя, дорогой читатель. В этой заметке я хочу поведать тебе, как можно элегантно чистить кэш Varnish. Данная статья описывает, как можно удалять страницы=объекты из кэша, используя их URL адреса.
Итак для начала нужно описать ACL в настройках нашего хоста, что бы разрешить очистку кэша с определенных ip адресов. Для этого добавим следующее в файл /etc/varnish/default.vcl. (имя файла может отчиаться в зависимости от настройки Вашего сервера)
Acl purge { "localhost"; "public_ip_address";}
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 {"