Windows

具有基於標頭的路由的 HTTP 負載平衡器?

  • February 2, 2018

我正在尋找一個 HTTP 負載平衡解決方案,它將提供以下內容:

  1. 接受埠 X 上的 HTTP 連接,並將它們隨機或以循環方式轉發到多個其他主機(和/或埠)之一。

  2. 如果伺服器回复包含具有特定值的某個 HTTP 標頭(即’Magic-Number: 12345’),請記住它並將包含相同標頭的所有後續請求轉發到該伺服器。

  3. 每隔一定時間,通過向所有目標伺服器發送指定的 HTTP 請求來執行保活測試。如果任一伺服器沒有回复,請停止轉發,直到它再次聯機。

4)(不重要,但很高興)接受來自客戶端的 HTTPS 連接並將它們轉換為與伺服器的 HTTP 連接。

該解決方案必須由免費和/或開源軟體組成,並在 Windows 200x Server 下執行。

有什麼建議?

**更新:**如果 Cygwin 或 Portable Ubuntu(或其他 Colinux 發行版)能夠執行適當的 *nix 解決方案,它們也是可行的選擇。

我把它寫在我的腦海/記憶中,因為我手頭沒有任何東西來驗證它是否正常工作,但我希望這可能對你有一些提示。

所以,我的回答是:

當然,您可以使用 Apache 的mod_proxy_balancer. 您應該能夠通過以下方式完成此操作:

ProxyPassReverse / http://host1:80/
ProxyPassReverse / http://host2:80/

<Proxy balancer://cluster>
 BalancerMember http://host1:80 route=LB1
 BalancerMember http://host2:80 route=LB2
 ProxySet stickysession=MYSESSIONID
</Proxy>

因此,關於第 1 點,請閱讀mod_proxy_balancer“請求計數算法”部分。

關於第 2 點:我真的不知道 HTTP 標頭解析。上面的範例使用額外的 URL 參數MYSESSIONID來代理作為與同一主機的同一連接的一部分的流量。我想你也可以使用cookies。無論哪種方式,這都應該由標識為 LB1 或 LB2 的應用程序處理(這些被添加為會話 id 或 cookie 的一部分)。

Re 3:負載均衡器監控它的所有成員,並在它們無響應時禁用它們。您還可以通過 Web 界面啟用/禁用節點(mod_status請參閱“啟用 Balancer Manager 支持”)。

至於第 4 點,您可以設置啟用 SSL 的 VirtualHost 偵聽埠 443,將所有流量代理到平衡器成員埠 80。

引用自:https://serverfault.com/questions/23178