nginx - 有没有办法使用 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;
}
}
解决方案
推荐阅读
- c++ - 从 C++ 文件中打印一定数量的行
- android-ndk - 如何在 jni 中获取作业的最后一个字符?
- css - 不同类型的后备字体(无衬线、草书等)?
- symfony4 - 无效的映射文件 BaseMedia.mongodb.xml
- html - 为什么html元素会被剪裁
- python - 为什么 Scrapy 只得到一些结果?(302 重定向)
- javascript - Angularfire - 如何使用 snapshotChanges() 应用“where”条件
- regex - 搜索引号之间的数字并将其删除(VS Code)
- maven - Maven - 使用标志跳过执行步骤?
- python - 如何用pyparsing解析mysql