我目前有一堆基于NameVirtualHost的网站,使用ldirectord在3个apache2服务器之间进行负载平衡。 我想以如下方式在ldirectord和apache之间插入清漆作为反向Web代理:
但是, 清漆部分不工作 。
我想知道这是否与我的Apache服务器使用xxxx:80为他们的NameVirtualHosts,而不是*:80? (他们必须这样做,因为每台服务器都有多个IP地址)
或者也许它需要在清漆服务器上设置IP转发? (我在这台服务器上回显了1> / proc / sys / net / ipv4 / ip_forward,这足够吗?)
我怎样才能debugging这个问题?
您不需要在清漆服务器上启用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地址(局域网或公共)上寻址。
祝你好运!