带非 TLS 后端的 HTTPS 负载平衡器和带 TLS 后端的 HTTPS 负载平衡器有什么区别

What is the difference between HTTPS Load-Balancer w/ non-TLS backend and HTTPS Load-Balancer w/ TLS backend

我正在尝试配置 load balancer to serve in HTTPS with certificates provide by Lets Encrypt, even though I couldn't do it yet, reading this article 给出配置步骤

由于我只对 HTTPS 感兴趣,我想知道这两者之间有什么区别:

  1. 带非 TLS 后端的 HTTPS 负载平衡器
  2. 带 TLS 后端的 HTTPS 负载平衡器

但我的意思不是第一个没有从负载均衡器到后端加密的明显原因,我的意思是在性能和​​ HTTP2 连接方面,例如我会继续从 http2 中获得所有好处喜欢多路复用和流媒体?或者是第一个选项

HTTPS Load-Balancer w/ non-TLS backend

只是幻觉,但我不会得到 http2?

交谈 HTTP/2 所有网络浏览器都需要使用 HTTPS。即使没有 HTTP/2 出于各种原因,使用 HTTPS 仍然很好。

因此您的 Web 浏览器需要与之通信的点(通常称为 边缘服务器)需要启用 HTTPS。这通常是一个 负载平衡器 ,但也可以是一个 CDN,或者只是 Web 服务器(例如 Apache)在 应用程序服务器(例如Tomcat)。

那么问题是从 边缘服务器 到任何下游服务器的连接是否需要启用 HTTPS?好吧,最终浏览器不会知道,所以不适合它。那么你有两个理由要加密这个连接:

  1. 因为流量仍在通过不安全的通道传输(例如,通过 Internet 到源服务器的 CDN)。

    许多人认为让用户认为他们处于安全状态(带有绿色挂锁)是虚伪的,但事实上他们并不是完整的端到端连接。

    如果您的负载均衡器与其连接的服务器位于隔离的网络区域(或者甚至可能在同一台机器上!),这对我来说不是什么问题。例如,如果负载均衡器和连接的 2 个(或更多)Web 服务器都位于 DMZ 隔离网络或它们自己的 VPC 中的单独区域。

    最终流量将在某个时候被解密,服务器所有者的问题是 where/when 在您的网络堆栈中发生的事情以及您对它的接受程度。

  2. 因为您出于某些其他原因需要 HTTPS(例如 HTTP/2 一直)。

    关于这个,我认为没有什么好的案例可以提出。 HTTP/2 主要有助于高延迟、低带宽连接(即浏览器到边缘节点),对于低延迟、高带宽连接(如负载均衡器到 Web 服务器通常如此)不太重要。我对 this question discusses this more.

  3. 的回答

在上述两种情况下,如果您在下游服务器上使用 HTTPS,则可以使用 self-signed 证书或长期存在的 self-signed 证书。这意味着您不受 30 天 LetsEncrypt 限制的约束,也不需要您从另一个 CA 购买更长的证书。由于浏览器永远不会看到这些证书,您只需要您的负载均衡器信任它们,这是您可以控制的 self-signed 证书。如果下游 Web 服务器无法与 LetsEncrypt 通信以从那里获取证书,这也很有用。

第三种选择,如果一直使用 HTTPS and/or HTTP/2 真的很重要,那就是使用 TCP 负载平衡器(这是你问题中的选项 2,所以很抱歉在这里混淆编号!)。这只是将 TCP 数据包转发到下游服务器。数据包可能仍然是 HTTPS 加密的,但负载均衡器并不关心 - 它只是转发它们,如果它们是 HTTPS 加密的,那么下游服务器的任务是解密它们。因此在这种情况下您仍然可以使用 HTTPS 和 HTTP/2,您只需要在下游 Web 服务器上拥有最终用户证书(即 LetsEncrypt 证书)。这可能很难管理(两者应该使用相同的证书吗?还是应该使用不同的证书?我们是否需要有粘性会话,以便 HTTPS 流量始终到达 sae 下游服务器)。这也意味着负载均衡器看不到或理解任何 HTTP 流量——就它而言,它们都只是 TCP 数据包。因此,不过滤 HTTP headers,或添加新的 HTTP headers(例如 X-FORWARDED_FOR 使用原始 IP 地址。)

老实说,在负载均衡器上使用 HTTPS 而在下游服务器上使用 HTTP 流量绝对没问题,甚至很常见 - 如果两者之间的网络安全。它通常是最容易设置的(一个管理 HTTPS 证书和续订的地方)和最容易支持的(例如,一些下游服务器可能不容易支持 HTTPS 或 HTTP/2)。通过使用 self-signed 证书或 CA 颁发的证书在此连接上使用 HTTPS 同样可以,但需要更多的努力,而 TCP 负载平衡器选项可能是最努力的。