您目前查看的是 Apigee Edge 說明文件。
前往 Apigee X 說明文件。 info
在 Apigee Edge 中,路由器會處理所有傳入的 API 流量。也就是說,所有傳送至 Edge API Proxy 的 HTTP 和 HTTPS 要求,都會先由 Edge 路由器處理。因此,API Proxy 要求必須導向 Router 上的 IP 位址和開啟的通訊埠。
虛擬主機可讓您在單一伺服器或伺服器群組上託管多個網域名稱。 如果是 Edge,伺服器對應的是 Edge 路由器。在路由器上定義虛擬主機,即可處理多個網域的要求。
Edge 上的虛擬主機會定義通訊協定 (HTTP 或 HTTPS),以及路由器通訊埠和主機別名。主機別名通常是 DNS 網域名稱,會對應至路由器 IP 位址。
舉例來說,下圖顯示具有兩個虛擬主機定義的 Router:
在這個範例中,有兩個虛擬主機定義。一個處理網域 domainName1 的 HTTPS 要求,另一個處理 domainName2 的 HTTP 要求。
當要求傳送至 API Proxy 時,路由器會比較傳入要求的 Host 標頭和連接埠號碼,與所有虛擬主機定義的主機別名 清單,判斷由哪個虛擬主機處理要求。
虛擬主機的設定範例如下:
反模式
在機構的相同/不同環境中,或跨機構使用相同的主機別名和通訊埠編號定義多個虛擬主機,會在路由傳送 API 要求時造成混淆,並可能導致非預期的錯誤/行為。
我們將透過範例,說明使用相同主機別名設定多個虛擬主機的影響。
假設有兩個虛擬主機sandbox and secure 定義
,且主機別名相同,也就是 api.company.abc.com 環境:
完成上述設定後,可能會出現下列各節所述的兩種情況。
情境 1:API Proxy 設定為只接受對虛擬主機沙箱提出的要求
<ProxyEndpoint name="default">
...
<HTTPProxyConnection>
<BasePath>/demo</BasePath>
<VirtualHost>sandbox</VirtualHost>
</HTTPProxyConnection>
...
</ProxyEndpoint>在這個情境中,當用戶端應用程式使用主機別名 api.company.abc.com 呼叫特定 API Proxy 時,會間歇性收到 404 錯誤,並顯示以下訊息:
Unable to identify proxy for host: secure
這是因為 Router 會將要求傳送至 sandbox 和 secure 虛擬主機。要求路由至 sandbox 虛擬主機時,用戶端應用程式會收到成功回應。不過,當要求轉送至 secure 虛擬主機時,由於 API Proxy 未設定為接受 secure 虛擬主機的要求,用戶端應用程式會收到 404 錯誤。
情境 2:API Proxy 設定為接受虛擬主機 sandbox 和 secure 的要求
<ProxyEndpoint name="default">
...
<HTTPProxyConnection>
<BasePath>/demo</BasePath>
<VirtualHost>sandbox</VirtualHost>
<VirtualHost>secure</VirtualHost>
</HTTPProxyConnection>
...
</ProxyEndpoint>在這個情境中,當用戶端應用程式使用主機別名 api.company.abc.com 呼叫特定 API Proxy 時,會根據 Proxy 邏輯取得有效回應。
不過,這會導致 Analytics 儲存不正確的資料,因為 API 要求會同時傳送至兩個虛擬主機,但實際要求只應傳送至一個虛擬主機。
這也可能會影響記錄資訊,以及任何以虛擬主機為準的資料。
影響
- API 要求可能會轉送至 API Proxy 未設定接受要求的虛擬主機,因此發生 404 錯誤。
- API 要求會轉送至具有相同主機別名的所有虛擬主機,但要求僅適用於特定虛擬主機,因此 Analytics 資料不正確。
最佳做法
- 請勿在同一環境中,或機構的不同環境中,使用相同的主機別名和通訊埠編號定義多個虛擬主機。
如需定義多個虛擬主機,請在每個虛擬主機中使用不同的主機別名,如下所示:
