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