【问题标题】:nginx load balancing with network redirect带有网络重定向的 nginx 负载平衡
【发布时间】:2023-04-04 06:45:01
【问题描述】:

我正在寻找一种使用 nginx 分派请求的解决方案,以优化主服务器的网络连接带宽(然后它应该将下载请求分派到其他一些服务器)。

这是执行负载平衡的 nginx 示例的摘录:

upstream mystream {
    server ip1:port1;
    server ip2:port2;
}

server {
    listen       myport;
    location /  {
      proxy_pass http://mystream;
    }
}

此示例中的问题是主服务器看起来充当后台服务器的代理,而不是重定向客户端。 (它自己提供文件,然后不保存带宽)。

有没有办法配置 nginx 将下载请求分派到后台服务器而不充当代理。 (保留 URL 可能很好,但如果需要,我愿意重写它)。

谢谢

【问题讨论】:

    标签: redirect nginx load-balancing


    【解决方案1】:

    我终于发现 split_clients 是我案例的最佳解决方案,因为目标是将客户端重定向到各种下载站点而无需任何特定规则。

    请注意,这是更改 URL,因此客户端将看到服务器 URL(在我的情况下并不重要)。

    使用此解决方案,客户端询问 server:myport/abcd 将根据 MurmurHash2 重定向到 serverx:portx/abcd,请参阅http://nginx.org/en/docs/http/ngx_http_split_clients_module.html

    split_clients "${remote_addr}" $destination {
      40%   server1:port1;
      30%   server2:port2
      20%   server3:port3;
      10%   server4:port4
    }
    
    server {
      listen       myport;
      location /  {
        return 302 http://$destination$request_uri;
      } 
    }
    

    更新

    如果您想管理唯一的 URL 和后台服务器直接回复客户端而不进行任何 URL 调度,您可以在直接路由模式下使用 Linux 虚拟服务器配置负载平衡。 要对其进行配置,您可以管理一个 Director VM 和多个“真实服务器”,将请求透明地发送到这些服务器。见http://www.linuxvirtualserver.org/VS-DRouting.html

    【讨论】:

      【解决方案2】:

      这就是反向代理的工作原理:

      反向代理是一种代理服务器,它代表客户端从一个或多个服务器检索资源。然后将这些资源返回给客户端,就好像它们来自 Web 服务器本身一样。

      一种可能的解决方案是将您的上游服务器配置为向公众提供流量,然后将您的客户端重定向到那里。

      【讨论】:

      • 嗨,是的,我理解代理的预期行为,所以我尝试使用 proxy_redirect 但 nginx 不喜欢我配置它的方式。这就是为什么我正在寻找我需要的示例配置。也许使用 proxy_redirect / mystream;会成功的,我会尽快尝试
      猜你喜欢
      • 1970-01-01
      • 2013-04-09
      • 1970-01-01
      • 2015-10-28
      • 2014-01-03
      • 1970-01-01
      • 2019-06-24
      • 2014-12-18
      • 2017-07-19
      相关资源
      最近更新 更多