You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Varnish 7.4 OSS中创建自定义本地变量?

在Varnish 7.4 OSS中使用本地变量的正确方法

Varnish原生VCL支持在单个vcl_*子例程内声明本地变量,你之前的写法错误是因为没遵循正确的语法规则,以下是具体实现方式:

核心语法规则

  • 本地变量必须先声明类型,再赋值,且声明语句必须放在子例程的最开头位置(所有逻辑代码之前)。
  • 支持的原生类型包括:STRING、TIME、INT、BOOL、REAL,无需额外VMOD。

正确示例

存储STRING类型

sub vcl_recv {
    # 先声明变量类型,放在子例程开头
    STRING v1;

    # 赋值
    set v1 = "hello";

    # 后续代码中直接调用变量
    if (v1 == "hello") {
        # 执行你的业务逻辑
    }
}

存储TIME类型

sub vcl_recv {
    TIME request_time;

    set request_time = now;

    # 示例:判断当前请求时间差
    if (now - request_time < 1h) {
        # 执行逻辑
    }
}

你的错误写法说明

  • set v1 = "hello";:缺少变量类型声明,VCL无法识别变量类型
  • new v1 = "hello2";:new关键字仅用于创建VMOD对象实例,不能用来声明普通本地变量
  • STRING v1;:仅声明但未赋值,且如果声明位置不在子例程开头也会报错

注意事项

  • 本地变量的作用域仅限当前vcl_*子例程,无法跨子例程(比如从vcl_recv传到vcl_backend_fetch)使用
  • 变量声明必须放在子例程的第一部分,不能在逻辑代码中间插入声明语句

内容的提问来源于stack exchange,提问作者watery

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 15:22:04