使用Apache Proxy Balancer为多个站点提供服务

我有一个情况,我有一个负载均衡器设置Apache2和mod-balancer将负载平衡两个Apache2的Web服务器。 我希望我的负载平衡器能够服务于多个站点,但是目前我创build的每个虚拟主机似乎都服务于同一个站点。

在负载平衡器(lb1)上,我启用了default虚拟主机,这样当您浏览到负载均衡器IP地址时,您将看到标准的Apache2消息。

以下是我用于负载平衡器可以服务的所有后续域的虚拟主机布局(当然,将mydomain.comreplace为实际域名):

 <VirtualHost *> ServerName www.mydomain.com ServerAlias mydomain.com ProxyRequests Off <Proxy *> Order deny,allow Allow from all </Proxy> <Proxy balancer://mydomain.com.cluster> BalancerMember http://web1.mycluster.com:80 route=web1 retry=5 BalancerMember http://web2.mycluster.com:80 route=web2 retry=5 ProxySet lbmethod=byrequests </Proxy> ProxyPass / balancer://mydomain.com.cluster/ stickysession=BALANCEID n$ ProxyPassReverse / http://web1.mycluster.com/ ProxyPassReverse / http://web2.mycluster.com/ </VirtualHost> 

这是Web服务器( web1web2 )末端上的虚拟主机的外观。 两个Web服务器都启用相同的虚拟主机。 虚拟主机之间的唯一区别是分别引用web1web2 (我在这里显示web1的虚拟主机):

 <VirtualHost *> ServerName www.mydomain.com ServerAlias mydomain.com RewriteEngine On RewriteRule .* - [CO=BALANCEID:balancer.web1:.mydomain.com] DocumentRoot /mnt/share/mydomain.com/www/public_html <Directory /> Order allow,deny Allow from all </Directory> </VirtualHost> 

这似乎适用于mydomain.com 。 如果我创build另一个具有相同布局的虚拟主机,例如myotherdomain.com那么浏览到myotherdomain.com将实际上服务于mydomain.com

我在做什么错了?

您可能需要某个NameVirtualHost指令,否则请求将仅与服务器IP地址相匹配,而与此IP匹配的第一个VirtualHost将“获胜”(因此第一个总是获胜)。

至less在几年前,我和Apache有更多的关系。

Jaccek Konieczny是对的,我终于明白了问题所在。 我想详细说明一下。 看起来,这与我如何configuration我的虚拟主机有关,它总是select任一个负载平衡服务器上的默认主机。 这是我最终设置我的虚拟主机:

对于默认的虚拟主机:

 NameVirtualHost *:80 <VirtualHost *:80> # vhost stuff </VirtualHost> 

那么对于其他虚拟主机:

 <VirtualHost *:80> ServerName mydomain.com ServerAlias www.mydomain.com # forward proxy stuff </VirtualHost> 

所有的Web服务器节点被configuration为它们将是独立的机器,除了BALANCEID cookie被设置。