为应用绑定自定义域名,可以实现通过固定域名访问应用。本文介绍自定义域名的典型应用场景,以及如何在函数计算控制台为Web应用绑定自定义域名,并为绑定的自定义域名设置CDN加速功能等。
典型应用场景
- 您创建了一个Web应用,并将该应用迁移到函数计算,希望可以通过固定的域名访问该应用。
- 您通过函数计算控制台搭建了一个Web应用,希望可以通过函数计算提供的默认地址
<account_id>.<region_id>.fc.aliyuncs.com/<version>/proxy/<serviceName>/<functionName>/[action?queries]
访问该应用。在实际操作过程中,您需要更改Web应用访问地址,但不影响用户的使用。
前提条件
已创建HTTP函数。自定义域名发出的请求只能触发HTTP函数执行。
操作流程

步骤一:备案域名
登录阿里云ICP代备案管理系统备案自定义域名。具体操作,请参见ICP备案流程概述。
步骤二:配置域名解析
配置域名解析到您的函数计算对应地域的Endpoint上。具体操作,请参见配置域名解析。既可以解析域名到公网Endpoint,又可以解析域名到内网Endpoint。解析到公网Endpoint,则通过公网访问此域名;解析到内网Endpoint,则通过内网访问此域名。
- 内网Endpoint:格式为
<account_id>.<region_id>-internal.fc.aliyuncs.com
,其中,account_id
是指您的阿里云账号(主账号)ID。例如,您的自定义域名为example.com,您的阿里云账号(主账号)ID为164901546557****,地域为华东2(上海),则内网Endpoint为164901546557****.cn-shanghai-internal.fc.aliyuncs.com
。 - 公网Endpoint:格式为
<account_id>.<region_id>.fc.aliyuncs.com
,其中,account_id
是指您的阿里云账号(主账号)ID。例如,您的自定义域名为example.com,您的阿里云账号(主账号)ID为164901546557****,地域为华东2(上海),则公网Endpoint为164901546557****.cn-shanghai.fc.aliyuncs.com
。
步骤三:添加自定义域名
- 登录函数计算控制台,在左侧导航栏,选择 。
- 在顶部菜单栏,选择地域,然后在域名管理页面,单击添加自定义域名。
- 在添加自定义域名页面,填写相关配置项,然后单击创建。
配置项 操作 域名 填写已在阿里云备案或接入备案的自定义域名名称。支持单域名(例如 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 1.0及以上版本协议,包括TLS 1.0、TLS 1.1和TLS 1.2协议。取值说明如下: - 支持TLS 1.0及以上协议,兼容性最高,安全性较低:表示对TLS 1.0及以上所有协议版本生效,包括TLS 1.0、TLS 1.1和TLS 1.2协议。
- 支持TLS 1.1及以上协议,兼容性较好,安全性较好:表示对TLS 1.1及以上所有协议版本生效,包括TLS 1.1和TLS 1.2协议,使用TLS 1.0协议将无法访问配置的自定义域名。
- 支持TLS 1.2及以上协议,兼容性较好,安全性最高:表示对TLS 1.2以上所有协议版本生效,仅包括TLS 1.2协议,使用TLS 1.0和TLS 1.1协议将无法访问配置的自定义域名。
说明 选择以上TLS协议版本后,您还可以选中开启支持TLS 1.3复选框,表示同时支持TLS 1.3协议。加密套件 选择TLS加密算法套件,如果不配置,默认选择全部加密套件。取值说明如下: - 全部加密套件,兼容性最高,安全性较低:选择全部加密套件。支持以下强加密套件和弱加密套件:
- 强加密套件
- 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协议版本和其支持的加密套件,请参见TLS协议版本与加密套件对应关系。
函数计算对加密套件的命名使用RFC命名规范。同一个加密套件,使用不同命名规范的命名会存在差异。关于RFC和OpenSSL命名的加密套件名称差异点,请参见RFC与OpenSSL加密套件命名对照表。
CDN 加速 根据需要启用或禁用CDN加速开关。为域名设置CDN加速功能后,终端用户将通过CDN加速域名快速读取所需内容。 - 启用:开启CDN加速功能。需要填写自定义的CDN 加速域名。然后登录CDN控制台为加速域名配置CNAME。更多信息,请参见步骤四:开启CDN加速(可选)。
- 禁用:关闭CDN加速功能。
Web 应用防火墙 根据需要启用或者禁用Web应用防火墙开关。为自定义域名开启Web应用防火墙安全防护之后,Web应用防火墙将对该域名上的业务流量进行恶意特征识别和防护,避免函数被恶意侵入。具体信息,请参见开启Web应用防火墙安全防护。 - 启用:开启Web应用防火墙安全防护功能。
- 禁用:关闭Web应用防火墙安全防护功能。
路由配置 设置路径与函数的对应关系,即不同的请求路径可以触发不同的函数执行。您需要设置以下字段: - 路径:可以触发指定服务下的指定函数的请求路径。
- 服务名称:来自指定路径的请求触发的对应服务。
- 函数名称:来自指定路径的请求触发的指定服务下的对应函数。
- 版本或别名:来自指定路径的请求触发的指定服务下的对应函数版本或别名。
- 重写策略:将匹配指定路径的请求的URI根据规则进行重写。具体操作,请参见操作步骤。
您可以根据需要添加多个路由。更多路由信息,请参见路由匹配规则。
配置完成后,您可以根据需求编辑或删除配置的自定义域名。
重要 删除自定义域名会导致通过该域名接入的请求全部失败,请谨慎操作。 - 启用:开启通过HTTPS协议访问自定义域名的功能。表示支持使用HTTP或HTTPS协议访问该自定义域名。
步骤四:开启CDN加速(可选)
为Web应用绑定自定义域名后,您可以将该自定义域名作为源站域名为其添加加速域名,然后为加速域名配置CNAME,即为域名设置CDN加速功能。将部署在函数计算的应用作为源站,将源内容发布到边缘节点,使终端用户能快速读取所需内容,有效降低访问时延,提高服务质量。更多关于CDN的信息,请参见CDN帮助文档。
方法一:通过函数计算控制台添加加速域名
- 登录函数计算控制台,在左侧导航栏,选择 。
- 在顶部菜单栏,选择地域,然后在域名列表,找到目标域名,单击操作列的编辑。
- 在编辑自定义域名页面,启用CDN加速功能,填写自定义CDN 加速域名,然后单击保存。支持设置多个加速域名。配置完成后,您可以登录CDN控制台,在域名管理页面的域名列表中可以看到刚创建的加速域名。
方法二:通过CDN控制台添加加速域名
加速域名添加成功后,您可以在函数计算控制台中的目标自定义域名中看到CDN功能开关已开启,并已绑定了在CDN控制台添加的加速域名。
- 登录CDN控制台,开启CDN加速。具体操作,请参见添加加速域名。
设置源站信息时,选择函数计算域名,然后选择目标函数计算服务所在地域和已创建的自定义域名。
- 登录函数计算控制台,在左侧导航栏,选择 。
- 在顶部菜单栏,选择地域,然后在域名列表,找到目标域名,单击操作列的编辑。
- 在编辑自定义域名页面,查看由CDN控制台同步的CDN加速域名配置。
加速域名.w.alikunlun.com
,例如example.aliyundoc.com.w.alikunlun.com
。验证结果
自定义域名或CDN加速域名设置成功后,您可以通过以下方式访问自定义域名进行测试。
- 方法一:通过命令行
curl URL
测试。例如curl example.com/login
。 - 方法二:通过浏览器测试。
在浏览器地址栏中输入请求URL,然后按回车键可以验证是否调用了目标函数。
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状态码 | 错误信息 | 原因分析 |
---|---|---|---|
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 | 创建域名时,域名已存在。 |
如果问题仍未能解决,请加入钉钉用户群(钉钉群号:11721331),联系函数计算工程师即时沟通处理。