你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
如何将请求与路由配置匹配
Azure Front Door 中的路由定义了传入请求到达 Azure Front Door 边缘时如何处理流量。 通过“路由”设置,定义了域和原点组之间的关联。 通过使用高级功能(例如“要匹配的模式”和“规则集”),可以对流向后端资源的流量进行精细的控制。
注意
当使用 Front Door 规则集时,可以配置规则以替代请求的原点组。 由规则集设置的原点组将替代本文中所述的路由过程。
重要
Azure Front Door(经典版)将于 2027 年 3 月 31 日停用。 为了避免任何服务中断,请务必在 2027 年 3 月之前将 Azure Front Door(经典版)配置文件迁移到 Azure Front Door 标准层或高级层。 有关详细信息,请参阅 Azure Front Door(经典版)停用。
当请求到达 Azure Front Door(经典)边缘时,Front Door 首先需要确定如何将匹配的请求路由到后端资源,然后在路由配置中执行定义的操作。 以下文档介绍了 Front Door 如何确定在处理请求时要使用的路由配置。
Front Door 路由配置结构
Front Door 传递规则由两个主要部分组成:“左侧”和“右侧”。 Front Door 将传入的请求与路由的左侧相匹配,而右侧则定义处理请求的方式。
传入的匹配项(左侧)
以下属性确定传入的请求是否与传递规则(或左侧)匹配:
- HTTP 协议 - HTTP 或 HTTPS
- 域 - 例如:www.foo.com、*.bar.com
- 路径 - 例如:/*、/users/*、/file.gif
这些属性会在内部扩展,因此协议/域/路径的每种组合都是潜在的匹配集。
路由决策(右侧)
决定如何处理请求取决于是否为路由启用了缓存。 如果缓存的响应不可用,则将请求转发到相应的原点。
路由匹配
本部分重点介绍 Front Door 如何匹配传递规则。 基本概念是 Front Door 始终匹配最具体的请求,仅查看“左侧”。 Front Door 首先根据协议,然后根据域,最后根据路径进行匹配。
前端主机匹配
Azure Front Door 使用以下逻辑来匹配前端主机:
- 确定是否有前端主机完全匹配的路由。
- 如果没有完全匹配的前端主机,将拒绝请求,并发送“404: 错误的请求”错误。
下表显示了三种不同的路由规则以及对应的前端主机和路径:
路由规则 | 前端主机 | 路径 |
---|---|---|
A | foo.contoso.com | /* |
B | foo.contoso.com | /users/* |
C | www.fabrikam.com, foo.adventure-works.com | /*、/images/* |
下表显示了上述路由规则的匹配结果:
传入前端主机 | 匹配的传递规则 |
---|---|
foo.contoso.com | A, B |
www.fabrikam.com | C |
images.fabrikam.com | 错误 404: 错误的请求 |
foo.adventure-works.com | C |
contoso.com | 错误 404: 错误的请求 |
www.adventure-works.com | 错误 404: 错误的请求 |
www.northwindtraders.com | 错误 404: 错误的请求 |
路径匹配
在 Front Door 确定了具体的前端主机并筛选出可能的路由规则后,Front Door 再根据请求路径选择路由规则。 与前端主机类似的逻辑用于匹配请求路径:
- 确定是否存在请求路径完全匹配的路由规则。
- 如果没有完全匹配的路径,则 Front Door 会查找通配符路径匹配的路由规则。
- 如果找不到具有匹配路径的路由规则,则将拒绝请求,并发送“404: 错误的请求”错误。
注意
通配符 *
仅适用于在其之后没有任何其他字符的路径。 此外,通配符 *
前面必须有斜杠 /
。 没有通配符的路径都视作完全匹配的路径。 以斜杠 /
结尾的路径也是完全匹配的路径。 确保路径遵循这些规则以避免任何错误。
注意
- 任何没有通配符的路径都视作完全匹配的路径。 如果路径以
/
结尾,则被视为完全匹配。 - 匹配路径的模式不区分大小写,这意味着具有不同大小写的路径被视为重复。 例如,使用路径
/FOO
和/foo
的相同协议具有相同的主机。 这些路径被视为重复路径,这在“匹配模式”设置中是不允许的。
下表是由路由规则、前端主机和路径组合的列表:
路由规则 | 前端主机 | 路径 |
---|---|---|
A | [www.contoso.com](www.contoso.com) | / |
B | [www.contoso.com](www.contoso.com) | /* |
C | [www.contoso.com](www.contoso.com) | /ab |
D | [www.contoso.com](www.contoso.com) | /abc |
E | [www.contoso.com](www.contoso.com) | /abc/ |
F | [www.contoso.com](www.contoso.com) | /abc/* |
G | [www.contoso.com](www.contoso.com) | /abc/def |
H | [www.contoso.com](www.contoso.com) | /path/ |
下表显示了传入请求在到达 Front Door 边缘时匹配的路由规则:
传入的请求 | 匹配的路由 |
---|---|
www.contoso.com/ | A |
www.contoso.com/a | B |
www.contoso.com/ab | C |
www.contoso.com/abc | D |
www.contoso.com/abzzz | B |
www.contoso.com/abc/ | E |
www.contoso.com/abc/d | F |
www.contoso.com/abc/def | G |
www.contoso.com/abc/defzzz | F |
www.contoso.com/abc/def/ghi | F |
www.contoso.com/path | B |
www.contoso.com/path/ | H |
www.contoso.com/path/zzz | B |
警告
如果没有完全匹配的前端主机 (/*) 的路由规则,则不会匹配任何路由规则。
示例配置:
路由 | 主机 | 路径 |
---|---|---|
A | profile.contoso.com | /api/* |
匹配表:
传入的请求 | 匹配的路由 |
---|---|
profile.domain.com/other | 无。 错误 404: 错误的请求 |
路由决策
一旦 Front Door 与单个传递规则匹配,就需要选择如何处理请求。 如果 Azure Front Door 具有可用于匹配的传递规则的缓存响应,则该请求将返回到客户端。
最后,Azure Front Door 将评估是否为匹配的传递规则配置规则集。 如果没有定义规则集,则请求会不作任何更改转发到原点组。 否则,会按配置的顺序处理规则集。 规则集可以替代路由,方法是将流量强制路由到特定的原点组。
如果 Front Door(经典)没有可用于匹配路由规则的缓存响应,它将评估是否为匹配的路由规则配置 URL 重写。 如果不存在自定义转发路径,则请求将不作更改转发到所配置的后端池中的相应后端。 如果定义了自定义转发路径,则请求路径将根据自定义转发路径中的定义进行更新,然后转发到后端。