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

典型应用场景

函数计算支持创建HTTP函数,且只有HTTP函数可以被HTTP请求触发执行。HTTP函数可以被看作为一个Web应用,该应用能处理HTTP请求,并将处理结果返回给调用端。在以下示例场景中,您需要为Web应用绑定自定义域名。
  • 您创建了一个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,即配置自定义域名的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. 添加自定义域名页面,填写相关配置项,然后单击创建
    配置项操作
    域名填写已在阿里云备案或接入备案的自定义域名名称。支持单域名(例如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 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
    • 协议版本的自定义加密套件,请谨慎选择,避免影响业务:选择部分支持的加密套件。下拉列表中显示所有加密套件,您可以单击加密套件右侧的delete图标,删除安全性较弱的弱加密套件,保留您选择的TLS协议版本支持的加密套件。
    重要 请谨慎选择自定义加密套件,确保服务端和客户端套件的正确匹配。

    关于TLS协议版本和其支持的加密套件,请参见TLS协议版本与加密套件对应关系

    函数计算对加密套件的命名使用RFC命名规范。同一个加密套件,使用不同命名规范的命名会存在差异。关于RFC和OpenSSL命名的加密套件名称差异点,请参见RFC与OpenSSL加密套件命名对照表

    CDN 加速根据需要启用或禁用CDN加速开关。为域名设置CDN加速功能后,终端用户将通过CDN加速域名快速读取所需内容。
    Web 应用防火墙根据需要启用或者禁用Web应用防火墙开关。为自定义域名开启Web应用防火墙安全防护之后,Web应用防火墙将对该域名上的业务流量进行恶意特征识别和防护,避免函数被恶意侵入。具体信息,请参见开启Web应用防火墙安全防护
    • 启用:开启Web应用防火墙安全防护功能。
    • 禁用:关闭Web应用防火墙安全防护功能。
    路由配置设置路径与函数的对应关系,即不同的请求路径可以触发不同的函数执行。您需要设置以下字段:
    • 路径:可以触发指定服务下的指定函数的请求路径。
    • 服务名称:来自指定路径的请求触发的对应服务。
    • 函数名称:来自指定路径的请求触发的指定服务下的对应函数。
    • 版本或别名:来自指定路径的请求触发的指定服务下的对应函数版本或别名。
    • 重写策略:将匹配指定路径的请求的URI根据规则进行重写。具体操作,请参见操作步骤

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

    配置完成后,您可以根据需求编辑或删除配置的自定义域名。

    重要 删除自定义域名会导致通过该域名接入的请求全部失败,请谨慎操作。

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

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

说明 CDN加速功能会消耗公网流量,需要收取流量费用。更多信息,请参见计费概述

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

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

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

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

  1. 登录CDN控制台,开启CDN加速。
    具体操作,请参见添加加速域名

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

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

验证结果

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

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

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

TLS协议版本与加密套件对应关系

下表展示了各TLS协议版本与其支持的加密套件之间的对应关系。函数计算系统默认配置列表中所有加密套件。

说明 下表中支持表示TLS协议版本支持该加密套件,not-support表示TLS协议版本不支持该加密套件。
展开查看TLS协议版本与加密套件对应关系。
加密套件TLS 1.0TLS 1.1TLS 1.2TLS 1.3
TLS_RSA_WITH_3DES_EDE_CBC_SHA支持支持支持not-support
TLS_RSA_WITH_AES_128_CBC_SHA支持支持支持not-support
TLS_RSA_WITH_AES_256_CBC_SHA支持支持支持not-support
TLS_RSA_WITH_AES_128_GCM_SHA256not-supportnot-support支持not-support
TLS_RSA_WITH_AES_256_GCM_SHA384not-supportnot-support支持not-support
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA支持支持支持not-support
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA支持支持支持not-support
TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA支持支持支持not-support
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA支持支持支持not-support
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA支持支持支持not-support
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256not-supportnot-support支持not-support
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256not-supportnot-support支持not-support
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384not-supportnot-support支持not-support
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384not-supportnot-support支持not-support
TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305not-supportnot-support支持not-support
TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305not-supportnot-support支持not-support
TLS_RSA_WITH_RC4_128_SHAnot-supportnot-supportnot-supportnot-support
TLS_RSA_WITH_AES_128_CBC_SHA256not-supportnot-supportnot-supportnot-support
TLS_ECDHE_ECDSA_WITH_RC4_128_SHAnot-supportnot-supportnot-supportnot-support
TLS_ECDHE_RSA_WITH_RC4_128_SHAnot-supportnot-supportnot-supportnot-support
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256not-supportnot-supportnot-supportnot-support
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256not-supportnot-supportnot-supportnot-support
TLS_AES_128_GCM_SHA256not-supportnot-supportnot-support支持
TLS_AES_256_GCM_SHA384not-supportnot-supportnot-support支持
TLS_CHACHA20_POLY1305_SHA256not-supportnot-supportnot-support支持

RFC与OpenSSL加密套件命名对照表

展开查看RFC与OpenSSL加密套件命名对照。
RFC命名OpenSSL命名
TLS_RSA_WITH_3DES_EDE_CBC_SHADES-CBC3-SHA
TLS_RSA_WITH_AES_128_CBC_SHAAES128-SHA
TLS_RSA_WITH_AES_256_CBC_SHAAES256-SHA
TLS_RSA_WITH_AES_128_GCM_SHA256AES128-GCM-SHA256
TLS_RSA_WITH_AES_256_GCM_SHA384AES256-GCM-SHA384
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHAECDHE-ECDSA-AES128-SHA
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHAECDHE-ECDSA-AES256-SHA
TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHAECDHE-RSA-DES-CBC3-SHA
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHAECDHE-RSA-AES128-SHA
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHAECDHE-RSA-AES256-SHA
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256ECDHE-RSA-AES128-GCM-SHA256
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256ECDHE-ECDSA-AES128-GCM-SHA256
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384ECDHE-RSA-AES256-GCM-SHA384
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384ECDHE-ECDSA-AES256-GCM-SHA384
TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305不涉及
TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305不涉及
TLS_RSA_WITH_RC4_128_SHARC4-SHA
TLS_RSA_WITH_AES_128_CBC_SHA256AES128-SHA256
TLS_ECDHE_ECDSA_WITH_RC4_128_SHAECDHE-ECDSA-RC4-SHA
TLS_ECDHE_RSA_WITH_RC4_128_SHAECDHE-RSA-RC4-SHA
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256ECDHE-ECDSA-AES128-SHA256
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256ECDHE-RSA-AES128-SHA256
TLS_AES_128_GCM_SHA256TLS_AES_128_GCM_SHA256
TLS_AES_256_GCM_SHA384TLS_AES_256_GCM_SHA384
TLS_CHACHA20_POLY1305_SHA256TLS_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/s1f11
路由规则2/*s2f22
路由规则3/logins3f33
路由规则4/login/as4f44
路由规则5/login/*s5f55
最终匹配结果如下。
请求URL匹配的服务名称匹配的函数名称匹配的版本匹配的路径
example.coms1f11/
example.com/users2f22/*
example.com/logins3f33/login
example.com/login/as4f44/login/a
example.com/login/a/bs5f55/login/*
example.com/login/bs5f55/login/*

域名匹配规则

函数计算会根据您请求中的域名信息匹配合适的域名,并将请求转发给匹配到的域名对应的函数。函数计算支持域名的精确匹配和模糊匹配,具体规则如下。
  • 精确匹配:请求的域名与您创建的自定义域名完全一致时,才能触发该域名对应的函数。
  • 模糊匹配:支持匹配通配符域名(泛域名),即请求的域名与您创建的自定义域名匹配就可以触发该域名对应的函数。通配符(*)最多只能有一个,且只能放到域名的最前面。
说明
  • 如果一个请求同时匹配了单域名和通配符域名,单域名的优先级大于通配符域名的优先级。
  • 模糊匹配时,通配符域名只能匹配同级域名。例如,现有域名*.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.comfc.aliyun.com
fnf.aliyun.com*.aliyun.com
cn-hangzhou.fc.aliyun.com*.fc.aliyun.com
accountID.cn-hangzhou.fc.aliyun.com无匹配

问题诊断

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

错误码HTTP状态码错误信息原因分析
InvalidICPLicense400domain name '%s' has not got ICP license, or the ICP license does not belong to Aliyun域名未备案,或备案未接入阿里云。更多信息,请参见备案域名
DomainNameNotResolved400domain name '%s' has not been resolved to your FC endpoint, the expected endpoint is '%s'域名未设置CNAME到指定的Endpoint,可以通过dig命令或在域名解析服务器处查看确认。
DomainRouteNotFound404no route found in domain '%s' for path '%s'没有为指定路径设置对应触发的函数。
TriggerNotFound404trigger 'http' does not exist in service '%s' and function '%s'自定义域名触发的函数未设置HTTP触发器。
DomainNameNotFound404domain name '%s' does not exist获取域名信息时,域名不存在。
DomainNameAlreadyExists409domain name '%s' already exists创建域名时,域名已存在。

如果问题仍未能解决,请加入钉钉用户群(钉钉群号:11721331),联系函数计算工程师即时沟通处理。