如何在Varnish中创建自定义局部变量?

问题描述 投票:0回答:1

我使用的是 Varnish 7.4 OSS,没有安装额外的 VMOD,为了便于阅读,我想将计算值存储在本地变量中,稍后我将在同一个

vcl_*
步骤中使用几行。

但我没有在文档中找到实现此目的的方法。

我尝试过:

  • set v1 = "hello";
  • new v1 = "hello2";
  • STRING v1;

但是都报错了。

我能够添加的唯一变量是 HTTP 标头,例如

set req.http.v1 = "hello"
,但当然,一旦我需要存储 TIME 值,它就会停止工作。

我该怎么做?

varnish varnish-vcl
1个回答
0
投票

VCL 没有原生的变量概念。因此,标头经常被(滥用)使用:将值存储在标头中并稍后读取这些标头值。在同一个子例程中或在另一个子例程中。

使用标头和 std.time()

如果要存储时间值,可以通过

set req.http.x-some-time = "2024-07-08T08:49:37"
语法分配字符串值,并使用
std.time()
函数将其转回有效的
TIME
类型。

请参阅 https://varnish-cache.org/docs/7.4/reference/vmod_std.html#std-time 了解有关

std
VMOD 及其
std.time()
功能的更多信息。

不要忘记将

import std;
添加到您的 VCL 文件中,以使命名空间可用于您的 VCL 代码。

使用 vmod_var

有一个名为

vmod_var
的开源 VMOD,它在 Varnish 中提供变量支持。您可以从https://github.com/varnish/varnish-modules下载它。不过,您必须从源代码编译它。

请参阅 https://github.com/varnish/varnish-modules/blob/master/src/vmod_var.vcc 了解 API 和一些代码示例。

最终我们将在 https://packagecloud.io/varnishcache/ 上提供这些 VMOD 的软件包,但目前仍需要从源代码编译 VMOD。

© www.soinside.com 2019 - 2024. All rights reserved.