HAProxy NGInx SSL 设置

HAProxy NGInx SSL 设置

我一直在寻找支持 SSL 的服务器集群的不同设置,我想与您一起对我的想法进行基准测试。

要求:

  • 集群中的所有服务器都应使用相同的完整域名。(http 和 https)
  • 到子系统的路由是通过 HA 代理中的 URI 匹配完成的。
  • 所有 URI 都支持 SSL 支持。

希望:

  • 集中路由规则

            ---<----http-----<--
            |                  |
    Inet -->HA--+---https--->NGInx_SSL_1..N
                |
                |
                +---http---> Apache_1..M
                |
                +---http---> NodeJS
    

想法:配置 HA 将所有 SSL 流量(mode=tcp,algorithm=Source)路由到 NGInx 集群,将 https 流量转换为 http。将 http 流量从 NGInx 重新传递到 HA 进行正常负载平衡,HA 根据 HA 配置执行负载平衡。

我的问题很简单:这是根据上述要求进行配置的最佳方式吗?

答案1

我一直听说它的部署方式是,您将拥有多个负载均衡器,所有负载均衡器都运行 nginx(或 stunnel)来剥离 SSL。然后,这些负载均衡器将直接连接到后端服务器。您使用一组单独的服务器来解密 SSL 的方法似乎相当复杂。

说实话,你希望从这个设置中得到什么?你的流量对于一台服务器来说是否太大了?你是否希望获得高可用性(在这种情况下你需要多个 HAproxy 服务器,这会增加混乱)?

答案2

在我看来,您的设置似乎有点奇怪和复杂。我还认为,如果可能的话,将原始访问者的 IP 地址放入最终的 nginx 日志中会很困难。

一种常见的替代方法是使用隧道在 haproxy 前面。Stunnel 将解密 SSL 并将其提供给 haproxy,后者又可以将内容转发到适当的后端服务器。此解决方案在转发原始 ip 地址方面也存在一些困难,但如果您使用当前 1.5 开发版 haproxy 和 v. 4.45 或更高版本的 stunnel,则可以使用PROXY 协议为了那个原因。

答案3

因此有两个选择...使用带有 xforwardfor 补丁的 stunnel

https://github.com/davean/stunnel-xforwardfor

这将允许您设置后端服务器要读取的标头

我只需将 nginx 放在它前面来处理 ssl 终止,并将 xforwardfor 标头设置回应用程序。将它放在与 haproxy 相同的服务器上。此外,您还可以使用 ngninx 根据路由进行回传,这样甚至不需要 haproxy。

相关内容