Документация Varnish

Опубликовано 2014.10.21

Обработчики

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.