在AWS NLB后面的nginx集群中共享SSL会话

在AWS NLB后面的nginx集群中共享SSL会话,ssl,nginx,lua,memcached,openresty,Ssl,Nginx,Lua,Memcached,Openresty,除此之外,Nginx用于“使用AWS网络负载平衡器的AWS上Nginx Plus的活动HA”。AWS NLB(网络负载均衡器)平衡OSI第4层到其后面执行第7层应用程序负载平衡的nginx服务器的连接。我们有一个类似的设置(使用nginx,而不是nginx Plus),并希望使用网络负载平衡器,因为我们有各种各样的流量进入,我们目前需要4台nginx服务器来处理这一切。我们需要从UDP负载平衡到HTTP/2和WebSocket的一切 中明显缺少的功能是不支持TLS。我们需要支持TLS。理想情况下

除此之外,Nginx用于“使用AWS网络负载平衡器的AWS上Nginx Plus的活动HA”。AWS NLB(网络负载均衡器)平衡OSI第4层到其后面执行第7层应用程序负载平衡的
nginx
服务器的连接。我们有一个类似的设置(使用
nginx
,而不是nginx Plus),并希望使用网络负载平衡器,因为我们有各种各样的流量进入,我们目前需要4台
nginx
服务器来处理这一切。我们需要从UDP负载平衡到HTTP/2和WebSocket的一切

中明显缺少的功能是不支持TLS。我们需要支持TLS。理想情况下,我们将通过NLB终止TLS来支持TLS,但尽管亚马逊最近将该功能添加到了他们的NLB中,但我们使用的是Kubernetes 1.12,它非常复杂,因此被推迟到,甚至1.14的后移植也被拒绝,因为太难了。因此,当我们等待
kops
和EKS迎头赶上时,考虑到开发人员认为要正确完成任务有多困难,我们将继续在
nginx
服务器上终止TLS

这基本上是可行的,但是您可能知道,SSL握手非常昂贵,我们希望减少这方面的开支<代码>nginx提供了两种方法。首先,通过一个TCP/TLS连接发送多个请求,可以很好地使用NLB,我们尽可能多地使用客户的客户支持它。不幸的是,第二种方法“重用SSL会话参数以避免并行和后续连接的SSL握手”不起作用。为了重用SSL会话参数,每次SSL握手都会创建一个SSL会话,未来的连接可以通过指定SSL会话ID来使用这些会话参数。这允许web浏览器打开6个并行TCP连接,而只需要执行一次完整的SSL握手(对于第一次连接)其余5个使用相同的SSL会话

nginx
提供了一种在服务器端跟踪这些会话的方法,但如文档所述,它最多只限于一台服务器上所有工作进程共享的一个缓存。这在仅使用1台服务器时非常好,在使用多台服务器时比不使用要好,但在实际使用4台服务器时,这并没有多大帮助。除非所有6个浏览器连接都连接到同一台服务器,否则一个连接将连接到拒绝会话ID的服务器,导致其开始握手并使新连接的上一个会话ID无效,即使它们在适当路由的情况下仍然有效

想到的解决方案是使用类似于扩展
ssl\u会话\u缓存
,以便所有
nginx
服务器都具有相同的缓存。(出于各种原因,我们不希望使用SSL会话票证,其中最引人注目的是,在我们的特定情况下,我们的许多客户都不会使用它们。)我看到,从使用
nginx
切换到使用
nginx
是因为它需要
nginx
并添加
lua
支持和
lua
模块,还有一个,但我不知道如何导航所有的
lua
模块集成。我在
memcached
模块上找到的文档表明,它旨在用于内容缓存,而不是像SSL会话缓存这样的内部缓存


那么,(1)开源
nginx
或OpenResty是否有一些预构建的方式跨多个服务器共享
ssl\u会话\u缓存?(2)尝试从
lua
模块中构建共享缓存是否合理,如果是这样,我该如何进行并实现这一点?

只需快速浏览一下

那么,(1)开源nginx或OpenResty是否有一些预构建的方法来跨多台服务器共享ssl_会话_缓存

您可以连接具有redis数据存储的lua resty auto ssl。 我将其设置为证书的中央转储,在多个地理位置的服务器上终止到边缘


另外,我也在使用这个

只需快速浏览一下就可以了

那么,(1)开源nginx或OpenResty是否有一些预构建的方法来跨多台服务器共享ssl_会话_缓存

您可以连接具有redis数据存储的lua resty auto ssl。 我将其设置为证书的中央转储,在多个地理位置的服务器上终止到边缘

而且我也在用这个