使用nginx进行docker代理路由

时间:2018-01-28 13:09:43

标签: docker nginx proxy docker-compose

我有几个运行多个容器的应用程序,在一些docker-compose文件中组织,运行在不同的端口上。实际上像example.com:port一样访问它们。

示例:

  • app1有2个服务暴露端口1111我通过example.com:1111
  • 访问
  • app2有2个服务暴露端口3333我通过example.com:3333
  • 访问

现在我想用example.com/app1,example.com/app2来访问它们。我想用另一个运行nginx的容器来实现这一点。但我不知道如何编写nginx配置来实现这一目标。

2 个答案:

答案 0 :(得分:0)

我知道,你直接要求Nginx作为入口控制器,但是你想看看traefik.io。这是一个反向代理/负载均衡器,用于动态后端。

对Nginx执行相同操作并非易事,因为您必须了解Docker如何处理网络和服务解析。

答案 1 :(得分:0)

你的nginx.conf

这样的东西
server {
    listen 80;

    location /app1 {
        proxy_pass  http://example.com:1111;
    }

    location /app2 {
        proxy_pass  http://example.com:3333;
    }
}

虽然请记住您在docker-compose中使用命名服务,然后您可以使用这些名称,因为它们将在默认网络中可用。 e.g。

server {
    listen 80;

    location /app1 {
        proxy_pass  http://app1:1111;
    }

    location /app2 {
        proxy_pass  http://app2:3333;
    }
}

另外请记住nginx很难通过环境变量进行配置而不使用lua,这与docker IIRC有点争执,所以最好只是硬编码。