Varnish 5中多个VCL文件中的后端定义

时间:2017-05-08 10:21:32

标签: varnish varnish-vcl

我正在设置连接到2个后端服务器(Magento 2应用程序)的Varnish 5实例。

我正在使用加载多个VCL文件的新Varnish 5功能。为了使事情变得非常简单,我将在我的示例中使用1个后端服务器。

所以,我的magento.vcl定义如下:

vcl 4.0;

import std;

# The minimal Varnish version is 4.0
# For SSL offloading, pass the following header in your proxy server or load balancer: 'X-Forwarded-Proto: https'

backend default {
    .host = "127.0.0.1";
    .port = "8088";
}

include "/etc/varnish/common.vcl";

top.vcl

vcl 4.0;

import std;

backend default { .host = "127.0.0.1"; }

sub vcl_recv {
    if (req.http.host == "magento2.dev") {
        return (vcl(magento_vcl));
    }
}

然后我跑

service varnish restart
varnishadm
vcl.load magento /etc/varnish/conf.d/magento.vcl
vcl.label magento_vcl magento 
vcl.load top /etc/varnish/top.vcl
vcl.use top
quit

当我浏览到magento2.dev时,我会在几秒钟后收到后端提取错误。只有当我进入magento.vcl并更改后端的名称并使后端提示它有效时才会这样做。见下文:

vcl 4.0;

import std;

# The minimal Varnish version is 4.0
# For SSL offloading, pass the following header in your proxy server or load balancer: 'X-Forwarded-Proto: https'

backend magento {
    .host = "127.0.0.1";
    .port = "8088";
}

sub vcl_recv {
    set req.backend_hint = magento;
}

include "/etc/varnish/common.vcl";

为什么要指定后端提示?不应该根据top.vcl中指定的主机加载不同的VCL吗?或者有什么不对吗?

提前致谢,

1 个答案:

答案 0 :(得分:0)

似乎varnish确实加载了你通过vcl(label)指定的vcl。 .vcl应指定对.vcl所针对的特定后端有效的backend_hint。我认为没有任何错误。