【问题标题】:Varnish as a cache in front of apache virtual hostsVarnish 作为 apache 虚拟主机前的缓存
【发布时间】:2016-12-10 21:58:05
【问题描述】:

我想将 varnish 配置为我的一个网站的缓存,以应对临时的繁重负载。

我用清漆设置了几个虚拟机来缓存我的主网站。 由于我的主服务器托管多个网站,因此 apache 服务器被配置为虚拟主机服务器。

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

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

我的清漆配置看起来像:

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

而不是:

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

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

感谢您的帮助

【问题讨论】:

    标签: varnish varnish-vcl


    【解决方案1】:

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

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

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

    您的所有流量都将指向您所有虚拟主机的 varnish,除非您的服务器上有多个 IP。

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

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

    所有不在您的域上的流量将直接传递到后端而无需查找

    【讨论】:

    • 不,主服务器是基于 apache 的,它有一个虚拟代理配置来服务多个网站。我想在不同的计算机上放置几个清漆作为简单的缓存,以应对临时(一个周末)的过载。但我需要清漆来缓存正确的网站,即 apache 虚拟主机之一。 Varnish 不应该缓存 而是
    • 您的 apache 正在通过虚拟主机而不是反向代理提供多个网站。 RP 在你的 apache 前面。也许如果你发布你的配置文件会更清楚
    • 是的,你是对的,我的意思是那个虚拟主机,它也做反向代理,但我不需要缓存那些。我将我的配置添加到主帖...谢谢
    • 我认为您误解了清漆的工作原理。你不会在清漆上有www1.myvhost.com。您的实际服务器 IP 将指向清漆服务器。您的所有流量都将通过清漆。您的 apache 将无法直接访问。如果您愿意,您的 apache 可以进入没有任何公共 IP 的专用网络。因此,如果要查找缓存版本或直接传递给 apache 服务器(除了您的所有其他域,您想要的),您必须检查 sub vcl_rcv 例程。
    • 是的,我知道您所描述的配置是使用 varnish 的标准方式。但是,我想放置几个前端缓存(至少 4 个),其中主要的缓存仍然可以访问并充当公共部分的负载均衡器。我的网站不是标准的 cms,但已经使用 memcache 等进行了优化。而且我以前已经使用“自定义托管”副本来管理过载。但是同步非常复杂,因为该站点是高度动态的。所以我希望找到一个更开箱即用的清漆解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-19
    • 2013-08-29
    • 2016-08-31
    • 2012-07-08
    • 2018-05-09
    • 1970-01-01
    相关资源
    最近更新 更多