![具有基于标头的路由的 HTTP 负载均衡器?](https://linux22.com/image/484933/%E5%85%B7%E6%9C%89%E5%9F%BA%E4%BA%8E%E6%A0%87%E5%A4%B4%E7%9A%84%E8%B7%AF%E7%94%B1%E7%9A%84%20HTTP%20%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1%E5%99%A8%EF%BC%9F.png)
我正在寻找一个能够提供以下功能的 HTTP 负载平衡解决方案:
1)在端口 X 上接受 HTTP 连接,并以随机或循环方式将其转发到多个其他主机(和/或端口)之一。
2)如果服务器回复包含具有特定值的特定 HTTP 标头(即 'Magic-Number: 12345'),则记住它并将所有包含相同标头的后续请求转发到该服务器。
3) 每隔一定时间,通过向所有目标服务器发送指定的 HTTP 请求来执行保持活动测试。如果任一服务器未回复,则停止转发,直到该服务器再次上线。
4)(不是很重要,但最好有)接受来自客户端的 HTTPS 连接并将其转换为与服务器的 HTTP 连接。
该解决方案必须由免费和/或开源软件组成,并在 Windows 200x Server 下运行。
有什么建议么?
更新:如果能够运行适当的 *nix 解决方案,Cygwin 或 Portable Ubuntu(或其他 Colinux 发行版)也是可行的选择。
答案1
我只是根据我的头脑/记忆写下这些,因为我手头没有任何东西可以验证它是否正常工作,但我希望这对你来说可能是一个提示。
因此,我的答案是:
当然,你可以用 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
来代理流量,这些流量是到同一主机的同一连接的一部分。我猜你也可以使用 cookie。无论如何,这应该由标识为 LB1 或 LB2 的应用程序处理(这些是作为会话 ID 或 cookie 的一部分添加的)。
回复 3:负载均衡器监控其所有成员,并在它们无响应时禁用它们。您还可以通过 Web 界面启用/禁用节点(mod_status
请参阅“启用 Balancer Manager 支持”)。
至于第 4 点,您可以设置启用 SSL 的 VirtualHost 监听端口 443,将所有流量代理到平衡器成员端口 80。
答案2
我已经使用 nginx 几年了,对它非常满意。
nginx(发音为“engine X”)是一款轻量级、高性能 Web 服务器/反向代理和电子邮件(IMAP/POP3)代理,采用类似 BSD 的许可证。
它擅长负载平衡和反向代理。查看示例这里
答案3
我知道这不适用于 Windows,但我无论如何都要回答,因为我认为在您的设置中查看这个替代方案会非常有趣。
HAProxy是一个 HTTP 代理(可以代理除第 4 层及以下之外的任何其他内容)。它几乎可以完成您想要的所有操作。文档不是很漂亮,但如果您花时间阅读它,您会发现它包含您需要的所有信息。
它几乎可以在任何设备上运行,所以除非你要进行大量 SSL,否则你不需要购买昂贵的大型机器。
答案4
我以前在 Unix 环境中使用过带 mod_cache 的 Apache。用户负载低时它运行良好,但负载高时系统会全天瘫痪。
经过一些测试后,我们转向了 Varnish Cache,现在一切都运行得更好了。
问题是仅支持 Unix 环境,存在一个基于 cygwin 的新的 varnish windows 版本,但我现在不知道是否适合生产环境: