据我了解,Varnish流水线图,vcl_pipe
只能从 调用vcl_recv
。
我正在设置一个 VCL,以便根据某些条件(包括访问控制)从后端提供二进制资源。
到目前为止,我想到的设置方式是这样的:通过所有检查,包括移出vcl_recv
;如果设置了流式传输资源的条件,则设置一个标志;重新启动交易;首先检查标志vcl_recv
,如果设置,则调用vcl_pipe
。
唯一的主要问题是我不知道如何设置http.request
无法通过请求标头伪造的标志(例如 in)。因此,了解我的 VCL 的调用者可以轻松设置管道标志并绕过所有检查。
另一种选择是保留所有检查,vcl_recv
但这可能很笨重甚至不可能。
欢迎提出建议。谢谢。
答案1
唯一的主要问题是我不知道如何设置标志
如果重新启动次数vcl_recv
为零(这将表示 VCL 中的“初始”着陆,例如
sub vcl_recv {
if (req.restarts == 0) {
unset req.http.X-Foo;
}
哦,我发现正是你所追求的同时获得它的语法:)