不能在 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 Enterprise是Varnish Cache的商业版本,但您可以如果您在 AWS、Azure 或 GCP 上使用它,则无需预先支付许可费用即可使用它。
我正在使用官方 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 Enterprise是Varnish Cache的商业版本,但您可以如果您在 AWS、Azure 或 GCP 上使用它,则无需预先支付许可费用即可使用它。