簡體   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