gpt4 book ai didi

nginx - Docker jwilder/nginx-proxy位置配置

转载 作者:行者123 更新时间:2023-12-02 18:16:08 27 4
gpt4 key购买 nike

我有3个(app-client,app-a,app-b)应用程序在 jetty 服务器中运行,并且有一个NGINX负载均衡器(app-lb)。所有(内部或外部)请求都通过负载平衡器到达我的应用程序。 LB将根据Web上下文(/ app-a /或/ app-b /)名称将请求转发到正确的应用程序。我已经在LB中配置了(位置/ app-a /和位置/ app-b以及位置/ app-client)。 app-a将 call app-b,而app-b将 call app-a,app-client将被外界 call ,app-client会 call 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

最佳答案

对于nginx代理镜像,存在拉取请求(e.g. #599)以支持虚拟路径。要实现此目的,您可以使用原始镜像,然后将自己的nginx.tmpl文件传递到容器中(作为卷挂载,例如-v $(pwd)/nginx.tmpl:/app/nginx.tmpl:ro)。然后,您的容器只需要像VIRTUAL_PATH一样定义VIRTUAL_HOST即可。

我还建议您在nginx-proxy容器上设置DEFAULT_HOST,如果您不希望基于主机名的路由,请所有人都指出。

请注意,在#599中,我遇到了nginx.tmpl中的一个错误,您需要将{{ $networks := .Networks }}移至{{ range $container := .Containers }}之前的两行(该范围重新定义了.,重新定义了.Networks)。否则,如果容器还连接到Nginx-proxy无法访问的其他网络,则假定所有网络都是可访问的,并且您将超时。

关于nginx - Docker jwilder/nginx-proxy位置配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40439172/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com