Kong是一个分布式API网关,可以注册route路由到service,然后请求真正的后端服务,最近在注册route时发现不同route的path可以相同,所以当注册相同的path时,Kong是如何判断请求应该路由到哪个服务呢?
Kong在进行路由时,依据以下规则进行匹配:
- kong会优先匹配有最多规则的路由。即注册路由时,配置项更多的路由将优先匹配(请求一个路由时,必须满足所有配置项)
- 如果给定请求的规则计数在两条路由 A 和 B 中相同,则将按照列出的顺序应用以下规则, 如果出现以下情况,将选择路由 A 而不是路由 B:
- A 只有“普通”主机头,B 有一个或多个“通配符”主机头
- A 的非主机标头比 B 多
- A 至少有一个“正则表达式”路径,B 只有“普通”路径
- A 的长路径比 B 的长路径长
- A.created_at < B.created_at 即 A 要早于 B 创建
https://izcqi.com/posts/2020/07/28/kong-quick-start-and-core-concepts-en/