【问题标题】:Docker jwilder/nginx-proxy location configurationDocker jwilder/nginx-proxy 位置配置
【发布时间】:2017-03-19 06:16:25
【问题描述】:

我有 3 个(app-client、app-a、app-b)应用程序在码头服务器和一个 NGINX 负载平衡器(app-lb)中运行。所有(内部或外部)请求都通过负载均衡器到达我的应用程序。根据 web 上下文(/app-a/ 或 /app-b/)名称,LB 会将请求转发到正确的应用程序。我已经在 LB 中配置了(位置 /app-a/ 和位置 /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 docker docker-compose jwilder-nginx-proxy


    【解决方案1】:

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

    我还建议在 nginx-proxy 容器上设置 DEFAULT_HOST,如果您不想要基于主机名的路由,请让每个人都指出这一点。

    注意#599,我遇到的 nginx.tmpl 中有一个错误,您需要将 {{ $networks := .Networks }} 上移两行到 {{ range $container := .Containers }} 之前(范围重新定义 . 重新定义 .Networks )。否则,所有网络都将被假定为可访问,如果容器还附加到 nginx-proxy 无法访问的其他网络,您将获得超时。

    【讨论】:

    • 我打算使用 dockercloud-haproxy。它有虚拟路径和主机。请就此向我提出建议
    • 上面的问题是针对 jwilder 的 nginx-proxy 的,我已经在这里回答过了。我对 dockercloud-haproxy 没有任何建议,那将是一个不同的问题。
    猜你喜欢
    • 2020-05-03
    • 1970-01-01
    • 2022-11-02
    • 1970-01-01
    • 2015-09-25
    • 1970-01-01
    • 2020-12-31
    • 1970-01-01
    • 2018-04-29
    相关资源
    最近更新 更多