具有多个站点和多个IP的清漆

时间:2017-01-20 20:54:45

标签: varnish varnish-vcl multisite

我正在尝试为两个域运行Varnish,并且每个域在不同的IP上运行,并使用自己的.VCL文件进行配置。 我成功编写了所有配置文件,因此Varnish将监听每个IP;这样Apache就会在两个端口上监听Varnish。 一切看起来都很棒,但是! 当我在浏览器中加载第一个域时,它将(302)转发到第二个域。 我之前的设置是作为第一个域工作,没有Varnish,第二个域使用Varnish。 任何人都可以建议解决方案或调试方法。 10x

1 个答案:

答案 0 :(得分:0)

我有这个设置没有问题。我正在使用一个vcl文件(两个站点/后端的逻辑几乎相同)。服务器有多个ip,apache全部使用它们,它在不同的ip上服务于不同的站点。一些ip也有虚拟主机。

首先,检查您的Apache安装是否有效以及没有重定向。

curl -I -L http://hostname1.com

其次,在你的vcl中,定义后端(第一个例子是如果backend1是虚拟主机,则示例2是后端2不是vhost并且可以通过此ip访问)

backend backend1 {
    .host = "127.0.0.1";
    .port = "81";
    .host_header = "hostname1.com";
}

backend backend2 {
  .host = "192.168.1.1";
  .port = "80";
}

第三,你在vcl_recv中会有这样的东西:

  if (req.http.host ~ "^(www\.)?hostname1\.com$") {
    set req.http.host = "hostname1.com";
    set req.backend_hint = backend1;

  }
  elseif (req.http.host ~ "^(www\.)?hostname2\.com$") {
    set req.http.host = "hostname2.com";
    set req.backend_hint = backend2;
  }

那就是它。