首页 > 解决方案 > 有没有办法使用 Nginx 创建点对点(每个客户端 1 个服务器)连接?

问题描述

嗨,我正在设置一个带有多个 docker 容器的服务器,这些容器都运行一个应用程序(Iperf3),一次只能托管一个客户端进行带宽测试。

使用 Nginx 我想提供几秒钟的专用链接,直到以点对点方式执行测试。

现在我的代码(如下所示)非常简单,我正在端口 5201 上侦听 tcp 和 udp 并将连接代理到 2 个服务器。

我的第一种方法是将每台服务器的连接数限制为 1,以便一次只能连接一个客户端。但是,每个测试都会生成多个连接,因此使用 max_conns 服务器参数限制每个服务器的连接对我没有帮助。

由于每个测试都会生成多个连接,并且需要将它们发送到同一服务器才能使测试成功,因此我将 hash $remote_addr 包括在内;以便有客户端到服务器的亲和力。

我下面设置的问题是 Nginx 会将多个客户端发送到相同的服务器,如果服务器已经与另一个客户端执行了测试,则该请求将被服务器丢弃。

stream{
    upstream iperf_backends {
        hash $remote_addr consistent;
        server 127.0.0.1:5202;
        server 127.0.0.1:5203;
    }

    server{                                                                      
        listen 5201;
        listen 5201 udp;
        proxy_pass iperf_backends;
    }
}

标签: nginxstreamiperf3

解决方案


推荐阅读