问题描述
我构建了一个定义对象的 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";
}
}
但在这种情况下,编译失败,因为 myobj
在 pub.vcl
中未定义,这意味着它没有从 master.vcl
进位。
我还考虑在加载 master.vcl
之前在 pub.vcl
中添加测试和标头设置,但这不起作用,因为加载 VCL 调用 std.rollback(req)
会取消设置所有请求标头,这是 vcl_recv
中唯一可访问的变量。
有没有办法在 VCL 重新加载时传递这个状态?
谢谢。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)