ELB,nginx和多个HTTPS应用程序

比方说,我有3个不同的应用程序,都做HTTPS。 不是所有这些都是高stream量,所以我在3个EC2实例的同一个“池”上运行全部3个。

domain1.com/domain2.com/domain3.com都有他们的Alogging指向Amazon ELB,它在所有三台服务器上都转发:443和:80到nginx:80(所以是的,ELB做SSL终止)。 因为ELB正在做SSL终止,所以我有三个不同的ELB,而不是一个 。 所以基本上:

domain1.com domain2.com domain3.com | | | | | | VVV ELB1 ELB2 ELB3 \ | / \ | / \ | / \ | / \ | / \ | / \_______|_______/ | | V --------------------------- nginx nginx nginx | | | VVV php-fpm php-fpm php-fpm 

三个实例中的每一个都运行nginx和php-fpm。 这样,当负载太高时,我们只是从同一台机器镜像启动另一个实例,它只是join池。 实例本身被configuration为使得nginx只连接到本地主机上运行的php-fpm。

我不知道这是否是解决这种情况的正确方法。

  • 我应该将SSL终止移动到nginx,以便我不需要n个ELB作为HTTPS证书吗? 这将如何影响CPU利用率?
  • 我应该使用连接到多个php-fpm后端的单个nginx机器吗? 那么我需要担心缩放两个不同的angular色,而不是一个。
  • 例如,如果我想在其他地区启动实例,情况如何呢?

我希望这个问题对SF不是不合适的。

你可以运行这样的东西:

  domain1.com domain2.com domain3.com \ | / \ | / \ | / \ | / \ | / \ | / \_______|_______/ | ngix (static pages from local storage, 3 IP addresses, SSL termination) | | ELB (optional) | | ----------------------- | | | VVV php php php 
  • 这样会便宜一点,因为1个EC2保留的小实例+ 1个ELB比3个ELB便宜。

  • 如果你可以沟通ELB,只需使用普通的DNS循环(但是你会失去一些ELBfunction,如自动故障转移),你甚至可以更便宜。

  • 服务静态页面上的延迟不会受到php服务实例上的负载的影响。

  • PHP服务不会与静态页面OScaching竞争RAM。

  • 你甚至可以使用Apache的mod_php而不是php-fpm你不需要用户在进程之间分离 – 它应该有点快。

  • 增加更多的页面服务会更便宜(增加一个IP而不是一个ELB)。

但是它也有一些缺点:

  • 你会有一个单一的失败点(ngix服务器)。

  • 更复杂的设置。

我应该将SSL终止移动到nginx,以便我不需要n个ELB作为HTTPS证书吗? 这将如何影响CPU利用率?

如果你能确保所有的访问者都使用支持SNI的浏览器,那么你可以使用1个ELB(或2个,在主动 – 备用场景中)(参见本文关于SNI的问题,例如Windows XP,Android 2 .x等),否则你将需要每个SSL证书1个公共IP。

我不知道是否有可能订购和使用多个IP每个EC2实例; 如果是这样,您可以简单地将这些IP路由到您的单个ssl-offloader / loadbalancer,避免SNI问题。

我应该使用连接到多个php-fpm后端的单个nginx机器吗? 那么我需要担心缩放两个不同的angular色,而不是一个。

你可以,但这真的取决于你使用的是什么nginx; 如果它只是转储proxy_pass,那么集中可能是好的,你可以通过减less一些层来简化你的设置。 但这只能在实际查看您的实时设置时才能得到解答。

我应该将SSL终止移动到nginx,以便我不需要n个ELB作为HTTPS证书吗? 这将如何影响CPU利用率?

ELB是一个额外的费用,(如每月$ 20,加上数据),所以你应该考虑到这一点。 你使用什么function? 如果你只是在SSL终止后,你可能只是卸载到您的networking/应用服务器。

如果您从负载平衡和扩展function中获益(以及零维护),那么您可能认为这是值得的投资。

每个域名1个ELB可能对于100个站点来说成本很高,但是对于只有3个站点而言,可能不需要担心维护开销。

我应该使用连接到多个php-fpm后端的单个nginx机器吗? 那么我需要担心缩放两个不同的angular色,而不是一个。

你是在提议这个,而不是ELB,还是除了这些? 分离Web服务器和应用程序服务器以获得好处,因为它可以方便地独立扩展。 这当然增加了另外的维护开销,可能不值得为3个站点(那些经常在重负载之下)。 我不会build议在你知道你需要的时候冲上这条路。

例如,如果我想在其他地区启动实例,情况如何呢?

以下是在多个地区使用ELB&Route53进行故障切换的情况下的EC2的一个示例。

http://aws.amazon.com/elasticloadbalancing/

使用Route 53 DNS故障转移,您可以在多个AWS区域中运行应用程序,并指定备用负载平衡器以跨区域进行故障转移。 如果您的应用程序没有响应,路由53将从服务中删除不可用的负载均衡器端点,并将stream量导向另一个区域中的备用负载均衡器。