作为apache虚拟主机

时间:2016-08-04 16:45:03

标签: varnish varnish-vcl

我想将varnish配置为我的某个网站的缓存,以暂时重载。

我设置了几个带有清漆的虚拟机,应该缓存我的主网站。 当我的主服务器托管多个网站时,apache服务器被配置为虚拟主机服务器。

所以我在default.vcl中定义了主网站域名而不是IP地址,希望varnish将请求正确地传播到正确的apache虚拟主机。 但它似乎只是使用IP地址,并缓存在向我的主网站IP地址发送http请求时出现的apache默认页面。

有没有办法配置清漆,所以它使用正确的URL调用我的后端,而不是IP:端口?

我的清漆配置如下:

backend default{
  .host = "www.myvhost.com";   
  .port = "80"; 
}

而不是:

backend default{
  .host = "my.ip";   
  .port = "80"; 
}

因为我需要varnish实例:http://www1.myvhost.comhttp://www2.myvhost.com ...来缓存主服务器http://www.myvhost.com 但不是http://myip:80/

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

你可能认为清漆是反向代理而不是apache

  

由于我的主服务器托管了几个网站,因此apache服务器是   配置为反向代理。

您可以在default.vcl的后端定义中配置主机名 https://github.com/mattiasgeniar/varnish-4.0-configuration-templates/blob/master/default.vcl

除非您的服务器上有多个IP,否则所有流量都会指向所有vhost的清漆。

我认为您正在寻找的是针对单个域的掠夺查询。您可以通过在主机上进行过滤来实现此目的。

sub vcl_recv {
   if (req.http.host ~ "(www\.)?yourdomain\.com") {
     return(pass);
   }
}

不在您网域上的所有流量都将直接传递到后端而不进行查询