全部產品
Search
文件中心

Function Compute:為函數或應用綁定自訂網域名

更新時間:Aug 24, 2024

如果您希望在生產環境中通過固定網域名稱訪問Function Compute中建立的應用或函數,或者解決訪問HTTP觸發器時強制下載行為,可以參見本文為應用或函數綁定自訂網域名。

典型應用情境

在以下樣本情境中,您需要為函數或應用綁定自訂網域名。

  • 您建立了一個Web應用,並將該應用遷移到Function Compute,希望通過固定的網域名稱訪問該應用。

  • 您通過Function Compute控制台搭建了一個Web應用,希望通過一個網域名稱的不同路徑觸發不同的函數處理。

  • 您通過Function Compute的應用中心建立了應用,例如Stable Diffusion應用,希望通過固定的網域名稱訪問該應用。

使用限制

  • 配置的自訂網域名區分大小寫,請按實際備案的網域名稱填寫。

  • 網域名稱最大長度為256個字元。每個層次的子網域名稱至少有一個字元且總長度不超過63個字元,可以是字母(大小寫敏感)、數字(0-9)或者連字號(-),但是網域名稱的第一個字元不能是連字號(-)。網域名稱的最後一部分(頂級網域名稱)至少有兩個字元長,並且必須是字母。

  • 支援配置泛網域名稱和標準網域名稱,不支援配置中文網域名稱。

  • 在某地區下為函數綁定自訂網域名時,只能選擇當前地區下的函數。

通過自訂網域名訪問應用的實現原理

前提條件

  • 已建立函數或應用。具體操作,請參見建立函數建立應用

    為應用綁定自訂網域名,就是為應用建立的函數綁定自訂網域名,您可以在應用的環境詳情頁面的資源資訊地區找到建立應用時自動建立的函數資源,單擊函數名稱即可跳轉到函數頁面。

    image

  • 準備一個已在阿里雲接入備案的自訂網域名。

    根據網域名稱所屬的服務提供者和所屬帳號,參考以下對應的操作指導進行網域名稱備案。

    說明
    • 中國香港和海外地區的函數綁定的自訂網域名不需要備案。

    • 如果您不確定網域名稱所屬服務提供者,您可以在網域名稱資訊查詢(WHOIS)頁面進行查詢。

    • 如果您不確定網域名稱是否屬於當前阿里雲帳號,您可以在Alibaba Cloud DNS控制台進行查詢。

1.開始添加自訂網域名

  1. 登入Function Compute控制台,在左側導覽列,選擇進階功能 > 網域名稱管理,選擇地區,然後單擊添加自訂網域名

    image

  2. 填寫已在阿里雲備案或接入備案的自訂網域名。支援單網域名稱(例如www.aliyun.com)或萬用字元網域名稱(例如*.aliyun.com)。

    image

    添加自訂網域名面板,擷取公網 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。具體操作,請參見佈建網域名解析

image

如圖所示,佈建網域名解析時,記錄值需要填寫為上一步擷取的Function Compute的CNAME。如果您希望通過公網訪問該網域名稱,需要將記錄值配置為Function Compute公網CNAME。

3. 繼續完成自訂網域名的添加

返回至步驟1.開始添加自訂網域名添加自訂網域名面板,根據需求,配置以下可選項後,單擊建立完成自訂網域名的添加。

3.1(可選)路由配置

如果您的應用程式套件含多個函數,可以設定路徑與函數的對應關係,不同的請求路徑可以觸發不同的函數執行。更多資訊,請參見路由匹配規則

如果需要將匹配指定路徑的請求的URI根據規則進行重寫,請參見配置重寫策略(公測中)

image

3.2(可選)HTTPS設定

如果需要啟用HTTPS協議訪問自訂網域名的功能,請參見以下步驟配置。

image

配置項

操作

HTTPS

啟用後支援使用HTTP或HTTPS協議訪問該自訂網域名,如果不啟用,則僅支援使用HTTP協議訪問該自訂網域名。

說明

