函数计算会为创建的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证书管理控制台购买。
手动上传:手动输入证书名称,并填写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协议版本与加密套件对应关系
RFC与OpenSSL加密套件命名对照表
匹配规则
路由匹配规则
您需要在绑定自定义域名过程中设置路径和函数的对应关系,来自不同路径的请求就可以触发不同的函数执行。函数计算支持精确匹配和模糊匹配,具体规则如下:
精确匹配:请求的路径和设置的路径完全一致才可以触发对应的函数。
假设,设置路径为/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,怎么处理?
配置自定义域名时,使用中文域名一直报错,怎么处理?
如何解决通过浏览器访问域名时会触发强制下载的问题?
访问加速域名时出现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 | 创建域名时,域名已存在。 |
如果问题仍未能解决,请加入钉钉用户群(钉钉群号:64970014484),联系函数计算工程师即时沟通处理。