如果您希望在生产环境中通过固定域名访问函数计算中创建的应用或函数,或者解决访问HTTP触发器时强制下载行为,可以参见本文为应用或函数绑定自定义域名。
典型应用场景
在以下示例场景中,您需要为函数或应用绑定自定义域名。
您创建了一个Web应用,并将该应用迁移到函数计算,希望通过固定的域名访问该应用。
您通过函数计算控制台搭建了一个Web应用,希望通过一个域名的不同路径触发不同的函数处理。
您通过函数计算的应用中心创建了应用,例如Stable Diffusion应用,希望通过固定的域名访问该应用。
使用限制
配置的自定义域名区分大小写,请按实际备案的域名填写。
域名最大长度为256个字符。每个层次的子域名至少有一个字符且总长度不超过63个字符,可以是字母(大小写敏感)、数字(0-9)或者连字符(-),但是域名的第一个字符不能是连字符(-)。域名的最后一部分(顶级域名)至少有两个字符长,并且必须是字母。
支持配置泛域名和标准域名,不支持配置中文域名。
在某地域下为函数绑定自定义域名时,只能选择当前地域下的函数。
通过自定义域名访问应用的实现原理
前提条件
为应用绑定自定义域名,就是为应用创建的函数绑定自定义域名,您可以在应用的环境详情页面的资源信息区域找到创建应用时自动创建的函数资源,单击函数名称即可跳转到函数页面。
准备一个已在阿里云接入备案的自定义域名。
根据域名所属的服务提供商和所属账号,参考以下对应的操作指导进行域名备案。您可以登录中国国家工业和信息化部(简称工信部)确认域名是否备案成功。
当前阿里云账号注册的域名
登录阿里云ICP代备案管理系统备案自定义域名。具体操作,请参见ICP备案流程。
其他阿里云账号注册的域名
建议您使用注册域名的阿里云账号完成域名备案。如果您需要使用当前阿里云账号进行域名备案,则需要根据情况完成域名转移至其他阿里云账号或者域名持有者信息修改(过户)。然后登录阿里云ICP代备案管理系统备案自定义域名。具体操作,请参见ICP备案流程。
非阿里云账号注册的域名
如果您的域名不是在阿里云备案,需要在阿里云接入备案。登录阿里云ICP代备案管理系统备案自定义域名。具体操作,请参见接入备案流程。
说明中国香港和海外地域的函数绑定的自定义域名不需要备案。
如果您不确定域名所属服务提供商,您可以在域名信息查询(WHOIS)页面进行查询。
如果您不确定域名是否属于当前阿里云账号,您可以在云解析DNS控制台进行查询。
1.开始添加自定义域名
登录函数计算控制台,在左侧导航栏,选择 ,选择地域,然后单击添加自定义域名。
填写已在阿里云备案或接入备案的自定义域名。支持单域名(例如
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控制台,将已备案的域名解析到函数计算的CNAME。具体操作,请参见配置域名解析。
如图所示,配置域名解析时,记录值需要填写为上一步获取的函数计算的CNAME。如果您希望通过公网访问该域名,需要将记录值配置为函数计算公网CNAME。
3. 继续完成自定义域名的添加
返回至步骤1.开始添加自定义域名的添加自定义域名面板,根据需求,配置以下可选项后,单击创建完成自定义域名的添加。
3.1(可选)路由配置
如果您的应用包含多个函数,可以设置路径与函数的对应关系,不同的请求路径可以触发不同的函数执行。更多信息,请参见路由匹配规则。
如果需要将匹配指定路径的请求的URI根据规则进行重写,请参见配置重写策略(公测中)。
3.2(可选)HTTPS设置
如果需要启用HTTPS协议访问自定义域名的功能,请参见以下步骤配置。
配置项 | 操作 |
HTTPS | 启用后支持使用HTTP或HTTPS协议访问该自定义域名,如果不启用,则仅支持使用HTTP协议访问该自定义域名。 说明 您还可以选中强制HTTPS复选框,此时仅支持使用HTTPS协议访问该自定义域名,函数计算会将所有使用HTTP协议访问该自定义域名的请求重定向至HTTPS协议。 |
证书类型 | 选择要上传的证书类型。取值说明如下:
说明 上传的证书的大小不能超过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加密算法套件,如果不配置,默认选择全部加密套件。取值说明如下:
重要
|
3.3(可选)认证设置
无需认证:不需要对HTTP请求进行身份验证,支持匿名访问,任何人都可以发起HTTP请求调用您的函数。
签名认证:需要对HTTP请求进行签名认证,具体请参见为自定义域名配置签名认证。
JWT认证:需要对HTTP请求进行JWT认证,具体请参见为自定义域名配置JWT认证鉴权。
3.4(可选)Web 应用防火墙设置
启用后支持对函数或者应用的业务流量进行恶意特征识别,对流量进行清洗和过滤后,将正常和安全的流量回源至后端函数,避免函数被恶意侵入。更多信息,请参见开启Web应用防火墙。
3.6(可选)CDN设置
为Web应用绑定自定义域名后,您可以将该自定义域名作为源站域名为其添加加速域名,然后为加速域名配置CNAME,即为域名设置CDN加速功能。将部署在函数计算的应用作为源站,将源内容发布到边缘节点,使终端用户能快速读取所需内容,有效降低访问时延,提高服务质量。
启用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加密套件命名对照表
匹配规则
路由匹配规则
您需要在绑定自定义域名过程中设置路径和函数的对应关系,来自不同路径的请求就可以触发不同的函数执行。函数计算支持精确匹配和模糊匹配,具体规则如下:
精确匹配:请求的路径和设置的路径完全一致才可以触发对应的函数。
假设,设置路径为/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/* |
域名匹配规则
函数计算会根据您请求中的域名信息匹配合适的域名,并将请求转发给匹配到的域名对应的函数。函数计算支持域名的精确匹配和模糊匹配,具体规则如下。
精确匹配:请求的域名与您创建的自定义域名完全一致时,才能触发该域名对应的函数。
模糊匹配:支持匹配通配符域名(泛域名),即请求的域名与您创建的自定义域名匹配就可以触发该域名对应的函数。通配符(*)最多只能有一个,且只能放到域名的最前面。
如果一个请求同时匹配了单域名和通配符域名,单域名的优先级大于通配符域名的优先级。
模糊匹配时,通配符域名只能匹配同级域名。例如,现有域名
*.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),联系函数计算工程师及时沟通处理。