清漆configuration,NamevirtualHosts和IP转发

我目前有一堆基于NameVirtualHost的网站,使用ldirectord在3个apache2服务器之间进行负载平衡。 我想以如下方式在ldirectord和apache之间插入清漆作为反向Web代理:

  1. 一个请求进入ldirectord
  2. 然后在3个apache2服务器和清漆之间进行负载平衡,web服务器的权重为1,清漆的权重为99(所以如果重新启动清漆,web服务器将无缝地接pipe)
  3. 然后清漆将负载平衡我的apache2服务器之间的请求。

但是, 清漆部分不工作

我想知道这是否与我的Apache服务器使用xxxx:80为他们的NameVirtualHosts,而不是*:80? (他们必须这样做,因为每台服务器都有多个IP地址)

或者也许它需要在清漆服务器上设置IP转发? (我在这台服务器上回显了1> / proc / sys / net / ipv4 / ip_forward,这足够吗?)

我怎样才能debugging这个问题?

  • ldirectord不会生成每个请求的日志(如果是这样的话,我会被信息淹没,因为我每秒处理数百个请求)
  • 清漆日志显示每5秒连接到它的ldirectord服务器,但没有别的。
  • 我已经build立了一个使用这个configuration的testing站点,但是它失败 – 没有apache访问日志,没有适用的清漆日志。

您不需要在清漆服务器上启用IP转发以使其工作。 Varnish不会转发客户端连接,但作为代理,代表用户创build新的连接。

如果你可以的话

telnet apache2 80 

要么

 curl -x apache2:80 http://yoursite.com/yourpage 

从清漆服务器,然后您的networking设置是好的。 对于后面的例子,请将下面的代码添加到您的vcl_recvconfiguration中:

 # Normalise requests sent via curl's -X mode and LWP. Must do before # backend selection. if (req.url ~ "^http://") { set req.url = regsub(req.url, "http://[^/]*", ""); } 

如果你已经发布了你的清漆configuration,但是原来的那个应该可以开箱即用(即使它没有caching大量的页面),这将会有所帮助。

我假设你为你的3个apache后端创build了一个director,而这个director是所有连接到varnish的默认后端。

如果是这样,运行

 varnishlog | grep _health 

并确保你的后端没有生病。 如果是这样,请调整您的后端探测器(运行状况检查)。

根据经验,清漆并不关心在后端使用的虚拟主机configuration。 我build议你回到原来的configuration,并定义一个单一的后端开始。 然后转到导演。 只有进一步定制你的清漆configuration。

祝你好运

我假设你使用LVS / DR(或LVS / TUN),因为共享的IP地址。 我不是networking专家,但据我所知,ldirectord可以通过在以太网帧中设置正确的MAC地址将数据包发送到具有共享IP地址的特定后端,并将TCP的IP地址/ IP数据包不变。 清漆不能做到这一点(它在TCP / IP级别上工作)。

一个解决scheme是让你的Apache2服务(也)听一个清漆可以解决和你的networking可以路由的IP地址/端口组合。 你可以添加一个内部networking的IP地址到每个Apache2服务器,并听取这个地址?

另一个解决scheme可能是在清漆服务器上使用伪地址来寻址每个apache服务器,并且使iptables传出防火墙链正确地(正确设置共享ip地址,设置特定的mac地址)破坏数据包。

最简单的事情是将MASQ(LVS / NAT)用于你的apache服务器。 LVS和清漆都可以在相同的IP地址(局域网或公共)上寻址。

祝你好运!