架构问题:将SSLjoin混合

目前我们有一个最高级别的configuration,如下所示:

[stream量] – >清漆(caching) – > HaProxy(负载平衡) – > Apache(内容和服务)

很明显,有多个Apache服务器,通常它们提供两种types的服务…一组服务器提供更传统types的Web内容(大部分可导航页面),另一组服务端点他们又连接到数据库和其他后端function)。

服务请求在Varnish中被过滤掉(具体的域等在VCL中被识别,并直接传递给HAProxy – 不需要caching任何这些调用)。

“内容”请求会被Varnishcaching。

需要添加SSL支持。 最初由于需要添加安全的服务请求(和响应),尽pipe我预计最终还需要在内容服务器中也有HTTPS调用。

目前我有stunnel玩弄,而它的工作,我使用有效的模型只是使用stunnel解密传入的请求,然后通过HAProxy作为正常*:80stream量(所以不使用mod_ssl等,在Apache )。 所以有效的东西现在看起来像:

[stream量] – >清漆(caching) – > HaProxy(负载平衡) – > Apache(内容和服务)———–> STunnel ————- —————- ^

所以它的工作原理,但我的胆量告诉我这不是一个真正的长期解决scheme。 一种可能性就是完全分离stream量):

[stream量] – >清漆(caching) – > HaProxy(负载平衡) – > Apache(内容和服务)
[stream量] – >英镑(或别的东西?)————————> Apache(SSL内容和服务)

Apache服务器可能会被共享(SSLstream量将被不同地处理),但是将stream量路由到内容/服务服务器的系统将是不同的。

翻来覆去地看到了一些意见/选项(包括nginx等等),但是第一个问题是整个架构是否有意义(将传入的stream量转移到不同的子系统)还是存在一个更统一的模型应该看(而且可能更简单)。 如果体系结构是有意义的,那么后续是为这个兽人的SSL支持方面使用什么。

整个build筑是否有意义(分stream传入的stream量

您提供的图表不显示任何分支。 我有点困惑,为什么你在HA-Proxy面前涂了清漆而不是其他方法。

但我的胆量告诉我这不是一个真正的长期解决scheme

SSL封装应该在HTTPcaching之前(否则内容不能被caching)。

当然,减less跳数会更好,但是将SSL合并到其中一个现有层上并不会带来太多的性能好处(至less假设至less有一端是通过本地主机连接的)。 它的架构是甲骨文,思科,F5等等倾向于build议的(也就是说,在前端的SSL,尽pipe他们认为你应该在某处运行他们的工具包)。

如果是我,我会将可caching/不可caching的内容分割到不同的面向客户的URL中。 (对于所有可caching的内容,更好使用CDN!)

您尚未解答的重要问题包括您拥有多less个IP地址,您拥有多less个Web服务器以及可caching/不可caching和http / https之间的分隔。

+--->(cacheable:80)->--------------+ | | +--->(cacheable:443)---> stunnel->-+->Varnish ->-+ HAProxy ->-+ | +-->(non-cacheable:443)--> stunnel->-----+-------+---->Apache | | +--->(non-cacheable:80)->-----------------+ 

很明显,如果你删除清漆,(可选的使用Apache中的mod_proxy),这变得简单得多…

  +--->(:80)->------------+ HAProxy ->-+ | +--->(:443)---> stunnel-+---->Apache 

考虑到硬件的价格,我并不相信使用caching逆向代理是价格/性能之间的一个很好的折衷 – 除非你有大量的stream量,而且大部分是可caching的。 OTOH如果你正在实现逻辑(如ESI),那么它不是非常实用, 没有代理,在这种情况下,问题变成可以光油提供所需的负载平衡,而不是使用HAPProxy?

  (:443)-->stunnel--+ | (:80)-------------+-->varnish-->Apache 

哇,那个堆栈越来越深,越来越复杂。 复杂性是正常运行时间的敌人,也是一般performance的敌人。 每一个片断都必须pipe理连接,parsingHTTP标头等。

我build议你简化一下。 使用nginx进行SSL,负载平衡,caching,因为它支持所有三个内置模块。 你也可以增量地将它部署到你的基础架构中,首先在前面做SSL,然后replaceHAproxy来实现服务的负载平衡等等。如果你的服务是用一种语言编写的有一个体面的networking或FastCGI服务器。

我的小型SaaS商店在Tomcat,IIS和PHP-fastCGI后端服务和静态Web服务器之前使用扁平的nginx SSL /代理/caching/静态层。 我们看到每秒2000个请求峰值,而nginx甚至没有在这个负载下打出汗,只有两个单核VMware虚拟机在前端。

你可以尝试“模式TCP”(默认)和“选项ssl-hello-chk”。 看看HAProxyconfiguration手册 。 这样你不会受益于HAProxy检查http-headers的可能性,但也许你不需要这样做。

通过这种方式,您可以为HAProxy提供所有资源以进行负载均衡和SSL解密,caching,并在后端完成dynamic或静态内容的提供,您可以轻松进行扩展。

HAProxy可以处理HTTP / 1.1能够保持许多持久的连接,所以在你的应用程序中可以使用诸如长轮询或websocket等技术。 例如,这对于nginx来说是不可能的。