在具有 SSL 直通的负载平衡系统中进行握手

在具有 SSL 直通的负载平衡系统中进行握手

让负载均衡器将 SSL/TLS 加密数据传递到服务器。我想知道如果建立了与客户端的新 HTTPS 连接,握手将如何处理:握手是一种有状态的通信。例如,为了验证客户端的完成消息,服务器需要知道到目前为止在服务器(服务器场)和客户端之间交换的所有握手消息。因此,据我所知,有三种可能性:

  1. SSL/TLS 数据保存在所有服务器共享的缓存中

  2. 握手消息的内容被复制到所有服务器。

  3. 负载均衡器将来自客户端的所有握手消息定向到同一台服务器。

问题:在这样的环境中通常使用哪种场景?处理握手时是否有我遗漏的进一步策略?


添加:我被指控我的问题是重复的,并被要求编辑我的问题,以解释为什么它与负载平衡和 HTTPS 策略。以下是我的问题和另一个问题的比较:

a) 我找到了在负载平衡环境中处理 https 状态的三个选项,并询问在实践中使用了其中哪一个(或者可能是其他选项)。

b) 在另一个问题中,OP 使用选项 3(“同一服务器”),即所有具有相同 IP 的请求都路由到同一服务器。但是,由于他们的大多数客户端使用相同的 IP,lb 无法正常工作,OP 要求找到解决方法。五分之四的答案都给出了建议,实际上保留了上面的选项 3。那里的答案的一部分(“目标服务器的 DNS”),我不明白。

因此问题仍然是,选项 1(“ssl 缓存”)和 2(“ssl 握手数据复制”)是否在实践中使用。文章http://wtarreau.blogspot.de/2006/11/making-applications-scalable-with-load.html似乎支持选项 1(参见“4.专用 SSL 缓存场”)。

答案1

如果要求在设置的所有部分都使用 HTTPS,则更容易/更可行的是让客户端和 lb 之间进行握手,然后在 lb 和服务器之间设置一组单独的证书。

SSL 直通是可行的,一些 CDN 也提供此功能。据我所知,所有流量都按原样转发,但这不允许负载平衡。

为了实现此功能,您需要在 LB 级别上实现会话粘性。

答案2

您可以通过 Nginx 中的 TCP 流代理进行 SSL 直通

https://docs.nginx.com/nginx/admin-guide/load-balancer/tcp-udp-load-balancer/

相关内容