微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Nginx和Unicorn在不同的机器上

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

我可能会从错误的角度解决这个问题.这是正常/可能吗?如果是这样,有人能指出我的示例配置或文档吗?

如果不是这样的话,实现最终目标的正确途径是什么?我已经研究过HAProxy,但在阅读了一些Nginx / Unicorn文档后,我发现这可以在没有任何其他软件的情况下实现.

最佳答案
这个是正常的.您不需要HAProxy,但HAProxy可能会为您提供应用服务器之间的“更公平”的负载平衡,而不是Nginx负载平衡.

因此,在您的应用服务器上,将Unicorn设置为侦听网络接口.这应该优选地是私有IP地址.对于此示例,假设您的应用服务器是192.168.1.100,192.168.1.101和192.168.1.102.配置unicorn以在所有应用服务器上侦听端口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文档.

原文地址:https://www.jb51.cc/nginx/435289.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