在Azure VM上使用NGINX将负载平衡到其他Azure VM

时间:2018-07-25 22:27:57

标签: java azure nginx load-balancing azure-virtual-network

我正在Azure (VM1)中的Ubuntu 17.10 VM上运行NGINX Open Source。我想将其用作负载平衡器,以将TCP通信转发到同一Azure订阅中的更多Ubuntu VM。目前,在NGINX服务器后面只有一个额外的VM (VM2),以使其保持简单。

在本地,我有一个Java程序,该程序生成TCP消息并将其发送到端口6050上的NGINX服务器的公用IP。该VM具有入站安全规则,允许在端口6050上进行通信。然后,应将该通信发送给我的第二个VM在端口6060上的公共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;
    }
}

error.log中没有错误,但是TCP流量从不显示在VM2的端口6060上。

这似乎是一个非常简单的用例,但是我无法一生找出流量为何不通过的原因。有什么建议吗?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

最后弄清楚了。我运行NGINX的VM位于Azure负载平衡器的后面,我不再使用它。我的猜测是虚拟机已连接到负载均衡器,您无法直接向其发送流量。您必须将流量发送到他们的负载均衡器。

解决方案:我创建了一个新的VM,未附加到任何Azure负载平衡器。全新安装了NGINX并将其连接到我的目标VM。效果很好。

相关问题