Docker jwilder/nginx代理位置配置

Docker jwilder/nginx代理位置配置,nginx,docker,docker-compose,jwilder-nginx-proxy,Nginx,Docker,Docker Compose,Jwilder Nginx Proxy,我有3个(应用程序客户端、应用程序a、应用程序b)应用程序正在jetty服务器上运行,还有一个NGINX负载平衡器(应用程序lb)。所有(内部或外部)请求都通过负载平衡器到达我的应用程序。LB将根据web上下文(/app-a/或/app-b/)名称将请求转发到正确的应用程序。我已在LB中配置(位置/app-a/和位置/app-b以及位置/app-b和位置/app-client)。app-a将调用app-b,app-b将调用app-a,app-client将从外部世界调用,app-client将调

我有3个(应用程序客户端、应用程序a、应用程序b)应用程序正在jetty服务器上运行,还有一个NGINX负载平衡器(应用程序lb)。所有(内部或外部)请求都通过负载平衡器到达我的应用程序。LB将根据web上下文(/app-a/或/app-b/)名称将请求转发到正确的应用程序。我已在LB中配置(位置/app-a/和位置/app-b以及位置/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
存在对nginx代理映像的请求,以支持虚拟路径。要实现这一点,您可以使用原始映像并将自己的nginx.tmpl文件传递到容器中(作为卷装载,例如-v
$(pwd)/nginx.tmpl:/app/nginx.tmpl:ro
)。然后您的容器只需要定义
虚拟路径
,就像它们定义
虚拟主机
一样

我还建议在nginx代理容器上设置
DEFAULT\u HOST
,如果您不想使用基于主机名的路由,请让所有人都指向它


注意#599,我遇到的nginx.tmpl中有一个bug,您需要将
{{$networks:=.networks}
上移两行到
{{range$container:=.Containers}
(该范围重新定义了
,它重新定义了
.networks
)。否则,将假定所有网络都可以访问,如果容器也连接到nginx代理无法访问的其他网络,则会超时。

我计划使用dockercloud haproxy。它具有虚拟路径和主机。请就此向我提出建议上面的问题是针对jwilder的nginx代理的,我在这里已经回答了。我对Dockerloud haproxy没有任何建议,那将是另一个问题。