Docker jwilder / nginx-proxy位置配置

时间:2016-11-05 14:09:52

标签: nginx docker docker-compose jwilder-nginx-proxy

我有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

1 个答案:

答案 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无法访问的其他网络,您将获得超时。