【问题标题】:URL Rewrite in Azure Front Door (Preview) Standard/PremiumAzure Front Door(预览版)标准/高级版中的 URL 重写
【发布时间】:2021-07-28 17:27:46
【问题描述】:

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

myfd.z01.azurefd.net/foo -> foo.azurewebsites.net
myfd.z01.azurefd.net/bar -> bar.azurewebsites.net

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

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

myfd.z01.azurefd.net/foo/abc -> foo.azurewebsites.net/foo/abc
myfd.z01.azurefd.net/bar/def -> bar.azurewebsites.net/bar/def

我们想要的是:

myfd.z01.azurefd.net/foo/abc -> foo.azurewebsites.net/abc
myfd.z01.azurefd.net/bar/def -> bar.azurewebsites.net/def

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

Setting Value
Action URL rewrite
Source pattern /foo/
Destination /
Preserve unmatched path Yes

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

【问题讨论】:

  • 我的回答对你有帮助吗?如果没有,对我来说什么不起作用会很有趣,所以我可以更新我的答案。

标签: azure azure-front-door


【解决方案1】:

问题分析

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

如果在 Endpoint Manager 中配置路由以匹配子路径,例如/foo/*,要路由到特定的 Origin,启用的 UrlRewrite 规则仅适用于 /foo 之后的路径。例如

Route:
  Pattern to match: /foo/*
  OriginGroup: Foo
Rule: UrlRewrite
  Source pattern "/"
  Destination "/bar/"
  Preserve unmatched path: true

将导致从例如重写/foo/baz/foo/bar/baz 因此不适用于给定的问题。但是,有两种选择可以达到预期的效果。

解决方案

方式 1:在 Route 配置中使用 Origin 路径 而不是 Rule

Origin 路径 覆盖了 Pattern to match,因此它本身已经是一个 UrlRewrite。尽管如此,通过 Azure 门户 UI 不允许仅将 / 设置为路径,但通过 az afd route update CLI 可以且有效:

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

这里不需要额外的规则。

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

只配置一个路由匹配所有请求/* 并提供默认源。对这条路线应用了一个规则集,其中包含每个来源的 Origin group overwerite 和 * Url rewrite* 规则:

【讨论】:

    【解决方案2】:

    您不需要为此使用重写,只需使用带有路由规则的简单转发来匹配您的模式并转发到相应的后端池

    【讨论】:

      猜你喜欢
      • 2021-09-18
      • 1970-01-01
      • 2019-05-12
      • 2022-11-03
      • 1970-01-01
      • 2019-11-11
      • 2020-07-14
      • 1970-01-01
      • 2020-10-01
      相关资源
      最近更新 更多