Java 在Azure VM上使用NGINX来平衡到其他Azure VM的负载

Java 在Azure VM上使用NGINX来平衡到其他Azure VM的负载,java,azure,nginx,load-balancing,azure-virtual-network,Java,Azure,Nginx,Load Balancing,Azure Virtual Network,我在Azure(VM1)中的Ubuntu 17.10虚拟机上运行NGINX开源。我想用它作为负载平衡器,将TCP流量转发到同一Azure订阅中的更多Ubuntu虚拟机。目前,我只是在NGINX服务器后面增加了一个VM(VM2),以保持简单 在本地,我有一个Java程序生成TCP消息并将其发送到端口6050上的NGINX服务器的公共IP。该VM具有入站安全规则,允许在端口6050上进行通信。然后,它应该将该流量发送到端口6060上我的第二个VM的公共IP。该VM具有端口6060的入站规则 这是我的

我在Azure
(VM1)
中的Ubuntu 17.10虚拟机上运行NGINX开源。我想用它作为负载平衡器,将TCP流量转发到同一Azure订阅中的更多Ubuntu虚拟机。目前,我只是在NGINX服务器后面增加了一个VM
(VM2)
,以保持简单

在本地,我有一个Java程序生成TCP消息并将其发送到端口6050上的NGINX服务器的公共IP。该VM具有入站安全规则,允许在端口6050上进行通信。然后,它应该将该流量发送到端口6060上我的第二个VM的公共IP。该VM具有端口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;
    }
}
用户nginx;
工人1;
error\u log/var/log/nginx/error.log warn;
pid/var/run/nginx.pid;
事件{
工人(1024);;
}
溪流{
上游后端{
服务器:6060;
}
服务器{
听6050;
代理通行证后端;
}
}
error.log
中没有错误,但VM2上的端口6060上从未显示TCP通信量


这似乎是一个相当简单的用例,但我一辈子都不明白为什么流量没有通过。有什么建议吗?

您必须使用Nginx plus,这显然是用来平衡基于HTTP的LB在第7层功能上的负载

终于明白了。我运行NGINX的VM在Azure负载平衡器后面,我不再使用它了。我的猜测是,对于连接到负载平衡器的VM,您不能直接向它们发送流量。您必须将流量发送到他们的负载平衡器


解决方案:我创建了一个新的VM,没有连接到任何Azure负载平衡器。安装NGINX fresh并将其连接到我的目标虚拟机。工作得很好。

如果问题已经解决,您可以接受您的答复作为答复。尝试-所以在8个小时内不让我接受。