Azure Front Door 中的 路由 定义传入请求到达 Azure Front Door 边缘时如何处理流量。 路由设置在域和源组之间建立关联。 通过使用高级功能(例如“要匹配的模式”和“规则集”),可以对流向后端资源的流量进行精细的控制。
Note
使用 Front Door 规则集时,可以配置一条规则来替代请求的源站组。 由规则集设置的原点组将替代本文中所述的路由过程。
Front Door 路由配置结构
Front Door 路由规则由两个主要部分组成:“左侧部分”和“右侧部分”。 Front Door 将传入的请求与路由的左侧相匹配,而右侧则定义处理请求的方式。
传入的匹配项(左侧)
以下属性确定传入的请求是否与传递规则(左侧)匹配:
- HTTP 协议 - HTTP 或 HTTPS
- 域名 - 例如:www.foo.com, *.bar.com
- 路径 - 例如:/*、/users/*、/file.gif
这些属性会在内部扩展,因此协议/域/路径的每种组合都是潜在的匹配集。
路由决策(右侧)
如何处理该请求取决于是否为该路由启用了缓存。 如果缓存的响应不可用,则将请求转发到相应的原点。
路由匹配
本节介绍 Front Door 如何将请求与传递规则匹配。 基本原则是,Front Door 始终按照该顺序评估“左侧”属性:协议、域和路径,与 最具体的请求 匹配。
前端主机匹配
Azure Front Door 按照以下步骤来匹配前端主机:
- 检查前端主机上是否存在完全匹配的路由。
- 如果找不到完全匹配项,则会拒绝请求,并显示 404:错误请求错误。
下表描述了三种不同的传递规则及其前端主机和路径:
| 路由规则 | 前端主机 | Path |
|---|---|---|
| A | foo.contoso.com | /* |
| B | foo.contoso.com | /users/* |
| C | www.fabrikam.com,foo.adventure-works.com | /*/图像/* |
下表显示了上表中传递规则的匹配结果:
| 传入前端主机 | 匹配的路由规则 |
|---|---|
| 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: 错误的请求 |
路径匹配
Azure Front Door确定特定的前端主机并筛选可能的路由规则后,它会根据请求路径选择路由规则。 该服务使用以下逻辑:
- 检查是否存在与请求路径精确匹配的传递规则。
- 如果找不到完全匹配项,请查找具有匹配的通配符路径的路由规则。
- 如果找不到匹配的路径,请以 404:错误请求错误拒绝请求。
Note
通配符 * 仅适用于在其之后没有任何其他字符的路径。 此外,通配符 * 前面必须有斜杠 /。 没有通配符的路径被视为精确匹配路径。 以斜杠 / 结尾的路径也是完全匹配的路径。 确保路径遵循这些规则以避免错误。
下表列出了传递规则及其前端主机和路径组合:
| 路由规则 | 前端主机 | Path |
|---|---|---|
| A | www.contoso.com |
/ |
| B | www.contoso.com |
/* |
| C | www.contoso.com |
/ab |
| D | www.contoso.com |
/abc |
| E | www.contoso.com |
/abc/ |
| F | www.contoso.com |
/abc/* |
| G | www.contoso.com |
/abc/def |
| H | www.contoso.com |
/path/ |
下表显示哪个传递规则与 Azure 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 |
Warning
如果对于精确匹配的前端主机,没有不带 catch-all 路由路径 (/*) 的路由规则,则将不会匹配到任何路由规则。
示例配置:
| Route | Host | Path |
|---|---|---|
| A | profile.contoso.com | /api/* |
匹配表:
| 传入请求 | 匹配的路由 |
|---|---|
| profile.domain.com/other | None. 错误 404: 错误的请求 |
路由决策
Azure Front Door 与传递规则匹配后,会决定如何处理请求。 如果缓存的响应可用,它将该响应发送回客户端。
如果为匹配的路由规则配置 了规则集 ,则会按顺序对其进行处理。 规则集可以替代路由,方法是将流量强制路由到特定的原点组。 如果没有定义规则集,则会将请求按原样转发到原点组。
后续步骤
- 创建 Azure Front Door。
- 了解 Azure Front Door 路由体系结构。