使用API Gateway對外提供服務時,您可以使用自己擁有的網域名稱來開放對外提供服務的能力,本文主要介紹如何將自己的網域名稱綁定到API Gateway上,讓用戶端使用網域名稱來調用其開放的API。
概述
網域名稱與分組、API之間的關係
使用者需要將自己擁有的網域名稱綁定到API Gateway的分組上,建立網域名稱與分組之間的映射關係。
API Gateway在接收到用戶端發出的HTTP請求時,根據HTTP請求中的網域名稱來定位到這個請求所屬的API分組,再通過HTTP方法和路徑確定唯一的API。
API Gateway為每個分組預設提供了公網次層網域,如果用戶端直接調用API分組提供的公網次層網域,將會受到每天1000次調用的限制(海外Region及中國香港限制100次/天)。並且調用API Gateway提供的公網次層網域時,所有應答都會預設返回一個"Content-Disposition: attachment; filename=ApiResponseForInnerDomain"的頭。在您正式生產環境開放API時,需要為API分組綁定獨立網域名稱才可正常使用,不受此項限制。
網域名稱備案
在中國內地Region綁定獨立網域名稱到分組上的前提是獨立網域名稱需要在阿里雲備案或者在阿里雲備案接入,海外Region不需要網域名稱備案。
綁定內網類型網域名稱不需要進行備案。
網域名稱所有權確認
網域名稱在API Gateway上沒有被執行個體且同BasePath的分組綁定,並且不和其他已經綁定的泛網域名稱衝突,才能成功綁定。網域名稱的所有權驗證有兩種,您只需要滿足任一條件即可:
使用者將網域名稱通過CNAME的方式解析到API Gateway分組上的次層網域上。
使用者在綁定的網域名稱上增加一條記錄類型為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來指定請求的執行個體。
方案概覽
將自己的公網/內網網域名稱綁定到API Gateway上,可以通過單網域名稱綁定或泛網域名稱綁定方式來實現,主要分為以下步驟:
網域名稱解析:將公網/內網網域名稱通過CNAME方式或者TXT解析方式解析到API Gateway分組上提供的次層網域。
網域名稱綁定:在API Gateway控制台的分組詳情頁面將網域名稱綁定到對應的分組上。
(可選)設定分組預設網域名稱:當分組下綁定了多個網域名稱並且多個網域名稱同時支援HTTPS調用時,您需要設定預設網域名稱。
單網域名稱綁定
網域名稱解析
公網網域名稱解析
登入API Gateway控制台,在左側導覽列選擇API管理 > 分組管理並在頁面選擇地區。
在分組列表頁面,單擊目標分組,進入分組詳情頁面,在基本資料處找到這個分組對應的API Gateway提供的公網次層網域。
登入Alibaba Cloud DNS控制台,在左側導覽列選擇公網DNS解析 > 權威網域名稱解析,在權威網域名稱解析頁面選擇權威網域名稱欄。單擊要解析的網域名稱,進入解析設定欄。
在解析設定欄,單擊添加記錄,在添加記錄彈框中選擇記錄類型為CNAME,主機記錄填寫網域名稱的首碼,記錄值填寫擷取到的公網次層網域,單擊確定即可完成。
內網網域名稱解析
登入API Gateway控制台,在左側導覽列選擇API管理 > 分組管理並在頁面選擇地區。
在分組列表頁面,單擊目標分組,進入分組詳情頁面,在基本資料處找到這個分組對應的API Gateway提供的內網VPC網域名稱。
登入雲解析 DNS控制台,在左側導覽列選擇內網DNS解析 (PrivateZone) ,在內網DNS解析 (PrivateZone)頁面,選擇頁面右上方管理配置模式,在使用者網域名稱欄單擊添加網域名稱(Zone)。
在添加內建權威網域名稱 (Zone)彈框中,輸入內建權威網域名稱 (Zone)名稱和選擇阿里雲VPC內網,單擊確定。
說明此處的內建權威網域名稱 (Zone)填寫API Gateway分組所要綁定的自訂的網域名稱(私人網域名稱),即您想要在VPC環境內專門為其設定內網DNS解析 (PrivateZone)的網域名稱名稱。
單擊添加的內建權威網域名稱 (Zone)名稱,進入解析記錄頁面,單擊添加記錄,為該私人網域名稱添加CNAME解析記錄,在添加記錄彈框中記錄類型選擇CNAME,主機記錄填寫網域名稱首碼,記錄值填寫擷取到的內網VPC網域名稱,單擊確定。
添加的內建權威網域名稱 (Zone)關聯VPC後,在被關聯VPC內的ECS上,您的私人網域名稱將按照內網DNS解析 (PrivateZone)中的解析記錄來解析,其公網解析記錄則會被覆蓋。
VPC環境外,該內建權威網域名稱(Zone)的公網解析記錄不受影響,通過為內建權威網域名稱(Zone)添加內網DNS解析(PrivateZone)中的解析記錄,可以防止記錄為空白的內建權威網域名稱(Zone)將需要使用的公網解析給覆蓋掉,造成異常。更多詳情可參考開通PrivateZone文檔。
網域名稱綁定
登入API Gateway控制台,在左側導覽列選擇API管理 > 分組管理並在頁面選擇地區。
在分組列表頁面,單擊需要綁定網域名稱的分組,進入分組詳情頁面,在頁面獨立網域名稱處單擊綁定網域名稱按鈕。
在網域名稱綁定彈框中,配置參數如下並單擊確定。
設定項目
描述
網域名稱
填寫要綁定的網域名稱。
環境
指的是網域名稱綁定的環境,分別如下:
指定為測試環境(TEST) :僅支援調用測試環境API。
指定為預發環境(PRE ):僅支援調用預發環境API。
指定為線上環境(RELEASE):僅支援調用線上環境API。
預設(使用X-Ca-Stage確定環境):以上三種環境均可調用,調用時在請求的Header添加X-Ca-Stage參數指定調用的環境。
網路類型
公網類型僅支援通過公網調用API。內網類型僅支援通過內網調用API。
內網類型網域名稱不進行網域名稱所有權校正,若與執行個體內其他分組綁定網域名稱衝突,將綁定失敗。
網域名稱綁定成功後,不支援修改網路類型,若配置有誤,可以刪除網域名稱重新綁定。
網域名稱綁定常見問題
網域名稱綁定失敗,需要怎樣處理?
要綁定的網域名稱已經在API Gateway被目前使用者綁定到了當前執行個體的其他分組上,或者和目前使用者已經綁定的其他網域名稱有範圍衝突(指泛網域名稱和單網域名稱之間存在的覆蓋關係),此時使用者需要從原來的分組上解除綁定該自訂網域名,才能重新在當前分組上綁定該網域名稱。
要綁定的網域名稱已經在API Gateway被其他使用者綁定到了該使用者名稱下的分組上,或者和目前使用者已經綁定的其他網域名稱有範圍衝突(指泛網域名稱和單網域名稱之間存在的覆蓋關係),此時使用者必須通過網域名稱所有權確認中提到的方法證明此自訂網域名的所有權才能成功綁定。
調用驗證
綁定成功後,我們就可以隨意使用綁定的網域名稱來訪問這個分組下的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內進行測試。
泛網域名稱綁定
API Gateway目前已經支援了泛網域名稱綁定,您可以將泛網域名稱解析到API Gateway的公網次層網域,之後在控制台上將對應的泛網域名稱綁定至API分組,就可以通過泛網域名稱來調用API Gateway上託管的對應分組下的所有API。
泛網域名稱綁定實現
泛網域名稱的綁定和單網域名稱綁定的流程是大體一致的,假如您是abc.com這個網域名稱的擁有者,您想將abc.com這個網域名稱的所有子網域名稱(比如1.abc.com,2.abc.com)都指向API Gateway對外提供服務,現在可以通過以下步驟實現這個能力:
在您的網域名稱解析管理平台將*.abc.com通過CNAME的方式解析到API Gateway分組的公網次層網域上。
在API Gateway控制台的分組詳情頁面上,將*.abc.com綁定到對應的分組上。
僅VPC執行個體支援泛網域名稱能力。一旦綁定成功後,用戶端就可以通過abc.com這個網域名稱的所有子網域名稱(比如1.abc.com,2.abc.com)來訪問所綁定的分組下所有API了,比如對應分組下有個API可以通過Get方法匿名訪問,那麼在綁定了*.abc.com這個泛網域名稱之後,就可以通過1.abc.com,2.abc.com等網域名稱同時來訪問了。
泛網域名稱綁定注意事項
綁定泛網域名稱的時候必須要驗證網域名稱所有權,具體驗證方法參見網域名稱所有權的描述。
泛網域名稱綁定成功之後,必須在分組詳情版面設定對應的泛網域名稱模板,泛網域名稱的調用才會生效。
泛網域名稱模板主要是為了佈建網域名參數所用,也就是泛網域名稱中的可變欄位實際可以作為一個參數傳給後端服務的。
設定分組預設網域名稱
API Gateway允許使用者上傳網域名稱對應的HTTPS認證,並對外提供安全層級更高的HTTPS調用能力。在分組下綁定了多個網域名稱時,並且多個網域名稱同時支援HTTPS調用時,需要設定預設網域名稱,才能在接收到不支援SNI用戶端發送的SSL握手請求時返回預設網域名稱認證,否則API Gateway會隨機返回網域名稱認證。設定分組預設網域名稱僅對專享執行個體生效,共用執行個體/Serverless執行個體預設不支援預設認證,不支援SNI的低版本用戶端進行HTTPS訪問時可能會產生認證混淆的問題。
專享執行個體上如果綁定了多個分組,只能載入第一個分組的預設網域名稱,其他設定無效。