【问题标题】:Load Balancing - Web Applications with NGINX负载平衡 - 使用 NGINX 的 Web 应用程序
【发布时间】:2016-09-28 04:20:25
【问题描述】:

我有一个未配置为多线程的 web 应用程序 ruby​​ on rails。 在 nginx 配置中,我设置了一个上游块来进行负载平衡。 像这样:

upstream myapp {
  server 127.0.0.1:3075;
  server 127.0.0.1:3076;
  server 127.0.0.1:3077;
}

我还使用 3 个端口 (3075,3076,3077) 设置了 3 个瘦进程。

我认为当我的第一个应用程序“127.0.0.1:3075”忙时,所有请求都会自动平衡到我的第二个应用程序“127.0.0.1:3076”或第三个应用程序。

但负载平衡不起作用,即使我的三个 Web 应用程序独立运行正常。

请帮我找出错误。

-------------------- nginx 配置 --------

upstream myapp_hosts {
    server  127.0.0.1:3075;
    server  127.0.0.1:3076;
    server  127.0.0.1:3077;
}

server {
    listen       80;
    server_name  myapp.mydomain.com;
    rewrite ^(.*)$ https://myapp.mydomain.com$1 permanent; # rewrite for https, i have another bloc server listen 443.
    access_log /var/log/nginx/myapp.access.log;

    location / {
            proxy_pass         http://myapp_hosts/;
            proxy_connect_timeout   900;
            proxy_send_timeout      900;
            proxy_read_timeout      900;
            proxy_buffer_size   16k;
            proxy_buffers       32   16k;
            proxy_busy_buffers_size 64k;
    }
    location /public {
            root /var/www/nemo/;

    }
    location /images {
            root /var/www/nemo/assets/;

    }
    location /javascripts {
            root /var/www/nemo/assets/;

    }
    location /stylesheets {
            root /var/www/nemo/assets/;

    }

   client_max_body_size    10m;
   client_body_buffer_size 128k;
   client_header_buffer_size 64k;
}

【问题讨论】:

  • 但是负载平衡不起作用有什么证据吗?你如何测试它?
  • 我用完整的配置 nginx 完成了我的问题谢谢

标签: ruby-on-rails nginx thin


【解决方案1】:

你重写的目的是什么?

rewrite ^(.*)$ http://myapp.mydomain.com$1 permanent;

看起来它会根据这些规则不断地将任何内容重定向到自身,从而导致重定向循环。您可能已经将此系列与您在其他地方找到的 HTTPS 重定向配置混为一谈了,也许?

尝试删除该行,看看它是否有效。

【讨论】:

  • 感谢您的回答,是的,您是对的,对 https 的重写,所有请求 http 将被重定向到 https,我有另一个 bloc 服务器监听 443。所以我无法删除它。
  • 什么是“块服务器”?无论如何,你应该在那里有你的代理配置。你的 nginx 配置的其余部分对这个重写是无用的。
  • 是的,你是对的,我可以删除 80 中的所有位置。我在 443 中重复它们。
  • 删除 80 中的所有配置后,我看到我的第二台服务器(服务器 127.0.0.1:3076)开始工作。但是我遇到了新问题:我试图同时发出两个请求,我看到服务器 3075 接受了第一个请求,服务器 3076 接受了第二个请求,但是我看到我的第二个请求总是在运行,即使服务器 3076 完成了,并且当第一个请求完成时,我同时收到了两个响应。
  • 这与您当前的问题无关 - 我建议打开一个新问题
猜你喜欢
  • 2010-10-25
  • 1970-01-01
  • 2014-07-23
  • 1970-01-01
  • 2020-01-20
  • 2022-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多