您還可以選中強制HTTPS複選框,此時僅支援使用HTTPS協議訪問該自訂網域名,Function Compute會將所有使用HTTP協議訪問該自訂網域名的請求重新導向至HTTPS協議。

認證類型

選擇要上傳的認證類型。取值說明如下:

  • 阿里雲 SSL 憑證:選擇您的阿里雲SSL認證。如果認證名稱下拉式清單為空白,則說明您尚未購買阿里雲SSL認證,您可以登入SSL認證管理主控台購買。

  • 手動上傳:手動輸入認證名稱,並填寫PEM 認證內容PEM 認證密鑰

說明

上傳的認證的大小不能超過20 KB,認證密鑰的大小不能超過4 KB。

TLS 協議版本

選擇函數使用的TLS協議版本,如果不配置,則預設選擇TLS 1.0及以上版本協議,包括TLS 1.0、TLS 1.1和TLS 1.2協議。

說明

選擇以上TLS協議版本後,您還可以選中開啟支援 TLS1.3複選框,表示同時支援TLS 1.3協議。

加密套件

選擇TLS密碼編譯演算法套件,如果不配置,預設選擇全部加密套件。取值說明如下:

  • 全部加密套件,相容性最高,安全性較低:選擇全部加密套件。Function Compute支援的加密套件列表請參見強加密和弱加密套件列表

  • 協議版本的自訂加密套件,請謹慎選擇,避免影響業務:選擇部分支援的加密套件。下拉式清單中顯示所有加密套件,您可以單擊加密套件右側的delete表徵圖,刪除安全性較弱的弱加密套件,保留您選擇的TLS協議版本支援的加密套件。

重要
  • 請謹慎選擇自訂加密套件,確保服務端和用戶端套件的正確匹配。

  • 關於TLS協議版本和其支援的加密套件,請參見TLS協議版本與加密套件對應關係

  • Function Compute對加密套件的命名使用RFC命名規範。同一個加密套件,使用不同命名規範的命名會存在差異。關於RFC和OpenSSL命名的加密套件名稱差異點,請參見RFC與OpenSSL加密套件命名對照表

3.3(可選)認證設定

image

3.4(可選)Web Application Firewall設定

啟用後支援對函數或者應用的業務流量進行惡意特徵識別,對流量進行清洗和過濾後,將正常和安全的流量回源至後端函數,避免函數被惡意侵入。更多資訊,請參見開啟Web Application Firewall

image

3.6(可選)CDN設定

為Web應用綁定自訂網域名後,您可以將該自訂網域名作為來源站點網域名稱為其添加加速網域名稱,然後為加速網域名稱配置CNAME,即為網域名稱設定CDN加速功能。將部署在Function Compute的應用作為來源站點,將源內容發布到邊緣節點,使終端使用者能快速讀取所需內容,有效降低訪問時延,提高服務品質。

  1. 啟用CDN加速,如圖所示,填寫自訂的CDN 加速網域名稱,然後單擊建立完成加速網域名稱的添加。

    image

    重要
    • CDN加速功能會消耗公網流量,需要收取流量費用。更多資訊,請參見計費概述

    • 自訂網域名和加速網域名稱不能使用同一個網域名稱。為了不佔用更多網域名稱資源,可以將CDN加速網域名稱配置為您的自訂網域名的次層網域(即子網域名稱),例如,配置自訂網域名為example.com,配置CDN加速網域名稱為fast.example.com

  2. 單擊剛才配置的自訂網域名,在自訂網域名詳情頁面的CDN 加速配置地區,單擊操作列的CDN 組態管理跳轉到CDN控制台擷取CDN為加速網域名稱分配的CNAME。

    image

    image

    如圖所示,CNAME的格式為加速網域名稱.w.kunlun**.com,例如fast.example.com.w.kunlunle.com

  3. 登入雲解析 DNS控制台,找到您的自訂網域名,將加速網域名稱的DNS解析記錄指向分配的CNAME網域名稱,從而實現加速效果。具體操作,請參見佈建網域名解析

    image

    如圖所示,主機記錄填寫為加速網域名稱即子網域名稱的第一層,本文樣本為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節點。

首次訪問未命中

後續訪問命中

