2016-11-05 46 views
1

我有3个(应用客户端,应用程序A,应用程序-b)的应用程序在码头服务器和一个NGINX负载平衡器(APP-磅)运行。所有(内部或外部)请求都通过负载平衡器来到我的应用程序。基于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。泊坞jwilder/nginx的代理位置配置

我为我的应用程序编写了Docker-composer。为了避免循环依赖,我使用了Docker网络。它运作良好。

如果我扩大我的申请。 LB不知道这个新的应用程序容器。

我已经去了很少的教程,并试图使用jwilder/nginx代理而不是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 

回答

1

有引入请求(e.g. #599)为nginx的代理映像,以便支持虚拟路径。要实现这一点,您可以使用原始图像,并将您自己的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无法访问的其他网络,则会收到超时。

+0

我打算使用dockercloud-haproxy。它有虚拟路径和主机。请在此建议我 – Gnana

+0

上面的问题是jwilder的nginx-proxy,我在这里已经回答了。我对dockercloud-haproxy没有任何建议,那将是一个不同的问题。 – BMitch