我正在 Azure (VM1)
中的 Ubuntu 17.10 VM 上运行 NGINX 开源。我想将其用作负载均衡器,将 TCP 流量转发到同一 Azure 订阅中的更多 Ubuntu VM。目前,为了简单起见,我只在 NGINX 服务器后面添加了一个虚拟机 (VM2)
。
在本地,我有一个 Java 程序,它生成一条 TCP 消息并将其发送到端口 6050 上的 NGINX 服务器的公共(public) IP。该 VM 有一个入站安全规则,允许端口 6050 上的流量。然后它应该将该流量发送到我的第二个端口 6060 上的虚拟机公共(public) IP。该虚拟机具有端口 6060 的入站规则。
这是我的 nginx.conf
文件:
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
stream {
upstream backend {
server <VM2 public IP>:6060;
}
server {
listen 6050;
proxy_pass backend;
}
}
error.log
中没有错误,但 VM2 上的端口 6060 上从未显示 TCP 流量。
这似乎是一个相当简单的用例,但我一生都无法弄清楚为什么流量不通过。有什么建议吗?
最佳答案
终于明白了。我运行 NGINX 的虚拟机位于 Azure 负载均衡器后面,但我不再使用该负载均衡器。我的猜测是,对于连接到负载均衡器的虚拟机,您无法直接向它们发送流量。您必须将流量发送到他们的负载均衡器。
解决方案:我创建了一个新 VM,未附加到任何 Azure 负载均衡器。全新安装 NGINX 并将其连接到我的目标虚拟机。工作完美。
关于java - 在 Azure VM 上使用 NGINX 对其他 Azure VM 进行负载平衡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51528537/