如何在default.vcl清漆中创建自定义功能?

mor*_*bio 1 varnish varnish-vcl

我在我的vcl中有重复的代码,我想创建自定义函数而不嵌入内联C代码.有可能的?

非常感谢您的阅读!最好的祝福

Ron*_*ald 5

您可以像这样定义自定义子例程

sub my_subroutine {
  ... 
}
Run Code Online (Sandbox Code Playgroud)

并称之为:

call my_subroutine;
Run Code Online (Sandbox Code Playgroud)

来自:http://book.varnish-software.com/4.0/chapters/VCL_Basics.html

VCL中的子程序既不接受参数也不接受返回值.每个子例程都通过调用return(action)来终止,其中action是指示所需结果的关键字.子例程可以检查和操纵HTTP头字段以及每个请求的各种其他方面.子例程指示如何处理请求.

子程序示例:

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

要调用子例程,请使用call关键字,后跟子例程的名称:

call pipe_if_local;

Varnish有内置的子程序,它们与Varnish工作流程挂钩.这些内置子程序都命名为vcl_*.你自己的子程序无法用vcl_开始它们的名字.