Переменные VCL
Полный альбом
- Раздел руководства:
-
7
ОПИСАНИЕ
Это список всех переменных языка VCL.
Имена переменных имеют вид scope.variable[.index], например:
req.url beresp.http.date client.ip
Ниже описаны возможные операции с каждой переменной, часто с использованием сокращений «backend», которое охватывает подпрограммы vcl_backend_* {}, и «client», которое охватывает всё остальное, кроме vcl_init {} и vcl_fini {}.
Локальный, серверный, удалённый и клиентский
Эти переменные описывают сетевое соединение между клиентом и varnishd.
Без протокола PROXY:
client server
remote local
v v
CLIENT ------------ VARNISHD
С протоколом PROXY:
client server remote local
v v v v
CLIENT ------------ PROXY ------------ VARNISHD
client.identity
Тип: STRING
Доступно для чтения: клиент, backend
Доступно для записи: клиент
Идентификация клиента, используемая для балансировки нагрузки в клиентском директоре. По умолчанию client.ip
Эта переменная может быть перезаписана более точной информацией, например, извлеченной из заголовка Cookie:.
client.ip
Тип: IP
Доступно для чтения: клиент, backend
IP-адрес клиента, либо такой же, как remote.ip, либо тот, что указан в протоколе PROXY.
server.hostname
Тип: STRING
Доступно для чтения: все
Имя хоста сервера, возвращаемое системной функцией gethostname(3).
server.identity
Тип: STRING
Доступно для чтения: все
Идентификатор сервера, установленный параметром -i.
Если параметр -i не передан в varnishd, будет использовано значение, возвращаемое системной функцией gethostname(3).
server.ip
Тип: IP
Доступно для чтения: клиент, backend
IP-адрес сокета, на котором было получено клиентское соединение, либо такой же, как server.ip, либо тот, что указан в протоколе PROXY.
remote.ip
Тип: IP
Доступно для чтения: клиент, backend
IP-адрес другого конца TCP-соединения. Может быть IP-адресом клиента или исходящим IP-адресом прокси-сервера.
Если соединение — сокет доменного сокета Unix, значение будет 0.0.0.0:0
local.endpoint VCL >= 4.1
Тип: STRING
Доступно для чтения: клиент, backend
Адрес сокета «-a», на котором было принято соединение.
Если аргумент был -a foo=:81, это будет «:81»
local.ip
Тип: IP
Доступно для чтения: клиент, backend
IP-адрес (и номер порта) локального конца TCP-соединения, например 192.168.1.1:81.
Если соединение — сокет доменного сокета Unix, значение будет 0.0.0.0:0
local.socket VCL >= 4.1
Тип: STRING
Доступно для чтения: клиент, backend
Имя сокета «-a», на котором было принято соединение.
Если аргумент был -a foo=:81, это будет «foo».
Обратите внимание, что все сокеты «-a» получают имя по форме a%d, если имя не указано.
req и req_top
Эти переменные описывают текущий запрос, и когда обрабатываются запросы ESI:include, req_top указывает на запрос, полученный от клиента.
req
Тип: HTTP
Доступно для чтения: клиент
Вся структура данных запроса HTTP. В основном полезна для передачи в VMOD.
req.backend_hint
Тип: BACKEND
Доступно для чтения: клиент
Доступно для записи: клиент
Установите bereq.backend на это значение, если мы пытаемся выполнить запрос. При установке на директиву, чтение этой переменной возвращает фактический backend, если директива разрешила его немедленно, или директиву иначе. При использовании в контексте строки возвращает имя директора или бэкенда соответственно.
req.can_gzip
Тип: BOOL
Доступно для чтения: клиент
Истина, если клиент предоставил gzip или x-gzip в заголовке Accept-Encoding.
req.esi VCL <= 4.0
Тип: BOOL
Доступно для чтения: клиент
Доступно для записи: клиент
Установите в false, чтобы отключить обработку ESI независимо от значения beresp.do_esi. По умолчанию true. Эта переменная заменена на resp.do_esi в VCL 4.1.
req.esi_level
Тип: INT
Доступно для чтения: клиент
Счётчик уровней вложенных запросов ESI.
req.grace
Тип: DURATION
Доступно для чтения: клиент
Доступно для записи: клиент
Предельное время действия объекта.
Во время поиска используется минимальное значение из req.grace и хранимого значения grace объекта.
req.hash
Тип: BLOB
Доступно для чтения: vcl_hit, vcl_miss, vcl_pass, vcl_purge, vcl_deliver
Хеш-ключ этого запроса. В основном полезно для передачи в VMOD, но также может быть полезно для отладки статуса hit/miss.
req.hash_always_miss
Тип: BOOL
Доступно для чтения: клиент
Доступно для записи: клиент
По умолчанию: false.
Принудительно формировать промах кэша для этого запроса, даже если есть подходящие объекты в кэше.
Полезно для принудительного обновления кэша без аннулирования существующих записей в случае неудачи запроса.
req.hash_ignore_busy
Тип: BOOL
Доступно для чтения: клиент
Доступно для записи: клиент
По умолчанию: false.
Игнорировать любой занятый объект во время поиска в кэше.
Нужно использовать только когда два сервера ищут контент друг от друга, чтобы избежать тупиков.
req.hash_ignore_vary
Тип: BOOL
Доступно для чтения: клиент
Доступно для записи: клиент
По умолчанию: false.
Игнорировать заголовки vary объектов во время поиска в кэше.
Возвращает первое совпадение независимо от совместимости объекта с запросом клиента. Полезно, когда вариации не важны для определенных клиентов, и различия в представлении ресурса не влияют на то, как клиент его интерпретирует.
Используйте с осторожностью.
req.http.*
Тип: HEADER
Доступно для чтения: клиент
Доступно для записи: клиент
Нельзя установить из: клиент
Заголовки запроса, например req.http.date.
RFC позволяют несколько заголовков с одинаковым именем, и как set, так и unset удалят все заголовки с данным именем.
Имя заголовка * является символом VCL и, например, не может начинаться с цифры. Для работы с допустимыми заголовками, которые не могут быть представлены как символы VCL, можно использовать кавычки, например req.http."grammatically.valid". Ни один из заголовков HTTP, присутствующих в реестрах IANA, не нуждается в кавычках, поэтому синтаксис с кавычками не рекомендуется, но доступен для межсетевого взаимодействия.
Некоторые заголовки, которые не могут быть изменены для правильного получения или доставки HTTP, являются только для чтения.
req.http.content-length
Тип: HEADER
Доступно для чтения: клиент
Поле заголовка content-length защищено, см. protected_headers.
req.http.transfer-encoding
Тип: HEADER
Доступно для чтения: клиент
Поле заголовка transfer-encoding защищено, см. protected_headers.
req.is_hitmiss
Тип: BOOL
Доступно для чтения: клиент
Если данный запрос привёл к промаху кэша
req.is_hitpass
Тип: BOOL
Доступно для чтения: клиент
Если данный запрос привёл к попаданию в кэш
req.method
Тип: STRING
Доступно для чтения: клиент
Доступно для записи: клиент
Метод запроса (например, «GET», «HEAD», …)
req.proto VCL <= 4.0
Тип: STRING
Доступно для чтения: клиент
Доступно для записи: клиент
Версия протокола HTTP, используемая клиентом, обычно «HTTP/1.1» или «HTTP/2.0».
req.proto VCL >= 4.1
Тип: STRING
Доступно для чтения: клиент
Версия протокола HTTP, используемая клиентом, обычно «HTTP/1.1» или «HTTP/2.0».
req.restarts
Тип: INT
Доступно для чтения: клиент
Количество перезапусков запроса.
req.storage
Тип: STEVEDORE
Доступно для чтения: клиент
Доступно для записи: клиент
Бэкенд хранения для сохранения тела запроса.
req.time
Тип: TIME
Доступно для чтения: клиент
Время, когда запрос был полностью получен, остаётся неизменным при перезапусках.
req.trace
Тип: BOOL
Доступно для чтения: клиент
Доступно для записи: клиент
Управление выводом записей VSL для текущего запроса, см. VSL.
По умолчанию соответствует значению параметра feature trace, см. varnishd. Не сбрасывается при отмене.
req.transport
Тип: STRING
Доступно для чтения: клиент
Протокол передачи, который доставил этот запрос.
req.ttl
Тип: DURATION
Доступно для чтения: клиент
Доступно для записи: клиент
Максимальный срок хранения объекта для кэширования.
req.url
Тип: STRING
Доступно для чтения: клиент
Доступно для записи: клиент
Запрошенный URL, например «/robots.txt».
req.xid
Тип: INT
Доступно для чтения: клиент
Уникальный идентификатор этого запроса.
req_top.http.*
Тип: HEADER
Доступно для чтения: клиент
Заголовки HTTP верхнего уровня запроса в дереве запросов ESI. Идентично req.http в запросах, не связанных с ESI.
См. req.http для общих замечаний.
req_top.method
Тип: STRING
Доступно для чтения: клиент
Метод запроса верхнего уровня в дереве запросов ESI. (например, «GET», «HEAD»). Идентично req.method в запросах, не связанных с ESI.
req_top.proto
Тип: STRING
Доступно для чтения: клиент
Версия протокола HTTP верхнего уровня в дереве запросов ESI. Идентично req.proto в запросах, не связанных с ESI.
req_top.time
Тип: TIME
Доступно для чтения: клиент
Время, когда был полностью получен запрос верхнего уровня, остаётся неизменным при перезапусках.
req_top.url
Тип: STRING
Доступно для чтения: клиент
Запрошенный URL верхнего уровня запроса в дереве запросов ESI. Идентично req.url в запросах, не связанных с ESI.
bereq
Это запрос, который мы отправляем на бэкенд, он создается из полей клиента req.*, отфильтровывая поля «per-hop», которые не должны передаваться (Connection:, Range: и аналогичные).
Для pass` fetches
than for `miss` fetches, for instance ``Range разрешено несколько больше полей.
bereq
Тип: HTTP
Чтение из: бэкенд
Полная структура данных запроса HTTP для бэкенда. В основном полезна в качестве аргумента для VMOD.
bereq.backend
Тип: БЭКЕНД
Чтение из: vcl_pipe, бэкенд
Запись в: vcl_pipe, бэкенд
Это бэкенд или дирижёр, который мы пытаемся получить. При установке на дирижёра, чтение этой переменной возвращает фактический бэкенд, если дирижёр разрешил его сразу, в противном случае — дирижёр. При использовании в строковом контексте возвращает имя дирижёра или бэкенда соответственно.
bereq.between_bytes_timeout
Тип: ПРОДОЛЖИТЕЛЬНОСТЬ
Чтение из: бэкенд
Запись в: бэкенд
По умолчанию: атрибут .between_bytes_timeout из Определения бэкенда, который по умолчанию равен параметру between_bytes_timeout, см. varnishd.
Время в секундах ожидания между каждым полученным байтом от бэкенда. Недоступно в режиме pipe.
bereq.body
Тип: ТЕЛО
Не задается из: vcl_backend_fetch
Тело запроса.
Отключение также удалит bereq.http.content-length.
bereq.connect_timeout
Тип: ПРОДОЛЖИТЕЛЬНОСТЬ
Чтение из: vcl_pipe, бэкенд
Запись в: vcl_pipe, бэкенд
По умолчанию: атрибут .connect_timeout из Определения бэкенда, который по умолчанию равен параметру connect_timeout, см. varnishd.
Время в секундах ожидания установления соединения с бэкендом.
bereq.first_byte_timeout
Тип: ПРОДОЛЖИТЕЛЬНОСТЬ
Чтение из: бэкенд
Запись в: бэкенд
По умолчанию: атрибут .first_byte_timeout из Определения бэкенда, который по умолчанию равен параметру first_byte_timeout, см. varnishd.
Время в секундах ожидания получения первого байта от бэкенда. Недоступно в режиме pipe.
bereq.hash
Тип: БЛОК
Чтение из: vcl_pipe, бэкенд
Ключ хеша этого запроса, копия req.hash.
bereq.http.*
Тип: ЗАГОЛОВОК
Чтение из: vcl_pipe, бэкенд
Запись в: vcl_pipe, бэкенд
Не задается из: vcl_pipe, бэкенд
Заголовки, которые будут отправлены на бэкенд.
См. req.http для общих замечаний.
bereq.http.content-length
Тип: ЗАГОЛОВОК
Чтение из: бэкенд
Поле заголовка content-length защищено, см. protected_headers.
bereq.http.transfer-encoding
Тип: ЗАГОЛОВОК
Чтение из: бэкенд
Поле заголовка transfer-encoding защищено, см. protected_headers.
bereq.is_bgfetch
Тип: BOOL
Чтение из: бэкенд
Истинно для запросов, где клиент получил попадание в объект grace, и этот запрос был запущен в фоновом режиме для получения свежей копии.
bereq.is_hitmiss
Тип: BOOL
Чтение из: бэкенд
Если этот запрос бэкенда был вызван hitmiss.
bereq.is_hitpass
Тип: BOOL
Чтение из: бэкенд
Если этот запрос бэкенда был вызван hitpass.
bereq.method
Тип: СТРОКА
Чтение из: vcl_pipe, бэкенд
Запись в: vcl_pipe, бэкенд
Тип запроса (например, «GET», «HEAD»).
Регулярные (не pipe, не pass) запросы всегда «GET»
bereq.proto VCL <= 4.0
Тип: СТРОКА
Чтение из: vcl_pipe, бэкенд
Запись в: vcl_pipe, бэкенд
Версия протокола HTTP, «HTTP/1.1», если запрос pass или pipe имеет «HTTP/1.0» в req.proto
bereq.proto VCL >= 4.1
Тип: СТРОКА
Чтение из: vcl_pipe, бэкенд
Версия протокола HTTP, «HTTP/1.1», если запрос pass или pipe имеет «HTTP/1.0» в req.proto
bereq.retries
Тип: ЦЕЛОЕ
Чтение из: бэкенд
Количество попыток повторного выполнения этого запроса.
bereq.time
Тип: ВРЕМЯ
Чтение из: vcl_pipe, бэкенд
Время, когда мы начали подготовку первого запроса к бэкенду, остается постоянным при повторных попытках.
bereq.trace
Тип: BOOL
Чтение из: бэкенд
Запись в: бэкенд
Управляет тем, генерируются ли записи VSL VCL_trace для текущего запроса, см. VSL.
Наследует значение req.trace при создании запроса к бэкенду. Не сбрасывается при отмене.
bereq.uncacheable
Тип: BOOL
Чтение из: бэкенд
Указывает, является ли этот запрос некэшируемым из-за pass со стороны клиента или попадания в объект hit-for-pass.
bereq.url
Тип: СТРОКА
Чтение из: vcl_pipe, бэкенд
Запись в: vcl_pipe, бэкенд
Запрашиваемый URL, скопированный из req.url
bereq.xid
Тип: ЦЕЛОЕ
Чтение из: vcl_pipe, бэкенд
Уникальный идентификатор этого запроса.
beresp
Полученный от бэкенда ответ, при промахе кэша, объект хранилища создаётся из beresp.
beresp
Тип: HTTP
Доступно в: vcl_backend_response, vcl_backend_error
Полная структура HTTP-ответа бэкенда, полезна в качестве аргумента для функций VMOD.
beresp.age
Тип: ПРОДОЛЖИТЕЛЬНОСТЬ
Доступно в: vcl_backend_response, vcl_backend_error
Значение по умолчанию: Заголовок Age или ноль.
Возраст объекта.
beresp.backend
Тип: БЭКЕНД
Доступно в: vcl_backend_response, vcl_backend_error
Бэкенд, с которого был получен ответ. Если в bereq.backend был задан дирижёр, это будет бэкенд, выбранный дирижёром. При использовании в строковом контексте возвращает его имя.
beresp.backend.ip VCL <= 4.0
Тип: IP
Доступно в: vcl_backend_response
IP-адрес бэкенда, с которого был получен ответ.
beresp.backend.name
Тип: СТРОКА
Доступно в: vcl_backend_response, vcl_backend_error
Имя бэкенда, с которого был получен ответ. Совпадает с beresp.backend.
beresp.body
Тип: ТЕЛО
Записывается в: vcl_backend_error
Для создания синтетического тела.
beresp.do_esi
Тип: БУЛЕВО
Доступно в: vcl_backend_response, vcl_backend_error
Записывается в: vcl_backend_response, vcl_backend_error
Значение по умолчанию: false.
Установите в значение true, чтобы разобрать объект на директивы ESI. Это необходимо для последующей обработки ESI на стороне клиента. Если beresp.do_esi имеет значение false, когда объект попадает в кэш, обработка ESI на стороне клиента невозможна (obj.can_esi будет false).
Использование beresp.do_esi после установки beresp.filters является ошибкой VCL.
beresp.do_gunzip
Тип: БУЛЕВО
Доступно в: vcl_backend_response, vcl_backend_error
Записывается в: vcl_backend_response, vcl_backend_error
Значение по умолчанию: false.
Установите в значение true, чтобы сжать объект с помощью gzip при его сохранении в кэше.
Если функция http_gzip_support отключена, установка этой переменной не имеет эффекта.
Использование beresp.do_gunzip после установки beresp.filters является ошибкой VCL.
beresp.do_gzip
Тип: БУЛЕВО
Доступно в: vcl_backend_response, vcl_backend_error
Записывается в: vcl_backend_response, vcl_backend_error
Значение по умолчанию: false.
Установите в значение true, чтобы сжать объект с помощью gzip при его сохранении.
Если функция http_gzip_support отключена, установка этой переменной не имеет эффекта.
Использование beresp.do_gzip после установки beresp.filters является ошибкой VCL.
beresp.do_stream
Тип: БУЛЕВО
Доступно в: vcl_backend_response, vcl_backend_error
Записывается в: vcl_backend_response, vcl_backend_error
Значение по умолчанию: true.
Передать объект клиенту, предварительно загрузив его целиком в varnish.
Для неукэшируемых объектов хранилище частей тела, которые были отправлены клиенту, может быть освобождено раньше, в зависимости от используемого механизма хранилища.
Эта переменная не имеет эффекта, если beresp.do_esi имеет значение true или если тело ответа пустое.
beresp.filters
Тип: СТРОКА
Доступно в: vcl_backend_response
Записывается в: vcl_backend_response
Список фильтров процессора извлечения Varnish (VFP), через которые будет проходить beresp.body. Порядок слева направо указывает обработку от бэкенда к кэшу, то есть фильтр слева обрабатывается первым по отношению к телу, полученному от бэкенда после декодирования любых кодировок передачи.
Фильтры VFP изменяют тело перед попаданием в кэш и/или передачей на клиентскую сторону, где оно может быть обработано ещё раз с помощью resp.filters.
В varnish-cache существуют следующие фильтры VFP:
-
gzip: сжимает тело с помощью gzip -
testgunzip: Проверяет, является ли тело валидным gzip, и отказывается от него в противном случае -
gunzip: Разжимает gzip-контент -
esi: Обрабатывает текстовый контент ESI -
esi_gzip: Сохраняет сжатые фрагменты для эффективной обработки ESIЭтот фильтр позволяет объединять ESI из отдельных сжатых фрагментов, экономя вычислительные ресурсы для повторного сжатия на стороне клиента в ущерб некоторой эффективности сжатия.
Дополнительные фильтры VFP доступны из VMOD.
По умолчанию beresp.filters формируется следующим образом:
-
gunzipдобавляется для сжатого контента, еслиberesp.do_gunzipилиberesp.do_esiимеют значение true. -
esi_gzipдобавляется, еслиberesp.do_esiимеет значение true вместе сberesp.do_gzipили контент уже сжат. -
esiдобавляется, еслиberesp.do_esiимеет значение true -
gzipдобавляется для несжатого контента, еслиberesp.do_gzipимеет значение true -
testgunzipдобавляется для сжатого контента, еслиberesp.do_gunzipимеет значение false.
После установки beresp.filters использование любого из упомянутых ранее beresp.do_* переключателей является ошибкой VCL.
beresp.grace
Тип: ПРОДОЛЖИТЕЛЬНОСТЬ
Доступно в: vcl_backend_response, vcl_backend_error
Записывается в: vcl_backend_response, vcl_backend_error
Значение по умолчанию: Директива Cache-Control stale-while-revalidate или параметр default_grace.
Установите период, чтобы включить grace.
beresp.http.*
Тип: ЗАГОЛОВОК
Доступно в: vcl_backend_response, vcl_backend_error
Записывается в: vcl_backend_response, vcl_backend_error
Не может быть установлено: vcl_backend_response, vcl_backend_error
HTTP-заголовки, возвращённые сервером.
См. req.http для общих замечаний.
beresp.http.content-length
Тип: ЗАГОЛОВОК
Доступно в: vcl_backend_response, vcl_backend_error
Поле заголовка content-length защищено, см. protected_headers.
beresp.http.transfer-encoding
Тип: ЗАГОЛОВОК
Доступно в: vcl_backend_response, vcl_backend_error
Поле заголовка transfer-encoding защищено, см. protected_headers.
beresp.keep
Тип: ПРОДОЛЖИТЕЛЬНОСТЬ
Доступно в: vcl_backend_response, vcl_backend_error
Записывается в: vcl_backend_response, vcl_backend_error
Значение по умолчанию: параметр default_keep.
Установите период, чтобы включить условные запросы к бэкенду.
Время keep — это срок жизни кэша в дополнение к ttl.
Объекты со сроком ttl, истекшим, но с оставшимся временем keep могут быть использованы для отправки условных (If-Modified-Since/If-None-Match) запросов к бэкенду для их обновления.
beresp.proto VCL <= 4.0
Тип: СТРОКА
Доступно в: vcl_backend_response, vcl_backend_error
Записывается в: vcl_backend_response, vcl_backend_error
Версия HTTP-протокола, возвращённая бэкендом.
beresp.proto VCL >= 4.1
Тип: СТРОКА
Доступно в: vcl_backend_response, vcl_backend_error
Версия HTTP-протокола, возвращённая бэкендом.
beresp.reason
Тип: СТРОКА
Доступно в: vcl_backend_response, vcl_backend_error
Записывается в: vcl_backend_response, vcl_backend_error
HTTP-сообщение со статусом, возвращённое сервером.
beresp.status
Тип: ЦЕЛОЕ
Доступно в: vcl_backend_response, vcl_backend_error
Записывается в: vcl_backend_response, vcl_backend_error
HTTP-код статуса, возвращённый сервером.
Дополнительная информация в разделе HTTP-статус ответа.
beresp.storage
Тип: STEVEDORE
Доступно в: vcl_backend_response, vcl_backend_error
Записывается в: vcl_backend_response, vcl_backend_error
Хранилище бэкенда, которое нужно использовать для сохранения этого объекта.
beresp.storage_hint VCL <= 4.0
Тип: СТРОКА
Доступно в: vcl_backend_response, vcl_backend_error
Записывается в: vcl_backend_response, vcl_backend_error
Устарело с версии varnish 5.1 и снято с поддержки с версии VCL 4.1 (varnish 6.0). Используйте beresp.storage вместо него.
Подсказка для Varnish, что этот объект нужно сохранить в определённом хранилище бэкенда.
beresp.time
Тип: ВРЕМЯ
Доступно в: vcl_backend_response, vcl_backend_error
Время, когда заголовки бэкенда были полностью получены непосредственно перед тем, как была вызвана функция vcl_backend_response {} или когда была вызвана функция vcl_backend_error {}.
beresp.transit_buffer
Тип: БАЙТЫ
Доступно в: vcl_backend_response
Записывается в: vcl_backend_response
Значение по умолчанию: параметр transit_buffer, см. varnishd.
Максимальное количество байтов, на которое клиент может опережать бэкенд во время потоковой передачи, если beresp неукэшируемый. Также см. документацию параметра transit_buffer в varnishd.
beresp.ttl
Тип: ПРОДОЛЖИТЕЛЬНОСТЬ
Доступно в: vcl_backend_response, vcl_backend_error
Записывается в: vcl_backend_response, vcl_backend_error
Значение по умолчанию: директивы Cache-Control s-maxage или max-age или значение, вычисленное из крайнего срока действия заголовка Expires, или параметр default_ttl.
Оставшееся время жизни объекта в секундах.
beresp.uncacheable
Тип: БУЛЕВО
Доступно в: vcl_backend_response, vcl_backend_error
Записывается в: vcl_backend_response, vcl_backend_error
Унаследованно от bereq.uncacheable, см. там.
Установка этой переменной делает объект неукэшируемым.
Это может привести к созданию объекта hit-for-miss в кэше.
Очистка переменной не имеет эффекта и выведет предупреждение «Игнорируется попытка сброса beresp.uncacheable».
beresp.was_304
Тип: БУЛЕВО
Доступно в: vcl_backend_response, vcl_backend_error
При получении true, это указывает на то, что мы получили ответ 304 на наш условный запрос к бэкенду и превратили его в beresp.status = 200
obj
Это объект, найденный в кэше. Его нельзя изменить.
obj.age
Тип: ПРОДОЛЖИТЕЛЬНОСТЬ
Доступно из: vcl_hit, vcl_deliver
Возраст объекта.
obj.can_esi
Тип: ЛОГИЧЕСКОЕ
Доступно из: vcl_hit, vcl_deliver
Если объект можно обработать с помощью ESI, то есть если установка resp.do_esi или добавление esi к resp.filters в vcl_deliver {} вызовет обработку тела ответа с помощью ESI.
obj.grace
Тип: ПРОДОЛЖИТЕЛЬНОСТЬ
Доступно из: vcl_hit, vcl_deliver
Период действия объекта в секундах.
obj.hits
Тип: ЦЕЛОЕ
Доступно из: vcl_hit, vcl_deliver
Количество попаданий в кэш для этого объекта.
В vcl_deliver значение 0 указывает на промах в кэше.
obj.http.*
Тип: ЗАГОЛОВОК
Доступно из: vcl_hit
HTTP-заголовки, хранящиеся в объекте.
См. req.http для общих сведений.
obj.keep
Тип: ПРОДОЛЖИТЕЛЬНОСТЬ
Доступно из: vcl_hit, vcl_deliver
Период хранения объекта в секундах.
obj.proto
Тип: СТРОКА
Доступно из: vcl_hit
Версия протокола HTTP, хранящаяся в объекте.
obj.reason
Тип: СТРОКА
Доступно из: vcl_hit
Фраза причины HTTP, хранящаяся в объекте.
obj.status
Тип: ЦЕЛОЕ
Доступно из: vcl_hit
Код состояния HTTP, хранящийся в объекте.
Дополнительная информация в разделе HTTP-статус ответа.
obj.storage
Тип: STEVEDORE
Доступно из: vcl_hit, vcl_deliver
Хранилище, где хранится этот объект.
obj.time
Тип: ВРЕМЯ
Доступно из: vcl_hit, vcl_deliver
Время создания объекта с точки зрения сервера, который его сгенерировал. Это примерно эквивалентно now - obj.age.
obj.ttl
Тип: ПРОДОЛЖИТЕЛЬНОСТЬ
Доступно из: vcl_hit, vcl_deliver
Остающееся время жизни объекта в секундах.
obj.uncacheable
Тип: ЛОГИЧЕСКОЕ
Доступно из: vcl_deliver
Является ли объект некэшируемым (пропустить, попадание для пропуска или попадание для промаха).
resp
Это ответ, который мы отправляем клиенту. Он создаётся либо из beresp (пропуск/промах), либо из obj (попадания) или создаётся с нуля (synth).
За исключением resp.body, все resp.* переменные доступны как в vcl_deliver{}, так и в vcl_synth{} по принципу симметрии.
resp
Тип: HTTP
Доступно из: vcl_deliver, vcl_synth
Полная структура данных ответа HTTP, удобная в качестве аргумента для VMOD.
resp.body
Тип: ТЕЛО
Записывается из: vcl_synth
Для создания синтетического тела ответа, например, для ошибок.
resp.do_esi VCL >= 4.1
Тип: ЛОГИЧЕСКОЕ
Доступно из: vcl_deliver, vcl_synth
Записывается из: vcl_deliver, vcl_synth
По умолчанию: obj.can_esi
Это можно использовать для выборочного отключения обработки ESI, даже если обработка ESI произошла во время извлечения (см. beresp.do_esi). Это полезно, когда кэши Varnish обмениваются данными друг с другом.
Использование resp.do_esi после установки resp.filters является ошибкой VCL.
resp.filters
Тип: СТРОКА
Доступно из: vcl_deliver, vcl_synth
Записывается из: vcl_deliver, vcl_synth
Список фильтров VDP, через которые будет передаваться resp.body.
Перед установкой resp.filters значение, которое считывается, будет списком фильтров по умолчанию, определённым Varnish на основе resp.do_esi и заголовков запроса.
После установки resp.filters изменение каких-либо условий, которые в противном случае определяют выбор фильтра, не повлияет. Использование resp.do_esi является ошибкой после установки resp.filters.
resp.http.*
Тип: ЗАГОЛОВОК
Доступно из: vcl_deliver, vcl_synth
Записывается из: vcl_deliver, vcl_synth
Неизменяемо из: vcl_deliver, vcl_synth
HTTP-заголовки, которые будут возвращены.
См. req.http для общих сведений.
resp.http.content-length
Тип: ЗАГОЛОВОК
Доступно из: vcl_deliver, vcl_synth
Поле заголовка content-length защищено, см. protected_headers.
resp.http.transfer-encoding
Тип: ЗАГОЛОВОК
Доступно из: vcl_deliver, vcl_synth
Поле заголовка transfer-encoding защищено, см. protected_headers.
resp.is_streaming
Тип: ЛОГИЧЕСКОЕ
Доступно из: vcl_deliver, vcl_synth
Возвращает true, когда ответ будет передаваться потоком при извлечении из бэкенда.
resp.proto VCL <= 4.0
Тип: СТРОКА
Доступно из: vcl_deliver, vcl_synth
Записывается из: vcl_deliver, vcl_synth
Версия протокола HTTP для использования в ответе.
resp.proto VCL >= 4.1
Тип: СТРОКА
Доступно из: vcl_deliver, vcl_synth
Версия протокола HTTP для использования в ответе.
resp.reason
Тип: СТРОКА
Доступно из: vcl_deliver, vcl_synth
Записывается из: vcl_deliver, vcl_synth
Сообщение состояния HTTP, которое будет возвращено.
resp.status
Тип: ЦЕЛОЕ
Доступно из: vcl_deliver, vcl_synth
Записывается из: vcl_deliver, vcl_synth
Код состояния HTTP, который будет возвращён.
Дополнительная информация в разделе HTTP-статус ответа.
resp.status 200 будет изменён на 304 кодом ядра после возврата (deliver) из vcl_deliver для условных запросов к кэшированному контенту, если проверка успешна.
Для проверки сначала req.http.If-None-Match сравнивается с resp.http.Etag. Если они равны в соответствии с правилами слабой проверки (см. RFC7232), отправляется 304.
Во-вторых, req.http.If-Modified-Since сравнивается с resp.http.Last-Modified или, если он не задан или слабый, со временем последнего изменения объекта на основе заголовков Date и Age, полученных с ответом бэкенда, который создал объект. Если объект не был изменён на основе этого сравнения, отправляется 304.
resp.time
Тип: ВРЕМЯ
Доступно из: vcl_deliver, vcl_synth
Время, когда мы начали подготовку ответа, сразу перед входом в vcl_synth {} или vcl_deliver {}.
Специальные переменные
now
Тип: ВРЕМЯ
Доступно из: всех
Текущее время в секундах с начала эпохи Unix.
При преобразовании в СТРОКУ в выражениях возвращает отформатированный временной отметки, например, Tue, 20 Feb 2018 09:30:31 GMT
now остаётся стабильным в течение всего времени работы любой встроенной подпрограммы VCL, чтобы сделать основанные на времени вычисления предсказуемыми и избежать крайних случаев.
Другими словами, даже если в VCL затрачивается значительное время, now всегда будет представлять момент времени, когда была вызвана соответствующая встроенная подпрограмма VCL. now не подходит для каких-либо измерений времени. См. VOID timestamp(STRING s), TIME now() и DURATION timed_call(SUB) в VMOD std - Varnish Standard Module.
sess
Сессия соответствует «диалогу», который Varnish ведёт с одним соединением клиента, через которое может происходить одна или несколько транзакций запрос/ответ. Она может включать трафик по HTTP/1 keep-alive соединению или мультиплексированный трафик по HTTP/2 соединению.
sess.idle_send_timeout
Тип: ПРОДОЛЖИТЕЛЬНОСТЬ
Доступно из: клиент
Записывается из: клиент
Таймаут отправки для отдельных фрагментов данных по соединениям клиентов, по умолчанию используется параметр idle_send_timeout, см. varnishd
sess.send_timeout
Тип: ПРОДОЛЖИТЕЛЬНОСТЬ
Доступно из: клиент
Записывается из: клиент
Общий таймаут для обычных HTTP1 ответов, по умолчанию используется параметр send_timeout, см. varnishd
sess.timeout_idle
Тип: ПРОДОЛЖИТЕЛЬНОСТЬ
Доступно из: клиент
Записывается из: клиент
Таймаут бездействия для этой сессии, по умолчанию используется параметр timeout_idle, см. varnishd
sess.timeout_linger
Тип: ПРОДОЛЖИТЕЛЬНОСТЬ
Доступно из: клиент
Записывается из: клиент
Таймаут ожидания для этой сессии, по умолчанию используется параметр timeout_linger, см. varnishd
sess.xid VCL >= 4.1
Тип: ЦЕЛОЕ
Доступно из: клиент, бэкенд
Уникальный идентификатор этой сессии.
storage
storage.<name>.free_space
Тип: БАЙТЫ
Доступно из: клиент, бэкенд
Доступное свободное место в указанном хранилище. Доступно только для хранилища malloc.
storage.<name>.happy
Тип: ЛОГИЧЕСКОЕ
Доступно из: клиент, бэкенд
Статус работоспособности указанного хранилища. Недоступно ни в одном из текущих хранилищ.
storage.<name>.used_space
Тип: БАЙТЫ
Доступно из: клиент, бэкенд
Занятое место в указанном хранилище. Доступно только для хранилища malloc.
Защищённые поля заголовков
Заголовки content-length и transfer-encoding являются только для чтения. Они должны быть сохранены, чтобы обеспечить согласованность кадрирования HTTP/1 и сохранить надлежащую синхронизацию запроса и ответа как с клиентами, так и с бэкендами.
VMOD по-прежнему может обновлять эти заголовки, когда есть причина изменить кадрирование, например, при преобразовании тела запроса или ответа.
Код состояния HTTP-ответа
Код состояния HTTP имеет 3 цифры XYZ, где X должен быть целым числом от 1 до 5 включительно. Поскольку нередко клиенты или серверы HTTP полагаются на нестандартные или даже некорректные коды состояния, Varnish может работать с любым кодом от 100 до 999.
В коде VCL даже можно использовать коды состояния в формате VWXYZ, если общее значение меньше 65536, но только часть XYZ будет отправлена клиенту, а к тому времени X должен стать ненулевым.
Формат кодов состояния VWXYZ может передавать дополнительную информацию в resp.status и beresp.status, чтобы указать, какой синтетический контент генерировать:
sub vcl_recv {
if ([...]) {
return synth(12404);
}
}
sub vcl_synth {
if (resp.status == 12404) {
[...] // this specific 404
} else if (resp.status % 1000 == 404) {
[...] // all other 404's
}
}
Переменная obj.status будет унаследовать формат VWXYZ, но в выражении запрета будет доступна только часть XYZ. Формат VWXYZ строго ограничен выполнением VCL.
Назначение стандартного кода HTTP для resp.status или beresp.status также установит resp.reason или beresp.reason соответствующее сообщение о состоянии.
Обработка 304
Для ответа 304 ядро Varnish изменяет beresp перед вызовом vcl_backend_response:
- Если статус сжатия изменился,
Content-Encodingсбрасывается, и любыеEtagослабляются - Любые заголовки, отсутствующие в ответе 304, копируются из существующего объекта кэша.
Content-Lengthкопируется, если присутствует в существующем объекте кэша, и отбрасывается в противном случае. - Состояние устанавливается в 200.
beresp.was_304 отмечает, что обработка условного ответа произошла.
Примечание: условные запросы к бэкенду независимы от условных запросов клиента, поэтому клиенты могут получать ответы 304 независимо от того, был ли запрос к бэкенду условным.
beresp.ttl / beresp.grace / beresp.keep
Перед вызовом vcl_backend_response ядро устанавливает beresp.ttl на основе кода состояния ответа и заголовков ответа Age, Cache-Control или Expires и Date следующим образом:
- Если присутствует и корректен, значение заголовка
Ageфактически вычисляется из всех вычислений ttl. -
Для кодов состояния 200, 203, 204, 300, 301, 304, 404, 410 и 414:
- Если
Cache-Controlсодержит полеs-maxageилиmax-age(в порядке предпочтения), ttl устанавливается на соответствующее неотрицательное значение или 0, если значение отрицательное. - В противном случае, если заголовок
Expiresне существует, используется значение ttl по умолчанию. - В противном случае, если
Expiresсодержит отметку времени доDate, ttl устанавливается в 0. -
В противном случае, если заголовок
Dateотсутствует или отметка времени заголовкаDateотличается от локального времени не более чем на параметрclock_skew, ttl устанавливается в- 0, если
Expiresобозначает прошлую отметку времени, или - разницу между локальным временем и заголовком
Expiresв противном случае.
- 0, если
- В противном случае, ttl устанавливается на разницу между
ExpiresиDate
- Если
- Для кодов состояния 302 и 307 вычисление идентично, за исключением того, что значение ttl по умолчанию не используется, и возвращается -1, если ни
Cache-Control, ниExpiresне существуют. - Для всех остальных кодов состояния возвращается ttl -1.
beresp.grace по умолчанию равен параметру default_grace.
Для неотрицательного ttl, если Cache-Control содержит значение поля stale-while-revalidate, beresp.grace устанавливается на это значение, если оно неотрицательно, или 0 в противном случае.
beresp.keep по умолчанию равен параметру default_keep.
СМОТРИТЕ ТАКЖЕ
ИСТОРИЯ
VCL был разработан Poul-Henning Kamp в сотрудничестве с Verdens Gang AS, Redpill Linpro и Varnish Software. Эта страница руководства написана Per Buer, Poul-Henning Kamp, Martin Blix Grydeland, Kristian Lyngstøl, Lasse Karstensen и другими.
АВТОРСКИЕ ПРАВА
Данный документ лицензирован по той же лицензии, что и сам Varnish. Подробности см. в файле LICENSE.
- Copyright (c) 2006 Verdens Gang AS
- Copyright (c) 2006-2021 Varnish Software AS
Copyright © 2006 Verdens Gang AS
Copyright © 2006–2020 Varnish Software AS
Licensed under the BSD-2-Clause License.
https://varnish-cache.org/docs/7.4/reference/vcl-var.html