Spec-Zone.ru › Varnish

Синтаксис VCL

VCL унаследовал много от C, и он читается очень похоже на простой C или Perl.

Блоки ограничены фигурными скобками, операторы заканчиваются точкой с запятой, а комментарии могут быть написаны как в C, C++ или Perl в соответствии с вашими предпочтениями.

Обратите внимание, что VCL не содержит циклов или операторов перехода.

Этот раздел предоставляет обзор наиболее важных частей синтаксиса. Для получения полной документации синтаксиса VCL см. VCL в справке.

Строки

Базовые строки заключены в « … », и не могут содержать символы новой строки.

Обратная косая черта не является специальным символом, поэтому, например, в regsub() вам не нужно выполнять «полячку подсчета обратных косых черт»:

regsub("barf", "(b)(a)(r)(f)", "\4\3\2p") -> "frap"

Длинные строки заключены в {” … “} или “”” … “””. Они могут содержать любые символы, включая ", новую строку и другие управляющие символы, за исключением символа NUL (0x00). Если вам действительно нужны символы NUL в строке, есть VMOD, который позволяет создать такие строки.

Списки управления доступом (ACL)

Декларация ACL создает и инициализирует именованный список управления доступом, который впоследствии может использоваться для сопоставления адресов клиентов:

acl local {
  "localhost";         // myself
  "192.0.2.0"/24;      // and everyone on the local network
  ! "192.0.2.23";      // except for the dialin router
}

Если запись ACL указывает имя хоста, которое Varnish не может разрешить, она будет сопоставляться с любым адресом, с которым она сравнивается. Вследствие этого, если ей предшествует знак отрицания, она будет отклонять любой адрес, с которым она сравнивается, что, возможно, не соответствует вашим намерениям. Однако, если запись заключена в скобки, она просто будет проигнорирована.

Для сопоставления IP-адреса со списком управления доступом просто используйте оператор сопоставления:

if (client.ip ~ local) {
  return (pipe);
}

В версиях Varnish до 7.0 ACL всегда генерировали запись VCL_acl в журнале VSL. Начиная с 7.0, это необходимо явно включить, указав флаг +log.

acl local +log {
  "localhost";         // myself
  "192.0.2.0"/24;      // and everyone on the local network
  ! "192.0.2.23";      // except for the dialin router
}

Операторы

В VCL доступны следующие операторы. Примеры см. ниже.

=

Оператор присваивания.

==

Сравнение.

~

Сопоставление. Может использоваться как с регулярными выражениями, так и со списками управления доступом.

!

Отрицание.

&&

Логическое и

||

Логическое или

Встроенные подпрограммы

Varnish имеет довольно много встроенных подпрограмм, которые вызываются для каждой транзакции по мере ее прохождения через Varnish. Все эти встроенные подпрограммы имеют имя vcl_* и объяснены в Шагах VCL.

Обработка в встроенных подпрограммах заканчивается return (<action>) (см. Действия VCL).

В Встроенном VCL также содержатся пользовательские вспомогательные подпрограммы, вызываемые встроенными подпрограммами, также с префиксом vcl_.

Пользовательские подпрограммы

Вы можете написать свои собственные подпрограммы, имена которых не могут начинаться с vcl_.

Подпрограмма обычно используется для группирования кода для улучшения читаемости или повторного использования:

sub pipe_if_local {
  if (client.ip ~ local) {
    return (pipe);
  }
}

Для вызова подпрограммы используйте ключевое слово call за которым следует имя подпрограммы:

call pipe_if_local;

Пользовательские подпрограммы в VCL не принимают аргументов и не возвращают значений.

return (<action>) (см. Действия VCL), как показано в примере выше, возвращает управление в высший уровень встроенной подпрограммы (см. Шаги VCL), которая, возможно, через несколько шагов, приводит к вызову пользовательской подпрограммы.

return без действия возобновляет выполнение после оператора call вызывающей подпрограммы.

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/users-guide/vcl-syntax.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API