java - 在 Azure VM 上使用 NGINX 对其他 Azure VM 进行负载平衡

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

我正在 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/

相关文章:

azure - 如何在 Azure 逻辑应用程序中使用 HMAC/签名 key 验证 Webhook 消息?

Nginx `proxy_ssl_trusted_certificate` 与 letsencrypt 上游

include - 可以在 nginx 的上游 block 中使用 "include"指令吗?

java - Android Studio 中与 Azure 的 JDBC 连接失败

azure - azure自托管代理linux不能与 “--once”参数一起运行

docker - keycloak 动态客户端注册registration_client_uri docker主机名覆盖

java - 使用 GWTP 创建表

java - Elasticsearch不根据createdBy字段查询?

java - 比较两个 json 结构并得到不匹配的变化

java - 在静态初始化 block 中使用 try catch