如何在Zuul中配置特定于域的路由

时间:2016-05-19 16:16:11

标签: routing netflix-zuul

我们有2个域名指向我们的单个Zuul ELB。两个站点都使用了很多相同的服务,所以虽然我们的生产环境现在设置有点不同,但我们只有一个Zuul ELB。

我们如何根据域名将相同的路径路由到不同的服务?

我想结束这样的事情:

zuul:
  host: http://a-zuul-host.elb.amazonaws.com:80
  ignoredServices: '*'
  routes:
    app1:
      path: /
      domain: app1.com
      serviceId: APP_1_SERVICE
    app2:
      path: /
      domain: app2.com
      serviceId: APP_2_SERVICE

这是否可能,或者我是否需要设置另一个zuul实例?

1 个答案:

答案 0 :(得分:1)

以下是一种可能的解决方案:

  1. 在zuul配置中添加通配符路由规则以将任何请求路由到/ **,并禁用此路由规则的剥离前缀。
  2. 添加路由类型的新路由过滤器,并使其在 RibbonRoutingFilter 之前运行,因为此过滤器中的无效主机/**会发生异常。 >
  3. 在您的zuul yaml配置中为您的不同域添加域配置。
  4. 使用过滤器和域配置根据域更改主机。
  5. 以下是示例代码:

    zuul:
      ignored-patterns: /health, /info
      routes:
        wildcard:
          path: /**
          url: /**
          stripPrefix: false
    

    你要忽略 / health ,因为它将与通配符路由规则匹配,并且会引起问题 - 应该映射到其中一个弹簧执行器,所以我们忽略它,让一切都像以前一样处理。

    对于域配置,这里有一个示例:

    domain:
      service_1:
        domain-matcher: https://api_1.com:[0-9]+
        url: https://service_1.com
      service_2:
        domain-matcher: https://api_2.com:[0-9]+
        url: https://service_2.com
    

    在您的过滤器中,现在只需根据匹配的域设置我们的主机。