【Azure API 管理】Azure APIM服務整合在內部虛擬網路後,在內部環境中開啟APIM門戶使用APIs中的TEST功能失敗

2022-11-12 06:00:48

問題描述

使用微軟API管理服務(Azure API Management),簡稱APIM。 因為公司策略要求只能內部網路存取,所以啟用了VNET整合。整合方式見: (在內部模式下使用 Azure API 管理連線到虛擬網路:https://docs.azure.cn/zh-cn/api-management/api-management-using-with-internal-vnet?tabs=stv1)

 

當APIM設定好後,直接通過CURL命令存取APIM的閘道器介面(如:curl https://bei3apim.azure-api.cn/httpbin/get -v ),請求響應成功。

但是,直接在門戶上存取時,為什麼一直都報錯 「Could not complete the request. Please try again later.」

問題分析

首先,請求通過APIM 閘道器已經能成功轉發請求到後端伺服器,並且返回狀態為200。獲得正確的返回結果。 

然後,這個問題,只發生在APIM門戶的 Test 頁面,並且當點選「Test」 按鈕後,馬上就觸發了API 管理提示的錯誤。

所以,判斷這個問題,就發生在APIM門戶頁面端,是JS的一些執行報錯。所以可以通過瀏覽器開發模式(F12)檢視,Console中的輸出,檢測JS執行的錯誤訊息。

 

謎底揭曉:因為APIM的Test功能是把請求先傳送到一個代理伺服器( https://apimanagement-cors-proxy-mc.azure-api.cn/ )上執行,而在內網中,這個代理伺服器URL無法被解析。

解決方法:在虛擬網路的DNS伺服器中,加上對域名(apimanagement-cors-proxy-mc.azure-api.cn)的解析。或者直接在當前的VM中修改windows host檔案(C:\Windows\System32\drivers\etc)

 

解題步驟

1) 在公網中,通過 nslookup apimanagement-cors-proxy-mc.azure-api.cn 解析出它的IP地址

 

2) 進入VM 的Host檔案,新增 IP 域名記錄

 3) 重新整理APIM Test頁面,再次點選Test Send 按鈕,請求傳送成功!

 

 

[END]

 

參考資料

在內部模式下使用 Azure API 管理連線到虛擬網路:https://docs.azure.cn/zh-cn/api-management/api-management-using-with-internal-vnet?tabs=stv1