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

Routing 如何在Zuul中配置特定于域的路由,routing,netflix-zuul,Routing,Netflix Zuul,我们有两个域指向我们的单一Zuul ELB。这两个站点使用了很多相同的服务,所以尽管我们的生产环境现在会有一些不同,但我们只有一个Zuul ELB 我们如何根据域名将相同的路径路由到不同的服务 我想以这样的方式结束: zuul: host: http://a-zuul-host.elb.amazonaws.com:80 ignoredServices: '*' routes: app1: path: / domain: app1.com s

我们有两个域指向我们的单一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实例?

这里有一个可能的解决方案:

  • 在zuul配置中添加通配符路由规则,以将任何请求路由到/**,并禁用此路由规则的剥离前缀
  • 添加类型为路由的新路由筛选器,并使其在RibbonRoutingFilter之前运行,因为此筛选器中会出现无效主机的异常/**
  • 在zuul yaml配置中为不同的域添加域配置
  • 将筛选器与域配置一起使用,以根据域更改主机
  • 下面是一个示例代码:

    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
    
    在您的筛选器中,现在只需根据匹配的域设置我们的主机