函數計算會為創建的HTTP函數提供默認訪問地址,通過瀏覽器訪問該地址時會觸發強制下載行為。如果您希望通過瀏覽器正常訪問函數或者希望通過固定域名訪問函數,您需要配置自定義域名。
典型應用場景
HTTP函數可以被看作為一個Web應用,該應用能處理HTTP請求,并將處理結果返回給調用端。在以下示例場景中,您需要為Web應用綁定自定義域名。
您創建了一個Web應用,并將該應用遷移到函數計算,希望可以通過固定的域名訪問該應用。
您通過函數計算控制臺搭建了一個Web應用,希望可以通過函數計算提供的默認地址
<account_id>.<region_id>.fc.aliyuncs.com/<version>/proxy/<serviceName>/<functionName>/[action?queries]
訪問該應用。在實際通過該地址訪問應用時會觸發強制下載行為,您需要更改Web應用訪問地址,但不影響用戶的使用。
前提條件
已創建HTTP函數。自定義域名發出的請求只能觸發HTTP函數執行。
使用限制
不支持配置中文域名。
配置的自定義域名區分大小寫,請按實際備案的域名填寫。
支持配置泛域名和標準域名。
域名最大長度為256個字符。每個層次的子域至少有一個字符且總長度不超過63個字符,可以是字母(大小寫敏感)、數字(0-9)或者連字符(-),但是域名的第一個字符不能是連字符(-)。域名的最后一部分(頂級域名)至少有兩個字符長,并且必須是字母。
操作步驟
配置自定義域名全流程
步驟一:備案域名
根據域名所屬的服務提供商和所屬賬號,參考對應的操作指導進行域名備案。
中國香港和海外區域的函數綁定的自定義域名不需要備案。
如果您不確定域名所屬服務提供商,您可以在域名信息查詢(WHOIS)頁面進行查詢。
如果您不確定域名是否屬于當前阿里云賬號,您可以在云解析DNS控制臺進行查詢。
當前阿里云賬號注冊的域名
登錄阿里云ICP代備案管理系統備案自定義域名。具體操作,請參見ICP備案流程。
其他阿里云賬號注冊的域名
建議您使用注冊域名的阿里云賬號完成域名備案。如果您需要使用當前阿里云賬號進行域名備案,則需要根據情況完成域名轉移至其他阿里云賬號或者域名持有者信息修改(過戶)。然后登錄阿里云ICP代備案管理系統備案自定義域名。具體操作,請參見ICP備案流程。
非阿里云賬號注冊的域名
如果主體和域名均已通過其他服務商成功備案,而您現需要將服務商變更為阿里云或將阿里云添加為該網站的新增服務商,需要在阿里云接入備案。登錄阿里云ICP代備案管理系統備案自定義域名。具體操作,請參見接入備案流程。
步驟二:配置域名解析
配置域名解析具體操作,請參見配置域名解析。
您需要將已備案的域名解析到函數計算對應地域的Endpoint上,即配置自定義域名的CNAME到函數計算Endpoint。在域名解析頁面,添加記錄信息,其中記錄類型為CNAME,記錄值為函數計算Endpoint。
函數計算Endpoint格式說明如下:
Endpoint類型 | 格式 | 示例 | |
公網Endpoint |
| 如果您的自定義域名為example.com,您的阿里云賬號(主賬號)ID為164901546557****,地域為華東2(上海)。 | 公網Endpoint為 |
內網Endpoint |
| 內網Endpoint為 |
如果您希望通過公網訪問該域名,需要將記錄值配置為函數計算公網Endpoint。
步驟三:添加自定義域名
- 登錄函數計算控制臺,在左側導航欄,選擇 。
- 在頂部菜單欄,選擇地域,然后在域名管理頁面,單擊添加自定義域名。
在添加自定義域名頁面,填寫相關配置項,然后單擊創建。
配置項
操作
域名
填寫已在阿里云備案或接入備案的自定義域名名稱。支持單域名(例如
www.aliyun.com
)或通配符域名(例如*.aliyun.com
)。HTTPS
根據需要啟用或禁用HTTPS協議訪問自定義域名的功能。取值如下:
啟用:開啟通過HTTPS協議訪問自定義域名的功能。表示支持使用HTTP或HTTPS協議訪問該自定義域名。
說明您還可以選中強制HTTPS復選框,此時僅支持使用HTTPS協議訪問該自定義域名,函數計算會將所有使用HTTP協議訪問該自定義域名的請求重定向至HTTPS協議。
禁用:關閉通過HTTPS協議訪問自定義域名功能。表示僅支持使用HTTP協議訪問該自定義域名,使用HTTPS協議將無法訪問該自定義域名。
證書類型
選擇要上傳的證書類型。當您啟用HTTPS協議訪問自定義域名的功能時,需設置此配置項。取值說明如下:
阿里云 SSL 證書:選擇您的阿里云SSL證書。如果證書名稱下拉列表為空,則說明您尚未購買阿里云SSL證書,您可以登錄SSL證書管理控制臺購買。具體步驟,請參見購買SSL證書。
手動上傳:手動輸入證書名稱,并填寫PEM 證書內容和PEM 證書密鑰。
說明上傳的證書的大小不能超過20 KB,證書密鑰的大小不能超過4 KB。
TLS 協議版本
選擇函數使用的TLS協議版本。
說明選擇以上TLS協議版本后,您還可以選中開啟支持TLS 1.3復選框,表示同時支持TLS 1.3協議。
加密套件
選擇TLS加密算法套件,如果不配置,默認選擇全部加密套件。取值說明如下:
全部加密套件,兼容性最高,安全性較低:選擇全部加密套件。函數計算支持的加密套件列表請參見強加密和弱加密套件列表。
協議版本的自定義加密套件,請謹慎選擇,避免影響業務:選擇部分支持的加密套件。下拉列表中顯示所有加密套件,您可以單擊加密套件右側的圖標,刪除安全性較弱的弱加密套件,保留您選擇的TLS協議版本支持的加密套件。
重要請謹慎選擇自定義加密套件,確保服務端和客戶端套件的正確匹配。
關于TLS協議版本和其支持的加密套件,請參見TLS協議版本與加密套件對應關系。
函數計算對加密套件的命名使用RFC命名規范。同一個加密套件,使用不同命名規范的命名會存在差異。關于RFC和OpenSSL命名的加密套件名稱差異點,請參見RFC與OpenSSL加密套件命名對照表。
CDN 加速
根據需要啟用或禁用CDN加速開關。為域名設置CDN加速功能后,終端用戶將通過CDN加速域名快速讀取所需內容。
啟用:開啟CDN加速功能。需要填寫自定義的CDN 加速域名。然后登錄CDN控制臺為加速域名配置CNAME。更多信息,請參見步驟四:開啟CDN加速(可選)。
禁用:關閉CDN加速功能。
Web 應用防火墻
根據需要啟用或者禁用Web應用防火墻開關。為自定義域名開啟Web應用防火墻安全防護之后,Web應用防火墻將對該域名上的業務流量進行惡意特征識別和防護,避免函數被惡意侵入。具體信息,請參見開啟Web應用防火墻。
啟用:開啟Web應用防火墻安全防護功能。
禁用:關閉Web應用防火墻安全防護功能。
路由配置
設置路徑與函數的對應關系,即不同的請求路徑可以觸發不同的函數執行。您需要設置以下字段:
路徑:可以觸發指定服務下的指定函數的請求路徑。
服務名稱:來自指定路徑的請求觸發的對應服務。
函數名稱:來自指定路徑的請求觸發的指定服務下的對應函數。
版本或別名:來自指定路徑的請求觸發的指定服務下的對應函數版本或別名。
重寫策略:將匹配指定路徑的請求的URI根據規則進行重寫。具體操作,請參見操作步驟。
您可以根據需要添加多個路由。更多路由信息,請參見路由匹配規則。
配置完成后,您可以根據需求編輯或刪除配置的自定義域名。
重要刪除自定義域名會導致通過該域名接入的請求全部失敗,請謹慎操作。
步驟四:開啟CDN加速(可選)
為Web應用綁定自定義域名后,您可以將該自定義域名作為源站域名為其添加加速域名,然后為加速域名配置CNAME,即為域名設置CDN加速功能。將部署在函數計算的應用作為源站,將源內容發布到邊緣節點,使終端用戶能快速讀取所需內容,有效降低訪問時延,提高服務質量。
加速域名添加成功后,您可以在函數計算控制臺中的目標自定義域名中看到CDN功能開關已開啟,并已綁定了在CDN控制臺添加的加速域名。
CDN加速功能會消耗公網流量,需要收取流量費用。更多信息,請參見計費概述。
自定義域名和加速域名不能使用同一個域名。例如:自定義域名設置為www.test.com,加速域名需要設置為其他的域名,如cdn.test.com。
登錄CDN控制臺,開啟CDN加速。
具體操作,請參見添加加速域名。
設置源站信息時,選擇函數計算域名,然后選擇目標函數計算服務所在地域和已創建的自定義域名。
- 登錄函數計算控制臺,在左側導航欄,選擇 。
- 在頂部菜單欄,選擇地域,然后在域名列表,找到目標域名,單擊操作列的編輯。
在編輯自定義域名頁面,查看由CDN控制臺同步的CDN加速域名配置。
為自定義域名添加CDN加速域名成功后,CDN會為您分配一個CNAME域名。在域名管理列表頁面獲取到對應的CNAME域名,將加速域名的DNS解析記錄指向分配的CNAME域名,從而實現加速效果。
具體操作,請參見配置CNAME。
說明CNAME的格式為
加速域名.w.alikunlun.com
,例如example.aliyundoc.com.w.alikunlun.com
。
步驟五:驗證自定義域名
自定義域名或CDN加速域名設置成功后,您可以通過以下方式訪問自定義域名進行測試。
方法一:通過命令行
curl URL
測試。例如curl example.com/login
。方法二:通過瀏覽器測試。
在瀏覽器地址欄中輸入請求URL,然后按回車鍵可以驗證是否調用了目標函數。
加密套件相關信息
強加密和弱加密套件列表
函數計算支持的強加密和弱加密套件列表如下。
強加密套件 | 弱加密套件 |
|
|
TLS協議版本與加密套件對應關系
下表展示了各TLS協議版本與其支持的加密套件之間的對應關系。函數計算系統默認配置列表中所有加密套件。
下表中表示TLS協議版本支持該加密套件,表示TLS協議版本不支持該加密套件。
展開查看TLS協議版本與加密套件對應關系。
加密套件 | TLS 1.0 | TLS 1.1 | TLS 1.2 | TLS 1.3 |
TLS_RSA_WITH_3DES_EDE_CBC_SHA | ||||
TLS_RSA_WITH_AES_128_CBC_SHA | ||||
TLS_RSA_WITH_AES_256_CBC_SHA | ||||
TLS_RSA_WITH_AES_128_GCM_SHA256 | ||||
TLS_RSA_WITH_AES_256_GCM_SHA384 | ||||
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA | ||||
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA | ||||
TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA | ||||
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA | ||||
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA | ||||
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 | ||||
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 | ||||
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 | ||||
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 | ||||
TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 | ||||
TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305 | ||||
TLS_RSA_WITH_RC4_128_SHA | ||||
TLS_RSA_WITH_AES_128_CBC_SHA256 | ||||
TLS_ECDHE_ECDSA_WITH_RC4_128_SHA | ||||
TLS_ECDHE_RSA_WITH_RC4_128_SHA | ||||
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | ||||
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 | ||||
TLS_AES_128_GCM_SHA256 | ||||
TLS_AES_256_GCM_SHA384 | ||||
TLS_CHACHA20_POLY1305_SHA256 |
RFC與OpenSSL加密套件命名對照表
RFC命名 | OpenSSL命名 |
TLS_RSA_WITH_3DES_EDE_CBC_SHA | DES-CBC3-SHA |
TLS_RSA_WITH_AES_128_CBC_SHA | AES128-SHA |
TLS_RSA_WITH_AES_256_CBC_SHA | AES256-SHA |
TLS_RSA_WITH_AES_128_GCM_SHA256 | AES128-GCM-SHA256 |
TLS_RSA_WITH_AES_256_GCM_SHA384 | AES256-GCM-SHA384 |
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA | ECDHE-ECDSA-AES128-SHA |
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA | ECDHE-ECDSA-AES256-SHA |
TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA | ECDHE-RSA-DES-CBC3-SHA |
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA | ECDHE-RSA-AES128-SHA |
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA | ECDHE-RSA-AES256-SHA |
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 | ECDHE-RSA-AES128-GCM-SHA256 |
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 | ECDHE-ECDSA-AES128-GCM-SHA256 |
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 | ECDHE-RSA-AES256-GCM-SHA384 |
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 | ECDHE-ECDSA-AES256-GCM-SHA384 |
TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 | 不涉及 |
TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305 | 不涉及 |
TLS_RSA_WITH_RC4_128_SHA | RC4-SHA |
TLS_RSA_WITH_AES_128_CBC_SHA256 | AES128-SHA256 |
TLS_ECDHE_ECDSA_WITH_RC4_128_SHA | ECDHE-ECDSA-RC4-SHA |
TLS_ECDHE_RSA_WITH_RC4_128_SHA | ECDHE-RSA-RC4-SHA |
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | ECDHE-ECDSA-AES128-SHA256 |
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 | ECDHE-RSA-AES128-SHA256 |
TLS_AES_128_GCM_SHA256 | TLS_AES_128_GCM_SHA256 |
TLS_AES_256_GCM_SHA384 | TLS_AES_256_GCM_SHA384 |
TLS_CHACHA20_POLY1305_SHA256 | TLS_CHACHA20_POLY1305_SHA256 |
匹配規則
路由匹配規則
您需要在綁定自定義域名過程中設置路徑和函數的對應關系,來自不同路徑的請求就可以觸發不同的函數執行。函數計算支持精確匹配和模糊匹配,具體規則如下:
精確匹配:請求的路徑和設置的路徑完全一致才可以觸發對應的函數。
假設,設置路徑為/a,對應的服務為s1,對應函數為f1,對應的版本為1。那么只有來自路徑/a的請求才能觸發版本1下的f1函數執行,來自路徑/a/的請求無法觸發版本1下的f1函數執行。
模糊匹配:支持使用通配符(*)設置路徑,且通配符(*)只能放到路徑的最后。
假設,設置路徑為/login/*,對應服務為s2,對應函數為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 | / | s1 | f1 | 1 |
路由規則2 | /* | s2 | f2 | 2 |
路由規則3 | /login | s3 | f3 | 3 |
路由規則4 | /login/a | s4 | f4 | 4 |
路由規則5 | /login/* | s5 | f5 | 5 |
最終匹配結果如下。
請求URL | 匹配的服務名稱 | 匹配的函數名稱 | 匹配的版本 | 匹配的路徑 |
example.com | s1 | f1 | 1 | / |
example.com/user | s2 | f2 | 2 | /* |
example.com/login | s3 | f3 | 3 | /login |
example.com/login/a | s4 | f4 | 4 | /login/a |
example.com/login/a/b | s5 | f5 | 5 | /login/* |
example.com/login/b | s5 | f5 | 5 | /login/* |
域名匹配規則
函數計算會根據您請求中的域名信息匹配合適的域名,并將請求轉發給匹配到的域名對應的函數。函數計算支持域名的精確匹配和模糊匹配,具體規則如下。
精確匹配:請求的域名與您創建的自定義域名完全一致時,才能觸發該域名對應的函數。
模糊匹配:支持匹配通配符域名(泛域名),即請求的域名與您創建的自定義域名匹配就可以觸發該域名對應的函數。通配符(*)最多只能有一個,且只能放到域名的最前面。
如果一個請求同時匹配了單域名和通配符域名,單域名的優先級大于通配符域名的優先級。
模糊匹配時,通配符域名只能匹配同級域名。例如,現有域名
*.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,怎么處理?
請檢查在配置域名解析時設置的記錄值,如果您要通過公網訪問,需要將記錄值設置為函數計算的公網Endpoint。具體見步驟二:配置域名解析。
配置自定義域名時,使用中文域名一直報錯,怎么處理?
函數計算自定義域名不支持中文域名。
如何解決通過瀏覽器訪問域名時會觸發強制下載的問題?
HTTP觸發器默認生成的公網訪問地址沒有經過域名備案,在通過瀏覽器訪問時會觸發強制下載。具體解決方案請參見如何解決通過瀏覽器訪問HTTP函數時,返回結果強制下載的問題?。
訪問加速域名時出現301重定向,如何處理?
請檢查在配置自定義域名時是否開啟了強制HTTPS跳轉,如果您不希望出現301重定向,可關閉該配置。
在路由配置時無法選擇已創建的服務和函數,怎么辦?
請確保自定義域名與所在的服務是同地域。
路由配置中只能選擇已創建HTTP觸發器的函數。
通過路由配置的路徑無法觸發函數執行,怎么處理?
您需要檢查配置的路由在函數中是否有對應的實現,在函數沒有對應路徑的實現時請求會失敗。
問題診斷
在綁定自定義域名過程中如果發生錯誤,服務端會返回錯誤信息。下表列出了常見的錯誤碼,幫助您快速定位問題。
錯誤碼 | 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 | 創建域名時,域名已存在。 |
如果問題仍未能解決,請加入釘釘用戶群(釘釘群號:64970014484),聯系函數計算工程師即時溝通處理。