Обработчики
vcl_recv - принимает запрос.vcl_fetch - вызывается после того, как документ был успешно загружен с бэкэнда. Можно добавлять заголовки, обрабатывать esi.
vcl_pass - вызывается если vcl_recv вернул pass.
vcl_deliver - последняя точка перед выходом(подойдёт для добавления различных отладочных заголовков).
vcl_hit - вызывается после того, как объект был найден в кэшэ.
vcl_miss - вызывается если объект искался в кэше, но его там не было. Может использоваться для изменения заголовков в запросе, посылаемом на бэкэнд.
vcl_hash - формирует уникальный хэш запроса. Вызывается после vcl_recv.
vcl_error - используется для генерации ответа из варниша, без использования бэкэнда. По дефолту сообщение об ошибке. Также можно делать редиректы.
vcl_pipe - вызывается если был возвращён pipe. Возвращает либо код ошибки, либо pipe.
Действия
pass - пропустить запрос дальше, вернуть ответ не из кэша.hit_for_pass - похожа на pass, но доступна из vcl_fetch. В отличии от pass hit_for_pass создаст hitforpass объект в кэшэ. Это для того, чтобы незакэшированные запросы доходили до бэкэнда.
lookup - попытаться найти объект в кэшэ.
pipe - похоже на pass, только после возврата pipe никаких проверок не произойдёт. В объекте будут переставлены несколько байт и он будет возвращен в обход кэша.
deliver - возврат закэшированного объекта клиенту.
fetch - получить объект с бэкэнда.
Запрос, ответ и объект
req - когда варниш получил запрос от пользователя - создается и заполняется эта переменная.bereq - запрос к бэкэнду, созданный из оригинального запроса.
resp - ответ клиенту.
beresp - объект, который бэкэнд вернул в ответе. Содержит заголовки, которые вернул бэкэнд. Можно сделать обработку esi блоков.
obj - закэшированный объект. Преимущественно читается только объект, который находится в памяти. На запись только obj.ttl, остальное только для чтения.
Операторы
= - оператор присваивания.== - сравнение.
~ - поиск вхождения, аналогично match в регулярном выражении.
! - отрицание.
&& - логическое И.
|| - логическое ИЛИ.
Область видимости переменных
Variable | recv | fetch | pass | miss | hit | error | deliver | pipe | hash |
req.* | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W |
bereq.* | R/W | R/W | R/W | R/W | |||||
obj.hits | R | R | |||||||
obj.ttl | R/W | R/W | |||||||
obj.grace | R/W | ||||||||
obj.* | R | R/W | |||||||
beresp.* | R/W | ||||||||
resp.* | R/W | R/W |
Актуально для третьей версии Varnish.