Синтаксис 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