不能在 varnish 6.5.1 中使用 std vmod

Cannot use std vmod in varnish 6.5.1

我正在使用官方 varnish:6.5.1 docker 图像并且有这个 vcl:

vcl 4.0;

import std;

backend default {
    .host = std.getenv("PROXY_HOST");
    .port = std.getenv("PROXY_PORT");
}
.....

当我尝试 运行 图像(使用 docker-compose)时,它立即失败并出现此错误:

varnish_1  | Could not delete 'vcl_boot.1612728251.581028/vgc.sym': No such file or directory
varnish_1  | Error:
varnish_1  | Message from VCC-compiler:
varnish_1  | Expected CSTR got 'std'
varnish_1  | (program line 369), at
varnish_1  | ('/etc/varnish/default.vcl' Line 13 Pos 17)
varnish_1  |         .host = std.getenv("PROXY_HOST");

这是怎么失败的?我理解无法连接到后端,但 VCL 解析应该没问题,std VMOD 的文档对于 getenv.

非常简单

我在这里错过了什么?

编辑

backend default {
    .host = "${PROXY_HOST}";
    .port = "${PROXY_PORT}";
}

结合

#!/bin/bash
envs=`printenv`

for env in $envs
do
    IFS== read name value <<< "$env"

    sed -i "s|${${name}}|${value}|g" /etc/varnish/default.vcl
done

varnishd -f /etc/varnish/default.vcl

按照 this post 工作,但这似乎不是最佳选择。

Varnish Cache 仅支持静态后端

Varnish Cache,Varnish 的开源版本不支持动态后端。

加载和编译VCL文件时,.host.port值需要是字符串,而不是表达式。

错误消息还表明:

Expected CSTR got 'std'

编译器说它需要一个 C 字符串,这意味着以引号开头的东西,但它却找到了 std.

Varnish Enterprise 中的动态后端支持

Varnish Enterprise,Varnish 的商业版本,支持动态后端。 有关详细信息,请参阅 https://docs.varnish-software.com/varnish-cache-plus/vmods/goto/

免责声明:虽然Varnish EnterpriseVarnish Cache的商业版本,但您可以如果您在 AWS、Azure 或 GCP 上使用它,则无需预先支付许可费用即可使用它。