Azure Front Door(预览版)标准版/高级版中的 URL 重写

Soc*_*j07 6 azure azure-front-door

我们有 2 个应用程序服务:foo.azurewebsites.netbar.azurewebsites.net​​ 并为两个站点配置了源组。我们希望前门进行基于路径的路由:即:

myfd.z01.azurefd.net/foo -> foo.azurewebsites.net
myfd.z01.azurefd.net/bar -> bar.azurewebsites.net
Run Code Online (Sandbox Code Playgroud)

Patterns to match我们可以将其配置为分别在路由 as/foo/*和上使用/bar/*。这按预期工作。

接下来,我们要重写 URL,以便我们不会将初始值/foo/bar路径发送到 Web 应用程序。换句话说,当前设置会产生以下结果:

myfd.z01.azurefd.net/foo/abc -> foo.azurewebsites.net/foo/abc
myfd.z01.azurefd.net/bar/def -> bar.azurewebsites.net/bar/def
Run Code Online (Sandbox Code Playgroud)

我们想要的是:

myfd.z01.azurefd.net/foo/abc -> foo.azurewebsites.net/abc
myfd.z01.azurefd.net/bar/def -> bar.azurewebsites.net/def
Run Code Online (Sandbox Code Playgroud)

所以我们设置一个重写URL规则如下:

环境 价值
行动 网址重写
源模式 /foo/
目的地 /
保留不匹配的路径 Yes

然而,这似乎不起作用。在AzureDiagnostics日志中我们可以看到规则正在触发,但 URL 没有被重写 - 它仍然包含/foo/. 我们还缺少什么吗?

Pir*_*ehm 9

问题分析

我遇到了同样的问题,经过一些实验,我得出了 Azure 前门(预览)标准/高级当前状态的以下行为:

如果在端点管理器中将路由配置为匹配子路径,例如/foo/*,路由到特定源,则启用的 UrlRewrite 规则仅应用于以下路径/foo。例如

Route:
  Pattern to match: /foo/*
  OriginGroup: Foo
Rule: UrlRewrite
  Source pattern "/"
  Destination "/bar/"
  Preserve unmatched path: true
Run Code Online (Sandbox Code Playgroud)

将导致从eg 重写/foo/baz/foo/bar/baz,因此不适用于给定的问题。但是,有两种选择可以实现所需的结果。

解决方案

方式 1:在路由配置中使用Origin 路径而不是规则

Origin 路径会覆盖Pattern 以进行匹配,因此它本身已经是一个 UrlRewrite。尽管如此,通过 Azure 门户 UI 不允许仅设置/为路径,但通过az afd route updateCLI 可以并且有效:

2022 更新- 您现在还可以通过 Azure 门户将“/”设置为原始路径

Azure 门户路由配置的屏幕截图

这里不需要额外的规则。

方式 2:不要使用不同的路由,而是覆盖 Origin 组的规则

仅配置一个路由来匹配所有请求/*并为默认源提供服务。对此路由应用一个规则集,其中包含每个源的源组覆盖和 * Url 重写 * 规则: 在此输入图像描述