我有3个(app-client,app-a,app-b)应用程序在jetty服务器和一个NGINX负载均衡器(app-lb)中运行。所有(内部或外部)请求都通过负载均衡器进入我的应用程序。基于Web上下文(/ app-a /或/ app-b /)名称,LB会将请求转发给正确的应用程序。我在LB中配置了(location / app-a /和location / app-b和location / 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文件中提供位置映射,如下所示,因为此配置由容器动态更新或如何制作内部呼叫网址。
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
答案 0 :(得分:3)
nginx-proxy映像有拉取请求(e.g. #599)以支持虚拟路径。要实现这一点,您可以使用原始图像并将您自己的nginx.tmpl文件传递到容器中(作为卷装入,例如-v #load "./packages/FsLab.1.0.2/FsLab.fsx"
open XPlot.GoogleCharts
// Logistic Regression
let z = [for i in -10. .. 10. -> (i,1./(1.+exp -i))]
let options =
Options
( title = "Sigmoid Function", curveType = "function",
legend = Legend(position = "bottom") )
[z]
|> Chart.Line
|> Chart.WithOptions options
|> Chart.WithLabels ["g(z)"]
)。然后,您的容器只需要像$(pwd)/nginx.tmpl:/app/nginx.tmpl:ro
那样定义VIRTUAL_PATH
。
我还建议在nginx-proxy容器上设置VIRTUAL_HOST
,并且如果您不想要基于主机名的路由,请大家指出。
注意#599,我遇到了nginx.tmpl中的一个错误,你需要将DEFAULT_HOST
向上移动两行,直到{{ $networks := .Networks }}
(范围重新定义{{ range $container := .Containers }}
}重新定义.
)。否则,假设所有网络都可以访问,如果容器也连接到nginx-proxy无法访问的其他网络,您将获得超时。