使用微軟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
當在複雜的環境中面臨問題,格物之道需:濁而靜之徐清,安以動之徐生。 雲中,恰是如此!