42561c466d77bb5e52a6768b56ded229

3cd29fd2ed26b2fc3827e9162d16fae0

加密套件相關資訊

強加密和弱加密套件列表

Function Compute支援的強加密和弱加密套件列表如下。

強加密套件

弱加密套件

  • 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_AES_128_CBC_SHA

  • TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA

  • TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256

  • TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384

  • TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256

  • TLS_ECDHE_RSA_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_3DES_EDE_CBC_SHA

  • TLS_RSA_WITH_AES_128_CBC_SHA256

  • TLS_ECDHE_ECDSA_WITH_RC4_128_SHA

  • TLS_ECDHE_RSA_WITH_RC4_128_SHA

  • TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA

  • TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256

  • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256

TLS協議版本與加密套件對應關係

下表展示了各TLS協議版本與其支援的加密套件之間的對應關係。Function Compute系統預設配置列表中所有加密套件。

說明

下表中支援表示TLS協議版本支援該加密套件,not-support表示TLS協議版本不支援該加密套件。

展開查看TLS協議版本與加密套件對應關係。

加密套件

TLS 1.0

TLS 1.1

TLS 1.2

TLS 1.3

TLS_RSA_WITH_3DES_EDE_CBC_SHA

not-support

not-support

not-support

not-support

TLS_RSA_WITH_AES_128_CBC_SHA

not-support

not-support

支援

not-support

TLS_RSA_WITH_AES_256_CBC_SHA

not-support

not-support

支援

not-support

TLS_RSA_WITH_AES_128_GCM_SHA256

not-support

not-support

支援

not-support

TLS_RSA_WITH_AES_256_GCM_SHA384

not-support

not-support

支援

not-support

TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA

not-support

not-support

not-support

not-support

TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA

not-support

not-support

not-support

not-support

TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA

not-support

not-support

not-support

not-support

TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA

not-support

not-support

支援

not-support

TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA

not-support

not-support

支援

not-support

TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256

not-support

not-support

支援

not-support

TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256

not-support

not-support

not-support

not-support

TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384

not-support

not-support

支援

not-support

TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384

not-support

not-support

not-support

not-support

TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305

not-support

not-support

支援

not-support

TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305

not-support

not-support

not-support

not-support

TLS_RSA_WITH_RC4_128_SHA

not-support

not-support

not-support

not-support

TLS_RSA_WITH_AES_128_CBC_SHA256

not-support

not-support

支援

not-support

TLS_ECDHE_ECDSA_WITH_RC4_128_SHA

not-support

not-support

not-support

not-support

TLS_ECDHE_RSA_WITH_RC4_128_SHA

not-support

not-support

not-support

not-support

TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256

not-support

not-support

not-support

not-support

TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256

not-support

not-support

支援

not-support

TLS_AES_128_GCM_SHA256

not-support

not-support

not-support

支援

TLS_AES_256_GCM_SHA384

not-support

not-support

not-support

支援

TLS_CHACHA20_POLY1305_SHA256

not-support

not-support

not-support

支援

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

匹配規則

路由匹配規則

您需要在綁定自訂網域名過程中設定路徑和函數的對應關係,來自不同路徑的請求就可以觸發不同的函數執行。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.comfc.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,怎麼處理?

請檢查在佈建網域名解析時設定的記錄值,如果您要通過公網訪問,需要將記錄值設定為Function Compute的公網Endpoint。具體見2. 佈建網域名解析

配置自訂網域名時,使用中文網域名稱一直報錯,怎麼處理?

Function Compute自訂網域名不支援中文網域名稱。

如何解決通過瀏覽器訪問網域名稱時會觸發強制下載的問題?

HTTP觸發器預設產生的公網訪問地址沒有經過網域名稱備案,在通過瀏覽器訪問時會觸發強制下載。具體解決方案請參見如何解決通過瀏覽器訪問HTTP函數時,返回結果強制下載的問題?

訪問加速網域名稱時出現301重新導向,如何處理?

請檢查在配置自訂網域名時是否開啟了強制HTTPS跳轉,如果您不希望出現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工程師及時溝通處理。