全部產品
Search
文件中心

API Gateway:使用自訂網域名調用API

更新時間:Jul 13, 2024

使用者使用API Gateway對外提供服務時,需要使用自己擁有的網域名稱開放自己的能力,本文主要描述如何將使用者自己的網域名稱綁定到API Gateway上,讓用戶端使用自己的網域名稱來調用其開放的API。

1. 概述

1.1 網域名稱與分組、API之間的關係

  • 使用者需要將自己擁有的網域名稱綁定到API Gateway的分組上,建立網域名稱與分組之間的映射關係。

  • API Gateway在接收到用戶端發出的HTTP請求時,根據HTTP請求中的網域名稱來定位到這個請求所屬的API分組,再通過HTTPMethod和PATH確定唯一的API。

API Gateway為每個分組預設提供了公網次層網域,如果用戶端直接調用API分組提供的公網次層網域,將會受到每天1000次調用的限制(海外Region及中國香港限制100次/天)。並且調用API Gateway提供的公網次層網域時,所有應答都會預設返回一個"Content-Disposition: attachment; filename=ApiResponseForInnerDomain"的頭。在您正式生產環境開放API時,需要為API分組綁定獨立網域名稱才可正常使用,不受此項限制。

1.2 網域名稱備案

在中國內地REGION綁定獨立網域名稱到分組上的前提是獨立網域名稱需要在阿里雲備案或者在阿里雲備案接入。海外REGION不需要網域名稱備案。

說明

綁定內網類型網域名稱不需要進行備案。

1.3 網域名稱所有權確認

網域名稱在API Gateway上沒有被同執行個體且同BasePath的分組綁定,並且不和其他已經綁定的泛網域名稱衝突,才能成功綁定。網域名稱的所有權驗證有兩種,客戶只需要滿足任一條件即可

  1. 使用者將網域名稱通過CNAME的方式解析到API Gateway分組上的次層網域上;

  2. 使用者在綁定的網域名稱上增加一條記錄類型為TXT的解析,記錄名稱為”分組ID.網域名稱”,記錄值為”apigateway-domain-verfication=公網分組次層網域“,下面舉個例子:

一個分組,ID為b7eb2f79e64f4431b08bbb948ed2567e,次層網域為b7eb2f79e64f4431b08bbb948ed2567e-cn-hangzhou.alicloudapi.com,綁定的網域名稱為單網域名稱youdomain.com或者泛網域名稱*.yourdomain,使用者需要增加一條網域名稱記錄,類型為TXT,主機記錄(RR)為b7eb2f79e64f4431b08bbb948ed2567e.yourdomain.com,記錄值為apigateway-domain-verfication=b7eb2f79e64f4431b08bbb948ed2567e-cn-hangzhou.alicloudapi.com

重要
  • 綁定內網類型網域名稱將不進行網域名稱所有權確認。

  • 如果不將網域名稱通過CNAME綁定到API Gateway,用戶端通過網域名稱請求時,無法請求到API Gateway。

  • 不同的分組綁定同一網域名稱時需注意:

    • 分組在同一執行個體時,BasePath必須是不同的,BasePath長度最大為300位元組。

    • 分組在不同的執行個體時,用戶端請求API需要自己配置DNS來指定請求的執行個體。

2.單網域名稱綁定

將使用者自己的單網域名稱綁定到API分組需要以下兩個步驟:

  1. 網域名稱解析:將網域名稱通過CNAME方式或者TXT解析方式解析到API Gateway分組上提供的次層網域;

  2. 網域名稱綁定:在API Gateway控制台的分組詳情頁面將網域名稱綁定到對應的分組上。

2.1 網域名稱解析

2.1.1 公網網域名稱解析

1. 在API Gateway分組詳情頁面找到這個分組對應的API Gateway提供的公網次層網域。

2. 登入Alibaba Cloud DNS控制台, 在左側欄單擊網域名稱解析,找到要解析的網域名稱,單擊網域名稱上的連結進入網域名稱的管理頁面。

3. 增加一條需要綁定到API Gateway的網域名稱的子記錄,記錄類型選擇CNAME ,主機記錄填寫網域名稱的首碼,記錄值填寫剛才第一步擷取到的公網次層網域,單擊確定就完成了。

2.1.2 內網網域名稱解析

  1. 在API Gateway分組詳情頁面找到這個分組對應的API Gateway提供的內網VPC網域名稱。

  2. 登入PrivateZone控制台,單擊左側欄的內網DNS解析 (PrivateZone),進入內網DNS解析 (PrivateZone)頁面,單擊添加網域名稱(Zone)添加內建權威網域名稱 (Zone)對話方塊中,輸入內建權威網域名稱 (Zone)名稱。

說明

此處的內建權威網域名稱 (Zone)填寫API Gateway分組所綁定的自訂的網域名稱(私人網域名稱),即您想要在VPC環境內專門為其設定PrivateZone解析記錄的網域名稱名稱。

添加zone

3. 單擊Zone名稱,可以進入解析記錄控制台,為該私人網域名稱添加CNAME解析記錄。記錄類型選擇CNAME ,主機記錄填寫網域名稱首碼,記錄值填寫步驟1 擷取到的內網VPC網域名稱,單擊確定。如圖:

image

4. 前往內網DNS解析 (PrivateZone) 頁面。找到剛添加的Zone,單擊其操作列下的生效範圍設定。在 網域名稱設定頁中,選擇阿里雲VPC內網。單擊確認,完成關聯。

d960133f0be52987e3ca97684a48d04c

說明

