这对超级用户来说不是一个理想的问题。服务器故障可以说是这个问题的更好目标。那说......
对于您的问题,没有任何具体的答案 - 有许多不同的选项可用于完成每个要点。我将主要回答我的建议。
- TLS发生在我展示的地方吗?
像负载均衡器这样的专用设备是卸载TLS的地方,是的。通常,您在此处具有专用硬件,专门用于在不使用较慢的通用CPU周期的情况下加速TLS。在这样的设备上集中TLS证书也有助于证书管理 - 或者在Heartbleed或POODLE等安全问题的情况下,提供需要进行任何所需安全更改的单点 - 而不是多个Web服务器。
- 理想情况下,您将拥有2个或更多负载均衡器,在高可用性配置中配置主动/主动或主动/被动,以实现故障转移和冗余。
- 在Heartbleed的情况下,由于使用本机SSL / TLS堆栈而不是OpenSSL,市场上至少有一些重要的负载平衡器不容易受到攻击。
如果安全性对您来说至关重要,您可以考虑在新的TLS连接中隧道化负载均衡器和Web服务器之间的流量。或者,不要终止TLS,只将TCP连接转发到一个或多个Web服务器。但是,做任何一项都可以解除我上面提到的任何优点。此外,我希望我假设您的负载均衡器和Web服务器(及其通信)都将包含在不需要加密通信的安全数据中心内。(如果这些设备不安全,则无论如何都会关闭所有投注。)
另见:https://security.stackexchange.com/questions/30403/should-ssl-be-terminated-at-a-load-balancer
- URL重写和重定向发生在哪里?
正如你所提到的,CDN将是另一种可能性 - 我将在此忽略。
您可以在负载均衡器中或在Web服务器上执行此操作。我倾向于默认在Web服务器中执行大部分操作 - 尤其是在使用Apache HTTPD时 - 因为您无法超越mod_rewrite提供的功能和灵活性。能够将这些规则保存在与设备无关的文本文件中,这些文件可以在SVN等中进行源控制,这也是一个额外的好处 - 特别是因为规则往往需要经常更改(鉴于其性质)。
我将始终保留您在Web服务器中托管的站点/域内部的任何重写和重定向。在托管站点中的URL需要在其他地方重定向的有限情况下 - 以及性能是一个关键问题 - 我是否会考虑在负载均衡器上执行此工作。
- 我应该/可以在负载平衡层(可能在单独的服务器上)处理静态内容,还是应该在Web服务器层处理静态内容?
除了极少数例外,内容由Web服务器提供,而不是负载均衡器。您可以/应该做的是将Web服务器配置为直接提供此类静态内容 - 而不是将其发送到PHP / Python / Tomcat /等,因为服务可能较慢。如果可能,使用并配置CDN以使所有这些在边缘网络处卸载,甚至无法到达负载均衡器。
这里可能有点棘手的一个方面是身份验证,授权和日志记录。在您卸载此类“静态”内容的任何时候,您的下层甚至可能永远不会意识到正在提供此类内容 - 无法保护它,甚至无法跟踪其访问。这里的一种可能性(如果这是一个问题)是使用“集中式身份验证”模型 - 其中上层可以缓存内容,但仍然会将请求发送回较低层/来源,并使用“If-Modified-”自从“头。然后,原点可以检查会话ID / cookie /等 - 并且有机会响应“HTTP 403 Forbidden”或“HTTP 304 Not Modified”(从缓存返回)。