AWS上的Nginx / ELB / Unicorn架构的最佳实践是什么?

时间:2015-07-04 10:51:32

标签: ruby-on-rails amazon-web-services nginx unicorn

我们在AWS北京有一个RoR应用程序。 AWS Beijing没有Route 53(我们不能使用Alias将ELB应用于Apex域),因此我们必须在ELB前面使用运行Nginx的前端服务器。

现在我们的架构如下:

前端(Nginx) - ELB --- App-(1~n)(Nginx - Unicorn)

我们注意到以下独角兽描述的字样: “Unicorn绝对不能暴露给慢客户端,因为它永远不会使用新的东西,如非阻塞套接字I / O,线程,epoll或kqueue。独角兽必须使用完全缓冲的反向代理,如nginx for慢客户。“

所以我的问题是:
1.在Unicorn之前,我们是否需要在App Server上使用nginx? 2.如果我们在App Server上删除nginx,前端服务器上的nginx可以像unicorn描述一样发挥效果吗?

2 个答案:

答案 0 :(得分:1)

在这种情况下,我建议您使用HAProxy替换ELB,而不必将Route53的别名功能指向您的顶点域。将Nginx实例放在ELB前面并不是一个好主意,因为您只是因为无法在Route53上引用ELB而添加新层。通过在ELB前面放置一个Nginx实例,你也可以失去高效的好处。

我的建议是你在Unicorn前面的每个app服务器上保留一个Nginx实例,并使用HAProxy作为负载均衡器:HAProxy> [Nginx>独角兽]。在简单的HAProxy设置中,您也没有相同的ELB可用性,但如果需要,您可以设置高可用配置。

答案 1 :(得分:0)

1)Nginx必须始终在Unicorn前面,因为Unicorn无法有效地处理慢客户端,它只是被那些客户锁定

2)永远不要通过网络与Unicorn对话,这意味着每个应用服务器都需要拥有自己的Nginx。 Nginx作为Load Balancer比ELB黑盒更好。