如何在Varnish配置中注入环境变量

man*_*tin 5 configuration environment-variables varnish varnish-vcl

我有2个环境变量:

echo $FRONT1_PORT_8080_TCP_ADDR # 172.17.1.80
echo $FRONT2_PORT_8081_TCP_ADDR # 172.17.1.77
Run Code Online (Sandbox Code Playgroud)

我想将它们注入我的default.vcl中,如:

backend front1 {
    .host = $FRONT1_PORT_8080_TCP_ADDR;
}
Run Code Online (Sandbox Code Playgroud)

但是我在$char 上遇到了语法错误.

我也试过用户变量,但我无法在外面定义它们vcl_recv.

如何在VCL中检索我的2个值?

man*_*tin 8

我设法解析了我的vcl

backend front1 {
    .host = ${FRONT1_PORT_8080_TCP_ADDR};
}
Run Code Online (Sandbox Code Playgroud)

用脚本:

envs=`printenv`

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

    sed -i "s|\${${name}}|${value}|g" /etc/varnish/default.vcl
done
Run Code Online (Sandbox Code Playgroud)


Mau*_*hez 7

现在您可以使用VMOD Varnish标准模块(std)来获取VCL中的环境变量,例如:

set req.backend_hint = app.backend(std.getenv("VARNISH_BACKEND_HOSTNAME"));
Run Code Online (Sandbox Code Playgroud)

请参阅文档:https://varnish-cache.org/docs/trunk/reference/vmod_std.html#std-getenv