如果您希望在生產環境中通過固定網域名稱訪問Function Compute中建立的應用或函數,或者解決訪問HTTP觸發器時強制下載行為,可以參見本文為應用或函數綁定自訂網域名。
典型應用情境
在以下樣本情境中,您需要為函數或應用綁定自訂網域名。
您建立了一個Web應用,並將該應用遷移到Function Compute,希望通過固定的網域名稱訪問該應用。
您通過Function Compute控制台搭建了一個Web應用,希望通過一個網域名稱的不同路徑觸發不同的函數處理。
您通過Function Compute的應用中心建立了應用,例如Stable Diffusion應用,希望通過固定的網域名稱訪問該應用。
使用限制
為函數綁定自訂網域名時,必須選擇函數所在的地區。
配置的自訂網域名區分大小寫,請按實際備案的網域名稱填寫。
支援配置泛網域名稱和標準網域名稱,不支援配置中文網域名稱。
通過自訂網域名訪問應用的實現原理
前提條件
為應用綁定自訂網域名,就是為應用建立的函數綁定自訂網域名,您可以在應用的環境詳情頁面的資源資訊地區找到建立應用時自動建立的函數資源,單擊函數名稱即可跳轉到函數頁面。
準備一個已在阿里雲接入備案的自訂網域名。
根據網域名稱所屬的服務提供者和所屬帳號,參考以下對應的操作指導進行網域名稱備案。
當前阿里雲帳號註冊的網域名稱
登入阿里雲ICP代備案管理系統備案自訂網域名。具體操作,請參見ICP備案流程。
其他阿里雲帳號註冊的網域名稱
建議您使用註冊網域名稱的阿里雲帳號完成網域名稱備案。登入阿里雲ICP代備案管理系統備案自訂網域名。具體操作,請參見ICP備案流程。
非阿里雲帳號註冊的網域名稱
如果您的網域名稱不是在阿里雲備案,需要在阿里雲接入備案。登入阿里雲ICP代備案管理系統備案自訂網域名。
說明中國香港和海外地區的函數綁定的自訂網域名不需要備案。
如果您不確定網域名稱所屬服務提供者,您可以在網域名稱資訊查詢(WHOIS)頁面進行查詢。
如果您不確定網域名稱是否屬於當前阿里雲帳號,您可以在Alibaba Cloud DNS控制台進行查詢。
1.開始添加自訂網域名
登入Function Compute控制台,在左側導覽列,選擇 ,選擇地區,然後單擊添加自訂網域名。
重要為函數綁定自訂網域名時,必須選擇與函數相同的地區。
填寫已在阿里雲備案或接入備案的自訂網域名。支援單網域名稱(例如
www.aliyun.com
)或萬用字元網域名稱(例如*.aliyun.com
)。在添加自訂網域名面板,擷取公網 CNAME或內網 CNAME,用於下一步佈建網域名解析。關於CNAME的格式,說明如下:
CNAME類型
格式
樣本
公網CNAME
<account_id>.<region_id>.fc.aliyuncs.com
您的阿里雲帳號(主帳號)ID為1413397765****,函數或應用所在地區為華東1(杭州)。
公網CNAME為
1413397765****.cn-hangzhou.fc.aliyuncs.com
。內網CNAME
<account_id>.<region_id>-internal.fc.aliyuncs.com
內網CNAME為
1413397765****.cn-hangzhou-internal.fc.aliyuncs.com
。
2. 佈建網域名解析
登入雲解析 DNS控制台,將已備案的網域名稱解析到Function Compute的CNAME。具體操作,請參見佈建網域名解析。
如圖所示,佈建網域名解析時,記錄值需要填寫為上一步擷取的Function Compute的CNAME。如果您希望通過公網訪問該網域名稱,需要將記錄值配置為Function Compute公網CNAME。
3. 繼續完成自訂網域名的添加
返回至步驟1.開始添加自訂網域名的添加自訂網域名面板,根據需求,配置以下可選項後,單擊建立完成自訂網域名的添加。
3.1(可選)路由配置
如果您的應用程式套件含多個函數,可以設定路徑與函數的對應關係,不同的請求路徑可以觸發不同的函數執行。更多資訊,請參見路由匹配規則。
如果需要將匹配指定路徑的請求的URI根據規則進行重寫,請參見配置重寫策略(公測中)。
3.2(可選)HTTPS設定
如果需要啟用HTTPS協議訪問自訂網域名的功能,請參見以下步驟配置。
配置項 | 操作 |
HTTPS | 啟用後支援使用HTTP或HTTPS協議訪問該自訂網域名,如果不啟用,則僅支援使用HTTP協議訪問該自訂網域名。 說明 您還可以選中強制HTTPS複選框,此時僅支援使用HTTPS協議訪問該自訂網域名,Function Compute會將所有使用HTTP協議訪問該自訂網域名的請求重新導向至HTTPS協議。 |
認證類型 | 選擇要上傳的認證類型。取值說明如下:
說明 上傳的認證的大小不能超過20 KB,認證密鑰的大小不能超過4 KB。 |
TLS 協議版本 | 選擇函數使用的TLS協議版本。 說明 選擇以上TLS協議版本後,您還可以選中開啟支援 TLS1.3複選框,表示同時支援TLS 1.3協議。 |
加密套件 | 選擇TLS密碼編譯演算法套件,如果不配置,預設選擇全部加密套件。取值說明如下:
重要
|
3.3(可選)認證設定
無需認證:不需要對HTTP請求進行身分識別驗證,支援匿名訪問,任何人都可以發起HTTP請求調用您的函數。
簽名認證:需要對HTTP請求進行簽名認證,具體請參見為自訂網域名配置簽名認證。
JWT認證:需要對HTTP請求進行JWT認證,具體請參見為自訂網域名配置JWT認證鑒權。
3.4(可選)Web Application Firewall設定
啟用後支援對函數或者應用的業務流量進行惡意特徵識別,對流量進行清洗和過濾後,將正常和安全的流量回源至後端函數,避免函數被惡意侵入。更多資訊,請參見開啟Web Application Firewall。
3.6(可選)CDN設定
為Web應用綁定自訂網域名後,您可以將該自訂網域名作為來源站點網域名稱為其添加加速網域名稱,然後為加速網域名稱配置CNAME,即為網域名稱設定CDN加速功能。將部署在Function Compute的應用作為來源站點,將源內容發布到邊緣節點,使終端使用者能快速讀取所需內容,有效降低訪問時延,提高服務品質。
啟用CDN加速,如圖所示,填寫自訂的CDN 加速網域名稱,然後單擊建立完成加速網域名稱的添加。
重要CDN加速功能會消耗公網流量,需要收取流量費用。更多資訊,請參見計費概述。
自訂網域名和加速網域名稱不能使用同一個網域名稱。為了不佔用更多網域名稱資源,可以將CDN加速網域名稱配置為您的自訂網域名的次層網域(即子網域名稱),例如,配置自訂網域名為
example.com
,配置CDN加速網域名稱為fast.example.com
。
單擊剛才配置的自訂網域名,在自訂網域名詳情頁面的CDN 加速配置地區,單擊操作列的CDN 組態管理跳轉到CDN控制台擷取CDN為加速網域名稱分配的CNAME。
如圖所示,CNAME的格式為
加速網域名稱.w.kunlun**.com
,例如fast.example.com.w.kunlunle.com
。登入雲解析 DNS控制台,找到您的自訂網域名,將加速網域名稱的DNS解析記錄指向分配的CNAME網域名稱,從而實現加速效果。具體操作,請參見佈建網域名解析。
如圖所示,主機記錄填寫為加速網域名稱即子網域名稱的第一層,本文樣本為
fast
,記錄值填寫為您上一步設定的加速網域名稱。
4. 驗證自訂網域名
4.1 驗證自訂網域名訪問效果
方法一:通過命令列
curl URL
測試。例如curl example.com/login
。方法二:通過瀏覽器測試。
在瀏覽器地址欄中輸入請求URL,然後按斷行符號鍵可以驗證是否調用了目標函數。
4.2(可選)驗證加速網域名稱訪問效果
在瀏覽器中使用您在步驟3.6(可選)CDN設定配置的CDN加速網域名稱訪問應用,然後開啟開發人員工具通過觀察返迴響應中X-Cache欄位傳回值來判斷加速網域名稱是否生效。
表示CDN緩衝策略實際效果的X-Cache欄位傳回值以MISS開頭,表明首次訪問未命中CDN節點緩衝,需要向來源站點請求資源。後續訪問命中CDN節點緩衝後,X-Cache欄位傳回值將以HIT開頭,表明來源站點的資源已緩衝到CDN節點。
首次訪問未命中 | 後續訪問命中 |
加密套件相關資訊
強加密和弱加密套件列表
TLS協議版本與加密套件對應關係
RFC與OpenSSL加密套件命名對照表
匹配規則
路由匹配規則
您需要在綁定自訂網域名過程中設定路徑和函數的對應關係,來自不同路徑的請求就可以觸發不同的函數執行。Function Compute支援精確匹配和模糊比對,具體規則如下:
精確匹配:請求的路徑和設定的路徑完全一致才可以觸發對應的函數。
假設,設定路徑為/a,對應函數為f1,對應的版本為1。那麼只有來自路徑/a的請求才能觸發版本1下的f1函數執行,來自路徑/a/的請求無法觸發版本1下的f1函數執行。
模糊比對:支援使用萬用字元(*)設定路徑,且萬用字元(*)只能放到路徑的最後。
假設,設定路徑為/login/*,對應函數為f2,對應版本為1。那麼路徑首碼為/login/(例如/login/a、/login/b/c/d)的請求都會觸發版本1下的f2函數執行。
若一個自訂網域名下配置了多個路由,則精確匹配的優先順序大於模糊比對的優先順序。
模糊比對時滿足最長首碼匹配原則。
假設,配置了/login/a/*和/login/*兩個路徑,自訂網域名為
example.com
,請求URL為example.com/login/a/b。此時,該請求URL滿足設定的路徑。但是根據最長首碼匹配原則,最終匹配的路徑應該是/login/a/*。
樣本
假設自訂網域名為example.com
,根據本文的操作步驟,設定了以下5條路由規則。
路由規則 | 路徑 | 函數名稱 | 版本 |
路由規則1 | / | f1 | 1 |
路由規則2 | /* | f2 | 2 |
路由規則3 | /login | f3 | 3 |
路由規則4 | /login/a | f4 | 4 |
路由規則5 | /login/* | f5 | 5 |
最終匹配結果如下。
請求URL | 匹配的函數名稱 | 匹配的版本 | 匹配的路徑 |
example.com | f1 | 1 | / |
example.com/user | f2 | 2 | /* |
example.com/login | f3 | 3 | /login |
example.com/login/a | f4 | 4 | /login/a |
example.com/login/a/b | f5 | 5 | /login/* |
example.com/login/b | f5 | 5 | /login/* |
網域名稱匹配規則
Function Compute會根據您請求中的網域名稱資訊匹配合適的網域名稱,並將請求轉寄給匹配到的網域名稱對應的函數。Function Compute支援網域名稱的精確匹配和模糊比對,具體規則如下。
精確匹配:請求的網域名稱與您建立的自訂網域名完全一致時,才能觸發該網域名稱對應的函數。
模糊比對:支援匹配萬用字元網域名稱(泛網域名稱),即請求的網域名稱與您建立的自訂網域名匹配就可以觸發該網域名稱對應的函數。萬用字元(*)最多隻能有一個,且只能放到網域名稱的最前面。
如果一個請求同時匹配了單網域名稱和萬用字元網域名稱,單網域名稱的優先順序大於萬用字元網域名稱的優先順序。
模糊比對時,萬用字元網域名稱只能匹配同級網域名稱。例如,現有網域名稱
*.aliyun.com
,可以匹配fc.aliyun.com
,但是不能匹配cn-hangzhou.fc.aliyun.com
。因為*.aliyun.com
和fc.aliyun.com
均為第三層網域名,而cn-hangzhou.fc.aliyun.com
為四級網域名稱。
樣本
假設現有自訂網域名fc.aliyun.com
、*.aliyun.com
和*.fc.aliyun.com
,不同網域名稱的請求匹配到的網域名稱如下所示。
請求網域名稱 | 匹配到的網域名稱 |
fc.aliyun.com | fc.aliyun.com |
fnf.aliyun.com | *.aliyun.com |
cn-hangzhou.fc.aliyun.com | *.fc.aliyun.com |
accountID.cn-hangzhou.fc.aliyun.com | 無匹配 |
常見問題
HTTP觸發器的公網訪問地址可以用於生產環境嗎?
配置了自訂網域名,訪問網域名稱時一直報錯502 Bad Gateway,怎麼處理?
配置自訂網域名時,使用中文網域名稱一直報錯,怎麼處理?
如何解決通過瀏覽器訪問網域名稱時會觸發強制下載的問題?
訪問加速網域名稱時出現301重新導向,如何處理?
在路由配置時無法選擇已建立的函數,怎麼辦?
通過路由配置的路徑無法觸發函數執行,怎麼處理?
問題診斷
在綁定自訂網域名過程中如果發生錯誤,服務端會返回錯誤資訊。下表列出了常見的錯誤碼,協助您快速定位問題。
錯誤碼 | HTTP狀態代碼 | 錯誤資訊 | 原因分析 |
InvalidICPLicense | 400 | domain name '%s' has not got ICP license, or the ICP license does not belong to Aliyun | 網域名稱未備案,或備案未接入阿里雲。 |
DomainNameNotResolved | 400 | domain name '%s' has not been resolved to your FC endpoint, the expected endpoint is '%s' | 網域名稱未設定CNAME到指定的Endpoint,可以通過dig命令或在網域名稱解析伺服器處查看確認。 |
DomainRouteNotFound | 404 | no route found in domain '%s' for path '%s' | 沒有為指定路徑設定對應觸發的函數。 |
TriggerNotFound | 404 | trigger 'http' does not exist in service '%s' and function '%s' | 自訂網域名觸發的函數未設定HTTP觸發器。 |
DomainNameNotFound | 404 | domain name '%s' does not exist | 擷取網域名稱資訊時,網域名稱不存在。 |
DomainNameAlreadyExists | 409 | domain name '%s' already exists | 建立網域名稱時,網域名稱已存在。 |
如果問題仍未能解決,請加入DingTalk使用者群(DingTalk群號:64970014484),聯絡Function Compute工程師及時溝通處理。