我正在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上。
这似乎是一个非常简单的用例,但是我无法一生找出流量为何不通过的原因。有什么建议吗?
答案 0 :(得分:0)
您必须使用Nginx plus,这显然可用于平衡第7层功能上基于HTTP的LB的负载。
答案 1 :(得分:0)
最后弄清楚了。我运行NGINX的VM位于Azure负载平衡器的后面,我不再使用它。我的猜测是虚拟机已连接到负载均衡器,您无法直接向其发送流量。您必须将流量发送到他们的负载均衡器。
解决方案:我创建了一个新的VM,未附加到任何Azure负载平衡器。全新安装了NGINX并将其连接到我的目标VM。效果很好。