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

Ran*_*yaa 9 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
Run Code Online (Sandbox Code Playgroud)

这甚至是可能的还是我需要设置另一个zuul实例?

小智 1

这是一种可能的解决方案:

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

这是示例代码:

zuul:
  ignored-patterns: /health, /info
  routes:
    wildcard:
      path: /**
      url: /**
      stripPrefix: false
Run Code Online (Sandbox Code Playgroud)

您必须忽略/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
Run Code Online (Sandbox Code Playgroud)

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