本文介绍自定义域名的典型应用场景,以及如何在函数计算控制台为Web应用绑定自定义域名并为绑定的自定义域名设置CDN加速功能。

典型应用场景

函数计算支持创建HTTP函数,且只有HTTP函数可以被HTTP请求触发执行。HTTP函数可以看做一个Web应用,可以处理HTTP请求,并将处理结果返回给调用端。在以下示例场景中,您需要为Web应用绑定自定义域名:
  • 您创建了一个Web应用,并将该应用迁移到函数计算,希望用户通过固定的域名访问该应用。您可以在函数计算控制台为该Web应用绑定自定义域名,实现通过固定域名访问该应用。
  • 您通过函数计算控制台搭建了一个Web应用,您可以通过函数计算提供的默认地址<account_id>.<region_id>.fc.aliyuncs.com/<version>/proxy/<serviceName>/<functionName>/[action?queries]访问该应用。在实际操作过程中,存在更改Web应用访问地址的需求,为了不影响用户的使用,您可以为Web应用绑定自定义域名,实现通过固定域名访问该应用。

前提条件

创建HTTP函数。通过自定义域名发出的请求只能触发HTTP函数执行,因此需先创建HTTP函数。具体操作,请参见创建函数

操作流程

自定义域名

步骤一:备案域名

阿里云ICP代备案管理系统备案自定义域名。具体操作,请参见ICP备案流程概述

步骤二:配置域名解析

配置域名解析到您的函数计算对应地域的Endpoint上。具体操作,请参见配置域名解析。既可以解析到公网Endpoint,又可以解析到内网Endpoint。解析到公网Endpoint,则通过公网访问此域名;解析到内网Endpoint,则通过内网访问此域名。

说明 配置域名解析到函数计算Endpoint即配置自定义域名的CNAME到函数计算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

步骤三:添加自定义域名

  1. 登录函数计算控制台
  2. 在左侧导航栏,选择高级功能 > 域名管理
  3. 在顶部菜单栏,选择地域。
  4. 域名管理页面,单击添加自定义域名
  5. 添加自定义域名页面,填写相关参数,然后单击创建
    create-domain
    参数 操作
    域名 填写已在阿里云备案或接入备案的自定义域名名称。
    HTTPS 根据需要启用或禁用HTTPS协议访问自定义域名的功能。取值如下:
    • 启用:开启通过HTTPS协议访问自定义域名的功能。需要您选择证书类型,取值如下:
      • 阿里云 SSL 证书:请选择您的阿里云SSL证书。如果下拉列表为空,则说明您尚未购买阿里云SSL证书,您可以登录SSL控制台购买。具体步骤,请参见购买SSL证书服务
      • 手动上传:请手动输入证书名称并填写PEM 证书内容PEM 证书密钥
        说明 上传的证书的大小不能超过20 KB,私钥的大小不能超过4 KB。
    • 禁用:关闭通过HTTPS协议访问自定义域名功能。
    CDN 加速 根据需要启用或禁用CDN加速开关。为域名设置CDN加速功能后,终端用户将通过CDN加速域名快速读取所需内容。
    路由设置 设置路径与函数的对应关系,即不同的请求路径可以触发不同的函数执行。您需要设置以下字段:
    • 路径:可以触发指定服务下的指定函数的请求路径。
    • 服务名称:来自指定路径的请求触发的对应服务。
    • 函数名称:来自指定路径的请求触发的指定服务下的对应函数。
    • 版本/别名:来自指定路径的请求触发的指定服务下的对应函数版本或别名。

    您可以根据需要添加多个路由。更多路由信息,请参见路由匹配规则

步骤四:开启CDN加速(可选)

为Web应用绑定自定义域名后,您可以将该自定义域名作为源站域名为其添加加速域名,然后为加速域名配置CNAME,即为域名设置CDN加速功能。将部署在函数计算的应用作为源站,将源内容发布到边缘节点,使终端用户能快速读取所需内容,有效降低访问时延,提高服务质量。更多关于CDN的信息,请参见CDN帮助文档

注意 CDN加速功能会消耗公网流量,需要收取流量费用。具体信息,请参见计费概述

方法一:通过函数计算控制台添加加速域名

  1. 登录函数计算控制台
  2. 在左侧导航栏,选择高级功能 > 域名管理
  3. 在顶部菜单栏,选择地域。
  4. 在域名列表,找到目标域名,单击操作列的编辑
  5. 在编辑自定义域名页面,启用CDN加速功能,填写自定义CDN 加速域名,然后单击保存
    说明 一个自定义域名可以设置多个加速域名。
  6. 登录CDN控制台,在域名管理页面的域名列表中可以看到刚创建的加速域名。

方法二:通过CDN控制台添加加速域名

通过CDN控制台开启CDN加速的详细步骤,请参见添加加速域名

其中,设置源站信息时,选择函数计算域名,然后选择目标函数计算服务所在的地域和已创建的自定义域名。

加速域名添加成功后,您可以在函数计算控制台中的目标自定义域名中看到CDN功能开关已开启,并已绑定了在CDN控制台添加的加速域名。具体的验证操作如下:

  1. 登录函数计算控制台
  2. 在左侧导航栏,选择高级功能 > 域名管理
  3. 在顶部菜单栏,选择地域。
  4. 在域名列表,找到目标域名,单击操作列的编辑
  5. 在编辑自定义域名页面,您可以查看由CDN控制台同步过来的CDN加速域名配置。
    accelerate-domain2
为自定义域名添加CDN加速域名成功后,您需要为该加速域名配置CNAME。具体操作,请参见配置CNAME
说明 CNAME的格式为加速域名.w.alikunlun.com,例如example.aliyundoc.com.w.alikunlun.com

验证结果

自定义域名或CDN加速域名设置成功后,您可以通过以下方式访问自定义域名或CDN加速域名进行测试。

  • 方法一:通过命令行curl URL测试。例如curl example.com/login
  • 方法二:通过浏览器测试。

    在浏览器地址栏中输入请求URL,然后按回车键可以验证是否调用了目标函数。

路由匹配规则

您需要在绑定自定义域名过程中设置路径和函数的对应关系,来自不同路径的请求就可以触发不同的函数执行。函数计算支持精确匹配和模糊匹配,具体规则如下:
  • 精确匹配:请求的路径和设置的路径完全一致才可以触发对应的函数。

    假设,设置路径为/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/*

问题诊断

在绑定自定义域名过程中如果发生错误,服务端会返回错误信息,下表列出了常见的错误码,帮助您快速定位和解决问题。

错误码 HTTP状态码 错误信息 原因分析
DomainNameAlreadyExists 409 domain name '%s' already exists 创建域名时,域名已存在。
DomainNameNotFound 404 domain name '%s' does not exist 获取域名信息时,域名不存在。
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触发器。

如果问题仍未能解决,请联系我们