Apache-2.2
使用 Apache Proxy Balancer 為多個站點提供服務
我有一種情況,我用 Apache2 和 mod-balancer 設置了一個負載平衡器,它將對兩個 Apache2 Web 伺服器進行負載平衡。我希望我的負載均衡器能夠為多個站點提供服務,但目前我創建的每個虛擬主機似乎都在為同一個站點提供服務。
在負載均衡器 (lb1) 上,我
default
啟用了虛擬主機,因此當您瀏覽到負載均衡器 IP 地址時,您會看到標準的 Apache2 消息。以下是我用於負載均衡器可以服務的所有後續域的虛擬主機佈局(
mydomain.com
當然要替換實際域名):<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 伺服器 (
web1
&web2
) 端的虛擬主機的樣子。兩個 Web 伺服器都啟用了相同的虛擬主機。虛擬主機之間的唯一區別是對其中一個web1
或web2
分別的引用(我在這裡展示了虛擬主機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
. 如果我創建另一個具有相同佈局的虛擬主機,例如,myotherdomain.com
然後瀏覽myotherdomain.com
將實際服務mydomain.com
。我做錯了什麼?
您可能需要在某處使用 NameVirtualHost 指令,否則請求僅與伺服器 IP 地址匹配,並且與此 IP 匹配的第一個 VirtualHost 將“獲勝”(因此第一個總是獲勝)。
至少,幾年前它是這樣工作的,那時我更多地與 Apache 打交道。
Jaccek Konieczny是對的,我終於發現了問題所在。我想詳細說明一下。看來這與我如何配置我的虛擬主機有關,並且它總是在任一負載平衡伺服器上選擇預設主機。這就是我最終設置虛擬主機的方式:
對於預設虛擬主機:
NameVirtualHost *:80 <VirtualHost *:80> # vhost stuff </VirtualHost>
然後對於其他虛擬主機:
<VirtualHost *:80> ServerName mydomain.com ServerAlias www.mydomain.com # forward proxy stuff </VirtualHost>
除了設置了 BALANCEID cookie 之外,所有 Web 伺服器節點都被配置為獨立機器。