繁体   English   中英

URL 在 Azure Front Door (Preview) Standard/Premium 中重写

[英]URL Rewrite in Azure Front Door (Preview) Standard/Premium

我们有 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 规则如下:

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

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

问题分析

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

如果在端点管理器中路由被配置为匹配子路径,例如/foo/* ,以路由到特定源,则启用的 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,因此它本身已经是一个 UrlRewrite。 尽管如此,通过 Azure 门户 UI 不允许仅设置/作为路径,但通过az afd route update CLI 可以并且有效:

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

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

这里不需要额外的规则。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM