我正在考虑在现有的站点基础设施中引入负载均衡器,以帮助增加流量并提供一定程度的故障保护。
我运行的网站在登录部分使用 SSL 证书,我需要继续使用此功能。后端服务器需要知道原始 IP 地址,因此我无法使用 TCP 负载平衡功能,并且需要在负载平衡器上终止 SSL,以便我可以插入
X-转发
标头。我见过几种实现 SSL 解密功能的方法,一种是使用 stunnel,另一种是使用 Pound。我一直在寻找,但不确定使用其中一种的优缺点是什么。有没有人有这方面的经验,可以提供建议?
谢谢
答案1
我不太确定 Pound 是否可行,但我已经设法让 Stunnel + HAProxy 工作,包括将原始 IP 地址设置为 X-Forwarded-For 标头。诀窍是使用带有 X-Forwarded-For 补丁的 Stunnel。这是一个在 Ubuntu 10.04 上运行的软件包:https://launchpad.net/~szelcsanyi-gabor/+archive/stunnel4
答案2
这是一个老问题,但 HaProxy 现在对 SSL 具有原生支持,这使得设置和使用 SSL/TLS 变得更加容易。
答案3
我没有使用过带有 HAProxy 的 stunnel,但我是 Pound 的长期用户,在几个不同的环境中使用过。
Pound 在 SSL 方面做得很好。它设置起来非常简单,使用标准 PEM 证书,并将足够的 SSL 数据传回 Web 服务器,以便您的应用程序知道它们正在处理什么。除了 之外X-Forwarded-For
,您还可以获得X-Forwarded-Proto
,因此如果您同时运行 http 和 https 版本的网站,您可以为您的 AJAX/XHR 回调提供一个不会引起安全警告的 URL。Pound 还支持客户端证书、通配符证书和 SNI。所以您几乎可以用它做任何事情。
此外,我对使用需要第三方补丁才能提供关键功能的工具来提供生产服务有些谨慎。如果发现 Stunnel 漏洞,并且更改破坏了您的补丁,会发生什么?您会在一段时间内运行不安全模式,还是在一段时间内不使用 X-Forwarded-IP 标头运行?
我从未遇到过 Pound 崩溃的情况。除了 2005 年修复的一个奇怪的防火墙相关错误外,它对我来说一直表现完美。我喜欢它的一个原因是它附带的外部控制程序,它允许我禁用/启用服务和后端,或查看当前的粘性会话映射列表等。据我所知,haproxy 没有像 Pound 那样的功能磅控制。
除了在工作中使用 Pound 来平衡由五台 Web 服务器组成的集群负载外,我还在个人服务器上使用它。在那里,我在使用私有 IP 地址的虚拟机上运行 Web 服务器(FreeBSD 监狱)。多个虚拟 Web 服务器在物理主机上运行的 Pound 后面进行负载平衡。我想您可以使用 stunnel+HAProxy 执行相同的操作,但同样,我更喜欢安装具有完整社区支持的软件,而不需要非标准补丁。
答案4
Nginx 作为 HAProxy 的 SSL 前端也非常出色,尤其是 ender head 加载。我为 SSL 使用 4 核 CPU。