【Azure API 管理】Azure APIM服務集成在內部虛擬網路後,在內部環境中打開APIM門戶使用APIs中的TEST功能失敗
- 2022 年 11 月 11 日
- 筆記
- 【Azure API 管理】, APIM, APIM內網, Could not complete the request., https://apimanagement-cors-proxy-mc.azure-api.cn, Test 功能失敗
問題描述
使用微軟API管理服務(Azure API Management),簡稱APIM。 因為公司策略要求只能內部網路訪問,所以啟用了VNET集成。集成方式見: (在內部模式下使用 Azure API 管理連接到虛擬網路://docs.azure.cn/zh-cn/api-management/api-management-using-with-internal-vnet?tabs=stv1)
當APIM配置好後,直接通過CURL命令訪問APIM的網關介面(如:curl //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功能是把請求先發送到一個代理伺服器( //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 管理連接到虛擬網路://docs.azure.cn/zh-cn/api-management/api-management-using-with-internal-vnet?tabs=stv1