使用Nginx解释负载均衡,就像我五点一样

我发现了大量的DIY文章和教程,介绍如何使用上游服务器将Nginxconfiguration为负载平衡器:

upstream backend { ip_hash; server 1.2.3.4; server 1.2.3.5; server 1.2.3.6; } server { location / { proxy_pass http://backend; } } 

但是就configuration这个架构而言,这是我能find的程度。 目前我有一个rails应用程序部署到3后端VPS服务器,我使用Unicorn为我的HTTP服务器。 我是否需要在我的负载平衡服务器上安装ruby以及我的Rails应用程序和独angular兽? 我需要在每台上游服务器上安装Nginx吗? 如果是这样,我该如何configuration它们? 如果我在build筑中引入像光油这样的东西,那会怎样呢? 在负载平衡器或每个后端之前?

以下是我如何组织一切的视觉:

  +---> backend1 <---+ | | [requests] <---> [Nginx load-balancer]-+---> backend2 <---+-[Database server] | | +---> backend3 <---+ 

简短的回答:

Nginx真的只有一个工作,那就是接受一个传入的请求并把它交给后端服务器。

鉴于此,您的前端服务器只需要运行nginx而您的后端服务器只需要运行rails 。 合理?

现在,如果你的后端和前端都在同一台服务器上运行,当然是的,它也必须安装在那里,但是从你的图中我不相信是这样的。

如果你引入一个HTTPcaching软件,比如Varnish ,它将在NginxRails之间,最有可能的也是在后端服务器上运行。 所以请求将遵循这个path:

 Nqinx -> Varnish -> Rails 

在使用Rails的时候, nginx可以用来扮演好几个angular色,通常是一个HTTP负载平衡器或者一个应用服务器的前端。 您的设置是一个常用的设置,但可能会在您向更高级别的stream量发展时带来扩展挑战。

当您按照您所描述的方式使用less数VPS服务器时,一个nginx实例可以作为传入stream量的主HTTP负载平衡器,也可以作为从Rails应用程序服务器卸载低级职责的前端静态文件,URL重写/redirect等)。

nginx可以处理数千个并发连接,而​​不需要太多的资源,而Unicorn Rails应用服务器通常只能服务less量的并发连接。 随着规模的扩大,您将需要更多的负载平衡器/前端nginx实例(以及它们之间的负载均衡方法,如DNS循环或其他机制)。

如果您使用Amazon AWS或其他更成熟的托pipe平台,则经常使用像Elastic Load Balancing(ELB)这样的服务作为主要Web负载平衡器。 每个应用程序服务器运行nginx / Unicorn,利用nginx作为前端来卸载每个独angular兽的处理。 由于每台服务器前端都有大容量的ELB,因此容易扩展。