我有 3 个(app-client、app-a、app-b)应用程序在码头服务器和一个 NGINX 负载均衡器(app-lb)中运行。所有(内部或外部)请求都通过负载均衡器到达我的应用程序。根据 Web 上下文(/app-a/ 或 /app-b/)名称,LB 会将请求转发到正确的应用程序。我已经在 LB 中配置了(位置 /app-a/ 和位置 /app-b 和位置 /app-client)。app-a 会调用 app-b 和 app-b 会调用 app-a , app-client 会被外界调用, app-client 会调用 app-a 或 app-b。
我已经为我的应用程序编写了 Docker-composer。为了避免循环依赖,我使用了 Docker net。它运行良好。
如果我扩大我的应用程序。LB 不知道这个新的应用程序容器。
我已经阅读了一些教程并尝试使用jwilder/nginx-proxy而不是 NGINX。如果我使用 VIRTUAL_HOST=app-name 变量来使用它,它会在配置文件中更新上游。但是,我的应用程序是基于每个容器的位置映射运行的。如果我没有指定,请求将如何转到正确的容器。
如何在 LB 的 default.conf 文件中提供位置映射,如下所示,因为此配置由容器动态更新或如何制作内部调用 url。
location /app-a {
proxy_pass http://app-a;
}
location /app-client {
proxy_pass http://app-client;
}
location /app-b {
proxy_pass http://app-b;
}
Request from outside: http://IP:9090/app-client/
Internal call : http://app-lb:80/app-a/
http://app-lb:80/app-b
LB exposed port no is 9090