在 VCL 重新加载之间传递 Varnish 结构变量

问题描述

我构建了一个定义对象的 Varnish VMOD,该对象在 vcl_init 中实例化并始终保存在内存中,并在单个请求中使用。

我的配置被分成几个 VCL 文件,这些文件根据一些请求参数从“主”VCL 加载。

主 VCL 还实例化了有问题的对象,我想在另一个 VCL 中使用它。我没有在使用它的同一个 VCL 中实例化对象的原因是我有另一个 VCL,它定义了一些 ACL 限制的路由以从数据源更新对象。

例如master.vcl

sub vcl_init {
    new myobj = mymodule.myobject();
}

sub vcl_recv {
    if (req.url ~ "^pub/") {
        return (vcl (pub_vcl));
    }
    // Other switches...
}

pub.vcl

sub vcl_recv {
    if myobj.mymethod() {
        set req.http.x-bogus = "true";
    }
}

但在这种情况下,编译失败,因为 myobjpub.vcl 中未定义,这意味着它没有从 master.vcl 进位。

我还考虑在加载 master.vcl 之前在 pub.vcl 中添加测试和标头设置,但这不起作用,因为加载 VCL 调用 std.rollback(req) 会取消设置所有请求标头,这是 vcl_recv 中唯一可访问的变量。

有没有办法在 VCL 重新加载时传递这个状态?

谢谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)