HAProxy SSL Farm 选项

HAProxy SSL Farm 选项

我正在尝试弄清楚如何使用 haproxy 和 SSL 反向代理设置 SSL 场,并且正在寻找一些一般建议:

是否有可能满足以下所有条件:

  • 对 SSL 场进行负载平衡请求并具有故障转移功能,因此可以使用多个 SSL 盒(也许 haproxy 中的 sslcheck 会对此有所帮助)。
  • 获取包含实际客户端 IP 地址的 HTTP 日志。
  • 无需 TProxy

如果这三点都无法实现,我想知道可能会有什么权衡。现在我正在考虑以下事情,但这可能会改变:

Haproxy 443 TCP 代理前端 -> 高端口上的 SSL 代理(可能是 Nginx)-> Haproxy HTTP 前端 -> Web 服务器

我意识到我可能可以跳过第二跳回到 haproxy,但 HAproxy 中所有内容的单一视角可能很好。此外,如果我必须使用 TProxy,也许从 SSL 场回到 haproxy 会使路由更简单?

参考:
http://haproxy.1wt.eu/download/1.5/doc/configuration.txt
http://1wt.eu/articles/2006_lb/index_05.html

答案1

凯尔,

如果您只需要 SSL 部分的故障转移而不需要负载平衡,那么我建议您这样做。在两个节点上安装 haproxy + keepalived + stunnel(已修补)。Keepalived 拥有服务地址并检查 stunnel 和 haproxy 进程的存在以计算其权重,以便状态最佳的节点成为主节点。Stunnel 在端口 443 上接收流量,并在您喜欢的任何端口上本地将其转发到 haproxy。为了让 haproxy 记录客户端的 IP 地址,您需要 stunnel 的 x-forwarded-for 补丁(您可以在我的网站上找到它)。然后,您将告诉 haproxy 记录 x-forwarded-for 标头。

但是有一个限制。如果您支持 HTTP keep-alive,那么 stunnel 将只添加一次 x-forwarded-for 标头,这有点问题。在 Exceliance,我们已经开始开发一个补丁,将连接参数从 stunnel 转发到 haproxy,而不是使用 x-forwarded-for。这样,haproxy 就会相信它从真正的客户端获得连接。如果您有兴趣,请告诉我,我们可以在完成后将其发送给您。

答案2

好吧,我看到这个有点晚了,但是怎么样:

      VLAN1         VLAN2

INET -- | -- [SSL] -- | -- [HTTP Load Balancer]
        |             |
        | -- [SSL] -- | -- [WEB01]
        |             |
        | -- [SSL] -- | -- [WEB02]
                      |
                      | -- [WEB03] etc

换句话说:

  • 简单 DNS 循环发布X服务的 IP 地址,
  • 使用前端 SSL 代理(Apache、nginx)直接响应这些 IP。(可选但建议使用 VRRP、CARP 或 Linux-HA 等来确保这些 IP 的高可用性。)
  • 所有 SSL 代理都将其请求发送到单臂负载均衡器(为了便于配置,单点 LB/会话管理),
  • 最后,LB 将请求发送到 Web 应用程序服务器。

有几件事很明显:

  • HAProxy 和 SSL 代理 (nginx) 在功能和使用模型方面非常接近。对普通 HTTP 负载平衡还有其他要求吗(其他地方是否提到过速率限制)?如果没有,那么跳过 HAProxy 并仅使用一种类型的 Web 服务器进行所有 SSL 和 LB 处理(fx nginx)可能会更简洁。
  • DNS 轮询可能“足够好”,只需粗略地将负载分散到 2-3 个 SSL 代理上即可。但如果您不喜欢它,那么您可以使用 L4 机制。

获取包含实际客户端 IP 地址的 HTTP 日志。

假设第一个 HTTP 级别设备添加了 X-FORWARDED-FOR 标头,并且您使用类似或者F5 的IIS 插件,这个应该可以工作。

相关内容