Nginx和Unicorn在单独的机器上

我有一个非常标准的Rails应用程序与Unicorn和Nginx一起运行。 我想拆分应用程序本身,并在另一台机器上使用Nginx,在另一台机器上使用Unicorn(使用Rails应用程序)。 这里的想法是,我想在将来以后再添加与Unicorn的应用程序服务器,主要是为了一些轻负载平衡。

我可能从错误的angular度来解决这个问题。 这是正常的/可能的吗? 如果是这样,有人可以指向我的例子configuration或文档?

如果不是要走的路,那么实现最终目标的正确途径是什么? 我已经研究过HAProxy,但是在阅读了一些Nginx / Unicorn文档后,我发现没有任何额外的软件就可以实现这一点。

这个是正常的。 您不需要HAProxy,尽pipeHAProxy可能会为应用服务器之间提供比“nginx”负载平衡更“公平”的负载均衡。

所以,在你的应用服务器上,设置Unicorn来监听一个networking接口。 这应该最好是一个私人IP地址。 对于这个例子,假设你的应用服务器是192.168.1.100,192.168.1.101和192.168.1.102。 configuration独angular兽在所有应用程序服务器上监听端口8000。

在nginx方面,你将有一个“上游”块,如:

upstream unicorn { server 192.168.1.100:8000; server 192.168.1.101:8000; server 192.168.1.102:8000; } 

然后你会得到你的虚拟服务器定义块如下:

 location / { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X_FORWARDED_PROTO $scheme; proxy_set_header Host $host; proxy_connect_timeout 3; proxy_read_timeout 60; proxy_send_timeout 60; proxy_redirect off; proxy_max_temp_file_size 0; if (!-f $request_filename) { proxy_pass http://unicorn; } } 

您可能需要其他代理声明才能让事情按照您的要求工作,但实际上应该这样做。 proxy_pass语句将使用上游块中定义的块,并将作业分配给列出的应用程序服务器。 检查其他可能合适的选项的nginx文档。