Zone關聯VPC後,在被關聯VPC內的ECS上,您的Zone(私人網域名稱)將按照PrivateZone解析記錄被解析,其公網解析記錄則會被覆蓋。注意:VPC環境外,該Zone的公網解析記錄不受影響。通過為Zone添加PrivateZone解析記錄,可以防止記錄為空白的Zone將需要使用的公網解析覆蓋掉,造成異常。更多詳情可參考開通PrivateZone文檔。

2.2 綁定網域名稱的流程

1. 進入API Gateway控制台,單擊左邊菜單的分組管理,進入分組列表頁面,然後選擇要綁定網域名稱的分組,進入分組詳情頁面,在頁面右下方看到綁定網域名稱的按鈕,單擊按鈕。

2. 進入網域名稱綁定頁面,填寫剛才做完解析的網域名稱,單擊確定。

  • 網域名稱:填寫要綁定的網域名稱。

  • 環境:指的是網域名稱綁定的環境,分別如下:

    • 指定為測試環境(TEST) :僅支援調用測試環境API。

    • 指定為預發環境(PRE ):僅支援調用預發環境API。

    • 指定為線上環境(RELEASE):僅支援調用線上環境API。

    • 預設(使用X-Ca-Stage確定環境):以上三種環境均可調用,調用時在請求的Header添加X-Ca-Stage參數指定調用的環境。

  • 網路類型:公網類型僅支援通過公網調用API。內網類型僅支援通過內網調用API。

說明

  • 內網類型網域名稱不進行網域名稱所有權校正,若與執行個體內其他分組綁定網域名稱衝突,將綁定失敗。

  • 網域名稱綁定成功後,不支援修改網路類型,若配置有誤,可以刪除網域名稱重新綁定。

2.3 網域名稱綁定常見問題

網域名稱綁定失敗,會有以下幾種情況(附處理辦法):

  • 要綁定的網域名稱已經在API Gateway被目前使用者綁定到了當前執行個體的其他分組上,或者和目前使用者已經綁定的其他網域名稱有範圍衝突(指泛網域名稱和單網域名稱之間存在的覆蓋關係),此時使用者需要從原來的分組上解除綁定該自訂網域名,才能重新在當前分組上綁定該網域名稱;

  • 要綁定的網域名稱已經在API Gateway被其他使用者綁定到了該使用者名稱下的分組上,或者和目前使用者已經綁定的其他網域名稱有範圍衝突(指泛網域名稱和單網域名稱之間存在的覆蓋關係),此時使用者必須通過本文說的1.3中的辦法證明此自訂網域名的所有權才能成功綁定。

2.4 調用驗證

綁定成功後,我們就可以隨意使用綁定的網域名稱來訪問這個分組下的API了,假如您有一個API,可以通過簡單的curl來訪問:

curl http://yourdomain.com/apipath -i
HTTP/1.1 200 OK
Date: Mon, 23 Mar 2020 08:40:01 GMT
Connection: keep-alive
Keep-Alive: timeout=25
Server: Jetty(7.2.2.v20101205)
X-Ca-Request-Id: E2B8CBAB-D6EF-4576-838F-44DDC1A6B20D
重要

若綁定的是內網網域名稱,需在您已關聯的VPC內進行測試。

3.泛網域名稱綁定

API Gateway目前已經支援了泛網域名稱綁定,使用者可以將泛網域名稱解析到API Gateway的公網次層網域,之後在控制台上將對應的泛網域名稱綁定至API分組,就可以通過泛網域名稱來調用API Gateway上託管的對應分組下的所有API。

先介紹一下泛網域名稱綁定的功能,假如您是abc.com這個網域名稱的擁有者,您想將abc.com這個網域名稱的所有子網域名稱(比如1.abc.com,2.abc.com)都指向API Gateway對外提供服務,現在可以通過兩個步驟實現這個能力:

  1. 在您的網域名稱解析管理平台將*.abc.com通過CNAME的方式解析到API Gateway分組的公網次層網域上;

  2. 在API Gateway控制台的分組頁面上,將*.abc.com綁定到對應的分組上。

  3. 一旦綁定成功後,用戶端就可以通過abc.com這個網域名稱的所有子網域名稱(比如1.abc.com,2.abc.com)來訪問所綁定的分組下所有API了,比如對應分組下有個API可以通過Get方法匿名訪問,那麼在綁定了*.abc.com這個泛網域名稱之後,就可以通過1.abc.com,2.abc.com等網域名稱同時來訪問了:

重要

僅VPC執行個體支援泛網域名稱能力。

3.1 綁定泛網域名稱的流程

泛網域名稱的綁定和本文第二章描述的單網域名稱版綁定的流程是大體一致的:

  1. 綁定泛網域名稱的時候必須要驗證網域名稱所有權,具體驗證方法參見1.3節的描述;

  2. 泛網域名稱綁定成功之後,必須在分組詳情版面設定對應的泛網域名稱模板,泛網域名稱的調用才會生效:

泛網域名稱模板主要是為了佈建網域名參數所用,也就是泛網域名稱中的可變欄位實際可以作為一個參數傳給後端服務的。

4. 設定分組預設網域名稱

API Gateway允許使用者上傳網域名稱對應的HTTPS認證,並對外提供安全層級更高的HTTPS調用能力。在分組下綁定了有多個網域名稱時,並且多個網域名稱同時支援HTTPS調用時,需要設定預設網域名稱,才能在接收到不支援SNI用戶端發送的SSL握手請求時返回預設網域名稱認證,否則API Gateway會隨機返回網域名稱認證。設定分組預設網域名稱僅對專享執行個體生效,共用執行個體預設不支援預設認證,不支援SNI的低版本用戶端進行HTTPS訪問時可能會產生認證混淆的問題。

在分組詳情頁面的配置該分組的預設網域名稱:

重要

專享執行個體上如果綁定了多個分組,只能載入第一個分組的預設網域名稱,其他設定無效。