反模式:定義相同主機別名和通訊埠編號的多個虛擬主機

查看 Apigee Edge 說明文件。
前往 Apigee X說明文件
資訊

在 Apigee Edge 中,Router 會處理所有傳入的 API 流量。也就是所有 HTTP 和 HTTPS 向 Edge API Proxy 發出的要求會先由 Edge Router 處理。因此,API Proxy 要求 導向至 IP 位址和路由器上的開放通訊埠。

虛擬主機可讓您在單一伺服器或一組伺服器中代管多個網域名稱。 對於 Edge,伺服器會對應至 Edge Router。在路由器上定義虛擬主機後 處理對多個網域的要求

Edge 上的虛擬主機會定義通訊協定 (HTTP 或 HTTPS),以及路由器通訊埠和主機別名。 主機別名通常是對應至路由器的 IP 位址的 DNS 網域名稱。

例如,下圖顯示具有兩個虛擬主機定義的路由器:

這個範例有兩個虛擬主機定義。其中一個會處理 網域 domainName1 中,另一個會處理 domainName2 上的 HTTP 要求。

向 API Proxy 發出要求時,路由器會比對傳入連線的主機標頭和通訊埠號碼 要求加入由所有虛擬主機定義的主機別名 清單,以判斷 由虛擬主機處理要求

虛擬主機的設定範例如下:

vhost 設定範例

反模式

定義多個具有相同主機別名和通訊埠號碼的虛擬主機 (位於相同/不同) 組織或跨組織的環境可能會引發混淆 轉送 API 要求,並可能會導致非預期的錯誤/行為。

讓我們舉例來說明使用相同主機別名的多個虛擬主機會產生哪些影響。

假設有兩個虛擬主機定義的sandbox and secure 具有相同主機別名,例如環境中的 api.company.abc.com

別名相同的 vhost

使用上述設定時,可能會發生兩種情況,如下節所述。

情境 1:API Proxy 設定為僅接受傳送至其中一個虛擬伺服器的要求 主機沙箱

<ProxyEndpoint name="default">
  ...
  <HTTPProxyConnection>
    <BasePath>/demo</BasePath>
    <VirtualHost>sandbox</VirtualHost>
  </HTTPProxyConnection>
  ...
</ProxyEndpoint>

在這種情況下,用戶端應用程式使用 主機別名 api.company.abc.com 時,用戶端會間歇收到 404 錯誤,並傳送以下訊息:

Unable to identify proxy for host: secure 

這是因為路由器會將要求同時傳送至 sandboxsecure 虛擬主機當要求轉送至 sandbox 虛擬主機時,用戶端應用程式 會收到成功的回應不過,當要求轉送至 secure 虛擬主機時, API Proxy 未設定為接受要求,用戶端應用程式會收到 404 錯誤 secure 虛擬主機。

情境 2:API Proxy 設定為接受對虛擬主機沙箱與安全的要求

<ProxyEndpoint name="default">
  ...
  <HTTPProxyConnection>
    <BasePath>/demo</BasePath>
    <VirtualHost>sandbox</VirtualHost>
    <VirtualHost>secure</VirtualHost>
  </HTTPProxyConnection>
  ...
</ProxyEndpoint>

在這種情況下,用戶端應用程式使用 主機別名 api.company.abc.com 會根據 Proxy 邏輯取得有效回應。

但這會導致 API 要求轉送到 Analytics,導致系統將不正確的資料儲存在 Analytics 中 兩個虛擬主機,而實際要求則只會傳送至一個虛擬主機。

這也會影響記錄資訊,以及以虛擬主機為基礎的任何其他資料。

影響

  1. 404 錯誤:因為 API 要求可能會轉送至 API Proxy 可能無法到的虛擬主機 設定為接受要求
  2. Analytics 資料不正確,因為系統會將 API 要求轉送至具有 要求是針對特定虛擬主機發出要求時,主機別名。

最佳做法

  • 請勿在同一個環境中定義多個具有相同主機別名和通訊埠號碼的虛擬主機。 或是機構的不同環境
  • 如果您需要定義多個虛擬主機,請在每個主機 虛擬主機,如下所示:

    兩人

延伸閱讀