Skip to main content

域名绑定指南

根据法律法规和有关部门的要求,使用云服务需要绑定一个已经在工信部备案过的域名。绑定自有域名也有利于从域名层面做好应用隔离,确保业务稳定。

这篇指南假定你了解域名解析的基本知识,如果你不太熟悉这方面的内容,可以参考这篇文章。

本指南面向国内版应用的开发者。

以下服务需绑定域名​

使用 LeanCloud 的数据存储和云引擎服务要求必须绑定自有域名,其他服务可选是否绑定自有域名。 我们提供了 API 共享域名和文件共享域名,但是请注意,共享域名没有可用性保证,容易受到 DDoS 攻击影响。我们建议在生产环境中使用绑定的自定义域名。

自定义域名的种类​

国内节点服务涉及以下几种自定义域名:

域名种类涉及服务在工信部备案在 LeanCloud 备案或接入备案SSL绑定目标静态资源加速
文件域名文件服务必须可选可选应用是
云引擎域名云引擎 网站托管必须必须可选分组视情况
API 域名存储、即时通讯、短信、推送、云函数必须必须必须应用否

说明:

  1. 可以使用同一主域名下不同的子域名,每个子域名只能绑定到一个应用,且同一应用的 API 服务、云引擎网站托管服务、文件服务需绑定不同的子域名。
  2. API 域名需要启用 SSL,绑定时会自动申请 SSL 证书,当然你也可以自行上传证书。
  3. 绑定目标中的「分组」指应用下的云引擎实例分组的生产环境。
  4. 我们推荐为 API 域名和云引擎域名配置独立 IP。API 服务只对独立(IP)入口提供可用性保证。未配置独立 IP 的云引擎服务默认会为静态站点优化,有一些对动态内容不那么友好的限制。详见下面的 API 域名、云引擎域名小节。
  5. 文件域名、使用共享 IP 的 API 域名、云引擎域名使用 CNAME 配置域名解析,因此不支持绑定裸域名,以免影响该域名下的其他域名的解析以及与 MX 等记录冲突。如果需要使用裸域名作为 API 域名或云引擎域名可以配置独立 IP 后使用 A 记录绑定。
  6. 一个应用(文件域名、API 域名)或分组(云引擎域名)上可以绑定多个域名,但文件服务返回的内部文件(托管在 LeanCloud 文件服务的文件)的 url 字段同一时间只能选择使用一个域名(可以在控制台切换)。

文件域名​

如果你的应用使用了文件服务,请前往 应用控制台 > 设置 > 域名绑定 > 文件访问域名 绑定文件域名。

注意,即使你并未使用数据存储服务,但是使用了即时通讯的多媒体消息(图像、音频、视频等),那么就有可能使用了文件服务。 一个简单的判断方法是到 控制台 > 数据存储 > 文件 > 文件管理 页面,如果其中有数据,就表明你的应用使用了文件服务。

绑定文件域名时,可以选择是否启用 HTTPS:

  • 不启用 HTTPS,则客户端只能通过 HTTP 访问。

  • 启用 HTTPS 后,客户端同时可以通过 HTTPS 和 HTTP 访问文件。但是,受限于文件服务提供商,无论客户端使用 HTTP URL 还是 HTTPS URL 访问:

    • 启用 HTTPS 域名的自定义文件域名的流量均按照 HTTPS 流量计费。
    • 同理,应用控制台的文件流量统计也总是归入 HTTPS 流量。

通过 控制台 > 数据存储 > 文件 > 设置 > 文件访问地址 更换文件域名后,之前托管在文件服务的文件 URL 会自动更新。 即时通讯历史消息(包括富媒体消息)中的 URL 不会自动更新。 类似地,如果开发者把文件 URL 单独保存在别的地方,更换文件域名后,需要在客户端自行实现相应的替换逻辑。 因此,我们建议开发者在开始使用文件服务和即时通讯服务时就绑定自定义文件域名,以免给以后迁移增加困难。

之前使用 LeanCloud 华东节点公共文件域名的旧应用,在绑定文件域名后,现存的使用共享域名的 URL 仍然可以访问。 如果绑定了多个文件域名,那么通过这些域名都可以访问托管在文件服务的文件(内部文件),但文件服务返回的内部文件的 URL 总是使用在前述「文件访问地址」中设置的域名。

如果在不同应用间绑定了 _File Class,那么需要在源应用绑定自定义文件域名,目标应用无需绑定自定义文件域名。

由于底层文件服务商的限制,如果你在底层文件服务商(七牛)处有账号,并且在自己的七牛账号绑定了泛域名(例如 *.example.com),那么该域名(example.com)下的所有子域名均无法绑定 LeanCloud 文件服务。 如在七牛取消泛域名绑定,下一个账期以后可以绑定该域名下的子域名至 LeanCloud 文件服务。

云引擎域名​

使用云引擎网站托管服务的应用,需要前往 应用控制台 > 设置 > 域名绑定 > 云引擎、ClientEngine 域名 绑定云引擎域名。

如前所述,仅使用云函数(包括 hook 函数)的应用,无需绑定云引擎域名,不过需要绑定 API 域名。

控制台绑定域名时,可以自动申请 SSL 证书。相应地,/.well-known/acme-challenge/ 路径用于验证,开发者无法使用该路径。

stg- 开头的自定义域名(例如 stg-web.example.com)会被自动地绑定到预备环境。

如前所述,我们推荐为云引擎配置独立 IP,未配置独立 IP 的云引擎服务默认会为静态站点优化,使用边缘节点为静态资源加速访问。但由于边缘节点的限制,对有些动态内容请求不怎么友好。下面的表格简单对比了两者:

独立入口加速节点
域名指向云引擎集群的独立 IP边缘节点
访问加速-✔️
(针对可缓存资源)
动态请求友好有限制
DDoS 防护2 Gbps 防护带宽
(可更换 IP 或接入清洗服务)
基础 DDoS 防护
流量费用0.8 元/GB
(每实例每天 1GB 免费额度)
0.36 元/GB
(回源流量依然按照普通域名收费)
DNS 解析A 记录CNAME 记录

如果你在云引擎上部署的是纯静态站点,比如静态生成的网站,前后端分离应用的前端部分,以及图片、文件等静态资源,那么,使用加速节点可以提升终端用户访问速度,在流量较高的情况下还能降低流量费用。

如果你在云引擎上部署提供动态内容的网站或服务,例如 API 服务或者服务端渲染的页面,推荐使用独立入口。一方面,对动态内容进行加速有可能会略微影响用户访问速度,并会同时产生加速流量费用与回源流量费用。另一方面,由于边缘节点的限制,使用边缘节点的云引擎服务在使用 WebSocket 连接、HTTP PATCH 方法、获取客户端 IP 时可能遇到问题,请求超时限制可能低至 10 秒。而使用 A 记录指向独立 IP 的云引擎站点使用独立入口,不经过边缘节点,没有上述限制。

对于混合内容的部署,例如常见的前后端分离的单页应用,在一个分组中同时提供静态的前端页面与动态的 API 服务,可以绑定两个域名,一个域名通过 A 记录指向独立 IP,另一个域名通过 CNAME 记录指向加速节点,通过前一个域名访问动态 API 服务,通过后一个域名访问静态资源。

你可以随时按需通过配置 DNS 选择域名指向的入口。 换言之,独立入口与加速节点的切换,只需在域名服务商处修改 DNS 解析,将 CNAME 记录替换为 A 记录或相反。

API 域名​

如果你使用了以下服务:

  • 结构化数据存储

  • 云函数(包括 hook 函数)

  • 即时通讯

  • 多人在线对战、排行榜

那么建议你前往 应用控制台 > 设置 > 域名绑定 > API 访问域名 绑定 API 域名。其中「结构化数据存储」和「云函数」两个模块是要求绑定自有域名的。

只使用推送和短信功能,且推送、短信均通过服务端发送,不涉及 UGC 内容的应用目前不强制要求绑定域名,但我们仍然建议用户绑定自己的 API 域名,以免受到共享域名可用性的影响。

我们推荐为 API 域名配置独立 IP。API 服务入口分为独立(IP)入口与共享入口,我们只对独立(IP)入口提供可用性保证。

共享入口有很多应用共同使用,风险较大,我们不对其提供可用性保证。通过以下方式访问 API 服务将使用不提供可用性保证的共享入口:

  • 使用已绑定,但是没有指向独立 IP 的自有域名

    你可以在命令行 dig 自有域名,检查解析结果是否指向独立 IP。 如果没有指向独立 IP,请前往自有域名的域名服务商处修改域名解析,将 CNAME 记录替换为指向独立 IP 的 A 记录。

  • 使用系统分配的测试域名

    我们为开发测试阶段的应用提供测试域名,这个域名仅供测试使用,可能被回收。正式上线的应用请绑定自有域名。测试域名可以在 控制台 > 设置 > 应用凭证 > 服务器地址 查看。

  • 使用旧版 SDK 且没有指定域名

    已绑定自有域名的应用,出于兼容性考虑,旧版本客户端仍可继续访问原来由 LeanCloud 提供的共享域名(旧版 SDK 会自动获取共享域名)。我们会视情况在未来合适的时候回收共享域名。我们强烈建议开发者推动用户升级到使用自定义域名的新版本客户端应用,以免业务受到不必要的影响。

  • 使用其他已停止支持的域名

    一些更老的、已停止支持的 SDK 使用的域名,我们很久以前已宣布停止支持。未来我们会停止在这些域名上提供 API 服务。

目前,绑定 API 域名后,即时通讯、LiveQuery 以及多人对战的 WebSocket 连接仍会使用共享域名。 这些共享域名虽然使用共享入口,但我们也会尽可能保证其可用。 我们后续会支持这类 WebSocket 连接使用自有域名。

另外,用户反馈组件 API 已弃用,但由于导出应用数据中不含用户反馈数据,为方便开发者迁移数据,用户反馈相关的 REST API 接口仍可调用,这些接口也仍然使用共享域名。

更新代码​

绑定自有 API 域名后,需要更新客户端代码以使用自定义域名。请参考各服务的开发指南进行配置。

以下部分假定绑定的自定义域名是 xxx.example.com,且开启了 HTTPS。

REST API​

参考 存储 REST API 使用指南 配置。

JavaScript SDK​

存储 SDK​

请参考 SDK 安装指南 配置。

旧版本的 SDK 请参考以下方法配置(建议使用最新版本的 SDK):

Details

>=3.5.5, <3.11.1 的版本可能会碰到仍然使用缓存默认配置的 bug,它可能会导致更新后的第一次请求失败。

AV.init({
// appId, appKey,
serverURLs: "https://xxx.example.com",
});

>= 3.0.0, <3.5.5

AV.init({
// appId, appKey,
serverURLs: {
push: "https://xxx.example.com",
stats: "https://xxx.example.com",
engine: "https://xxx.example.com",
api: "https://xxx.example.com",
},
});

<3.0.0 的数据存储 SDK 不支持自定义域名。

即时通讯 SDK​

请参考 即时通讯开发指南 配置。

旧版本的 SDK 请参考以下方法配置(建议使用最新版本的 SDK):

Details

>=4.0.0, <=4.3.1 的即时通讯 SDK 的 server 参数只能填写域名(不含协议),不支持未启用 HTTPS 的自定义域名:

new Realtime({
// appId, appKey,
server: "xxx.example.com",
});

<4.0.0 的即时通讯 SDK 不支持自定义域名。

如果使用了 LiveQuery 功能,建议使用 >=3.14.0 的存储 SDK。 旧版本(>=3.5.0, <=3.13.2)的 SDK 还需要在初始化的时候额外配置 LiveQuery 模块的域名:

AV.init({
// appId, appKey,
// serverURLs,
realtime: new AV._sharedConfig.liveQueryRealtime({
appId,
appKey,
server: "xxx.example.com",
}),
});

>=3.5.0, <3.13.2 的 SDK 不支持未启用 HTTPS 的自定义域名。

<3.5.0 存储 SDK 的 LiveQuery 不支持自定义域名。

多人在线对战​

请参考 入门指南 或 开发指南 进行配置。

微信小程序白名单​

前往 LeanCloud 控制台 > 设置 > 应用凭证 > 域名白名单,获取域名白名单(不同应用对应不同的域名)。

登录微信公众平台,前往 设置 > 开发设置 > 服务器配置 > 「修改」 链接,增加上述域名白名单中的域名。

Objective-C SDK​

请参考 SDK 安装指南 配置。

<12.0.0 的版本请参考以下方法配置:

Details
// 配置 SDK 储存 [AVOSCloud setServerURLString:@"https://xxx.example.com" forServiceModule:AVServiceModuleAPI]; // 配置 SDK 推送 [AVOSCloud setServerURLString:@"https://xxx.example.com" forServiceModule:AVServiceModulePush]; // 配置 SDK 云引擎(用于访问云函数,使用 API 自定义域名,而非云引擎自定义域名) [AVOSCloud setServerURLString:@"https://xxx.example.com" forServiceModule:AVServiceModuleEngine]; // 配置 SDK 即时通讯 [AVOSCloud setServerURLString:@"https://xxx.example.com" forServiceModule:AVServiceModuleRTM]; // 配置 SDK 统计 [AVOSCloud setServerURLString:@"https://xxx.example.com" forServiceModule:AVServiceModuleStatistics]; // 初始化应用 [AVOSCloud setApplicationId:@"APPID" clientKey:@"APPKEY"];
部分旧版本 SDK(< 8.2.3)存在 SSL Pinning,它可能导致配置后的自定义服务器地址无法使用,如果出现了「证书非法」的相关错误,请至少升级 SDK 到 8.2.3,建议升级至最新版。

<4.6.0 的版本不支持自定义域名。

Swift SDK​

>= 17.0.0 的版本请参考 SDK 安装指南 配置。

>= 16.1.0, < 17.0.0 的版本请参考以下方法配置:

Details
let configuration = LCApplication.Configuration(
customizedServers: [
.api("https://xxx.example.com"),
.engine("https://xxx.example.com"),
.push("https://xxx.example.com"),
.rtm("https://xxx.example.com")
]
)
do {
try LCApplication.default.set(
id: "APPID",
key: "APPKEY",
configuration: configuration
)
} catch {
fatalError("\(error)")
}

<16.1.0 的版本不支持自定义域名。

Java Unified SDK​

Java Unified SDK(>= 6.0.0)请参考 SDK 安装指南 配置。

旧版本 SDK 请参考以下方法配置:

Details

使用 Java Unified SDK(< 6.0.0)的 Android 项目,需在 Application 类的 onCreate 方法添加:

import cn.leancloud.AVOSCloud;

public class MyLeanCloudApp extends Application {
@Override
public void onCreate() {
super.onCreate();
// 配置 SDK 储存
AVOSCloud.setServer(AVOSService.API, "https://xxx.example.com");
// 配置 SDK 云引擎(用于访问云函数,使用 API 自定义域名,而非云引擎自定义域名)
AVOSCloud.setServer(AVOSService.ENGINE, "https://xxx.example.com");
// 配置 SDK 推送
AVOSCloud.setServer(AVOSService.PUSH, "https://xxx.example.com");
// 配置 SDK 即时通讯
AVOSCloud.setServer(AVOSService.RTM, "https://xxx.example.com");

// 提供 this、App ID 和 App Key 作为参数
// 注意这里千万不要调用 cn.leancloud.core.AVOSCloud 的 initialize 方法,否则会出现 NetworkOnMainThread 等错误。
AVOSCloud.initialize(this, "APPID", "APPKEY");
}
}

老的 Android SDK 请参考以下方法配置:

// 配置 SDK 储存
AVOSCloud.setServer(AVOSCloud.SERVER_TYPE.API, "https://xxx.example.com");
// 配置 SDK 云引擎
AVOSCloud.setServer(AVOSCloud.SERVER_TYPE.ENGINE, "https://xxx.example.com");
// 配置 SDK 推送
AVOSCloud.setServer(AVOSCloud.SERVER_TYPE.PUSH, "https://xxx.example.com");
// 配置 SDK 即时通讯
AVOSCloud.setServer(AVOSCloud.SERVER_TYPE.RTM, "https://xxx.example.com");
// 初始化应用
AVOSCloud.initialize(this, "APPID", "APPKEY");

<4.4.4 的 Android SDK 不支持自定义域名。

.NET SDK​

请参考 SDK 安装指南 配置。

< v20190925.1 的版本请参考以下方法配置:

Details
AVClient.Initialize(new AVClient.Configuration {
ApplicationId = "APPID",
ApplicationKey = "APPKEY",
ApiServer = new Uri("https://xxx.example.com"),
EngineServer = new Uri("https://xxx.example.com"),
PushServer = new Uri("https://xxx.example.com")
});

PHP & Python SDK​

注意,云引擎内部访问 API 是通过内网,所以不需要也不应该配置 API 自定义域名。 模板项目和云引擎网站托管开发指南中的示例代码均未配置 API 自定义域名,请勿设置自定义域名,以免变成公网访问,影响性能。

在云引擎以外的服务端使用 PHP 或 Python SDK,可以不配置 API 自定义域名。

App ID 后缀不为 -MdYXbMMI 的国际版应用如何初始化 SDK​

极个别国际版应用的 App ID 后缀不为 -MdYXbMMI(包括个别老应用以及进行过特殊配置迁移到国际版的应用)。 对于这些应用而言,初始化 SDK 时不配置自定义域名可能会报错 (因为较新版本的 SDK 增加了自定义域名配置参数的检查,检查时会根据 App ID 后缀判断是否为国际版应用)。 这些应用需要这样初始化 SDK:

Details

注意,请使用你的应用 App ID 的前 8 位替换以下 url 地址中的 aaaaaaaa。

JavaScript 存储

AV.init({
// appId, appKey,
serverURLs: {
push: "https://aaaaaaaa.push.lncldglobal.com",
stats: "https://aaaaaaaa.stats.lncldglobal.com",
engine: "https://aaaaaaaa.engine.lncldglobal.com",
api: "https://aaaaaaaa.api.lncldglobal.com",
},
});

JavaScript 即时通讯

请参考 即时通讯开发指南 配置。 其中 server 参数的值为 aaaaaaaa.rtm.lncldglobal.com。

JavaScript 多人在线对战

请参考 入门指南 或 开发指南 进行配置。 其中 playServer 参数的值为 aaaaaaaa.play.lncldglobal.com。

Objective-C

// 配置 SDK 储存 [AVOSCloud setServerURLString:@"https://aaaaaaaa.api.lncldglobal.com" forServiceModule:AVServiceModuleAPI]; // 配置 SDK 推送 [AVOSCloud setServerURLString:@"https://aaaaaaaa.push.lncldglobal.com" forServiceModule:AVServiceModulePush]; // 配置 SDK 云引擎(用于访问云函数,使用 API 自定义域名,而非云引擎自定义域名) [AVOSCloud setServerURLString:@"https://aaaaaaaa.engine.lncldglobal.com" forServiceModule:AVServiceModuleEngine]; // 配置 SDK 即时通讯 [AVOSCloud setServerURLString:@"https://aaaaaaaa.rtm.lncldglobal.com" forServiceModule:AVServiceModuleRTM]; // 配置 SDK 统计 [AVOSCloud setServerURLString:@"https://aaaaaaaa.stats.lncldglobal.com" forServiceModule:AVServiceModuleStatistics]; // 初始化应用 [AVOSCloud setApplicationId:@"APPID" clientKey:@"APPKEY"];

Swift

let configuration = LCApplication.Configuration(
customizedServers: [
.api("https://aaaaaaaa.api.lncldglobal.com"),
.engine("https://aaaaaaaa.engine.lncldglobal.com"),
.push("https://aaaaaaaa.push.lncldglobal.com"),
.rtm("https://aaaaaaaa.rtm.lncldglobal.com")
]
)
do {
try LCApplication.default.set(
id: "APPID",
key: "APPKEY",
configuration: configuration
)
} catch {
fatalError("\(error)")
}

Java

import cn.leancloud.AVOSCloud;

public class MyLeanCloudApp extends Application {
@Override
public void onCreate() {
super.onCreate();
// 配置 SDK 储存
AVOSCloud.setServer(AVOSService.API, "https://aaaaaaaa.api.lncldglobal.com");
// 配置 SDK 云引擎(用于访问云函数,使用 API 自定义域名,而非云引擎自定义域名)
AVOSCloud.setServer(AVOSService.ENGINE, "https://aaaaaaaa.engine.lncldglobal.com");
// 配置 SDK 推送
AVOSCloud.setServer(AVOSService.PUSH, "https://aaaaaaaa.push.lncldglobal.com");
// 配置 SDK 即时通讯
AVOSCloud.setServer(AVOSService.RTM, "https://aaaaaaaa.rtm.lncldglobal.com");

// 提供 this、App ID 和 App Key 作为参数
// 注意这里千万不要调用 cn.leancloud.core.AVOSCloud 的 initialize 方法,否则会出现 NetworkOnMainThread 等错误。
AVOSCloud.initialize(this, "APPID", "APPKEY");
}
}

.NET

AVClient.Initialize(new AVClient.Configuration {
ApplicationId = "APPID",
ApplicationKey = "APPKEY",
ApiServer = new Uri("https://aaaaaaaa.api.lncldglobal.com"),
EngineServer = new Uri("https://aaaaaaaa.engine.lncldglobal.com"),
PushServer = new Uri("https://aaaaaaaa.push.lncldglobal.com")
});

独立 IP​

在华北节点控制台(「右上角头像下拉菜单 > 账号设置 > 独立 IP」)可以查看当前账号使用的 API 独立 IP 和云引擎独立 IP,在同一页面也可以申请和解绑 IP。

申请独立 IP 后,在 LeanCloud 控制台新增域名绑定时,请按控制台提示到自有域名的域名服务商处添加 A 记录,指向独立 IP。 已经在 LeanCloud 绑定的自定义域名,只需在域名服务商处修改解析记录,将 CNAME 记录替换为 A 记录即可切换。

解绑 IP 前,请确保所有指向该 IP 的自定义域名均已修改解析记录,将相应 A 记录替换回 CNAME 记录。 由于 DNS 在整个互联网生效需要较长时间,修改解析记录后,请至少等待 48 小时再解绑 IP,以免影响服务。

独立 IP 是账户下所有应用共享的,但 API 服务和云引擎服务不可共用 IP。 如果你希望进一步隔离各应用的入口,也可以在控制台购买更多独立 IP。 在应用的域名绑定页会列出帐号下所有可用的 IP,你需要自行规划哪些应用使用哪些 IP。

每一个独立 IP 默认提供了 2 Gbps 的防护带宽,可以防护小规模的攻击,你也无需为此承担额外的费用。 如果攻击超出了默认的防护容量,IP 会被禁用,你可以购买一个新的 IP 进行更换。 或者你也可以将新的 IP 作为源站 IP 接入第三方清洗服务,请通过工单联系我们,我们会提供必要的支持。

独立 IP 的费用为人民币 50 元 / 个 / 月,购买每个 IP 时会扣除一个月的费用(50 元),从下个自然月起,每月 1 日按 50 元 / 个的标准进行扣费。 我们给华北节点名下有商用版应用的用户都赠送了一个 API 独立 IP,可以免费使用。

独立 IP 与账户绑定,不会随应用的转移而发生变化。为了避免影响服务,转移的应用如果不改变自定义域名的解析配置,那么还可以继续使用原来的独立 IP。

华东节点暂不支持在控制台自助绑定独立 IP,如有需求,可提交工单联系我们处理。

如果你有多个独立 IP,在通过修改域名解析切换独立 IP 前,可能希望验证通过新 IP 可以成功访问服务。 这种场景下可以使用 curl 的 --resolve 参数指定域名解析到特定的 IP(效果类似修改 /etc/hosts 文件)。 比如,验证 API 独立 IP:

curl --resolve 'api.example.com:443:YOUR-API-IP' https://api.example.com/1.1/date

正常情况下会返回包含当前时间的 JSON 格式数据。 验证云引擎独立 IP 同理:

curl --resolve 'engine.example.com:443:YOUR-ENGINE-IP' https://engine.example.com/

域名绑定​

绑定自定义域名前需要准备一个已经备案的域名,接下来我们详细介绍自定义域名绑定流程。

绑定域名过程中,控制台会提示相应的 DNS 配置,请按照控制台的提示到域名注册商或域名解析服务提供商处设置(如果自己架设域名解析服务器的话,请根据域名解析服务器文档配置)A 记录或 CNAME 记录。

以下使用已经备案的主域名 example.com 的子域名 api.example.com 为例,介绍自定义域名绑定流程:

控制台域名绑定界面

通过 LeanCloud 管理后台 -> 设置 -> 域名绑定页面开始,选择你需要绑定自定义域名的服务,然后点击绑定新域名。

上图以 API 访问域名 绑定为例,接下来,我们对绑定过程中的操作步骤进行单独说明:

  1. 我们要求使用二级域名(当你已备案的主域名为 example.com 时,可以在主域名前加上自定义字段形成新域名,这个域名就是二级域名)进行绑定。输入二级域名后,我们默认启用 SSL、强制使用 HTTPS 和 SSL 证书自动管理,如果自己有证书可以设置为手动,设置 SSL 证书可参考 SSL 证书。然后点击“绑定”按钮进行下一步。

  2. 输入绑定的域名后,后台会先检查该域名是否已经被其他应用绑定过(同一个域名不可重复绑定多个应用或多个服务),然后会检查域名备案信息。

  3. 当域名未备案时,会出现绑定失败的提示,这时需要对域名进行备案,可参考域名备案指南,或者使用其他已备案的域名重新进行绑定。

  4. 检查域名备案信息通过后,会提示配置 DNS,并且会显示推荐 DNS 配置,以及 CNAME 记录值。

  1. 根据上一步推荐的 DNS 配置到你的域名注册商或域名解析服务提供商处设置域名解析(例如:你的域名是通过腾讯云或者阿里云购买的,这时就需要你通过腾讯云或阿里云管理后台中的域名管理界面进行解析)。上图的第 5 步使用了百度云进行举例,大部分云服务商后台设置域名解析的路径大概均为控制台 -> 域名管理 -> 解析。进入域名解析页面后,按照以下说明添加解析记录即可。
    1. 主机记录:自定义的字段 + 主域名;例如我设置的自定义域名是 api.example.com,所以我只需填 api 即可;
    2. 记录类型:根据上步推荐的 DNS 配置选择对应的记录类型;例如:推荐 CNAME 为 XXX.XX.cn,因此解析时记录类型选择 CNAME 。
    3. 记录值:直接复制粘贴推荐的 DNS 配置的记录值。
    4. 其他解析线路、TTL 都可使用默认配置。

大多数域名注册商或域名解析服务提供商都提供图形化的设置界面,这样就不用直接写 DNS Zone 记录,按照其说明配置即可。如下,是通过另一个服务商进行域名解析,并设置 CNAME 记录。

以 DnsPod 添加 CNAME 记录为例

如果需要写 DNS Zone 记录,以 A 记录为例,假定控制台显示的 IP 为 0.0.0.0,那么对应的 DNS Zone 记录为:

api.example.com. 10800 IN A 0.0.0.0

其中 10800 为 TTL,可根据自己的需要设置。

再举一个 CNAME 的例子,假定绑定 xxx.example.com,控制台显示的 CNAME 目标值为 yyy.zzz.example,那么对应的 DNS Zone 记录为:

xxx.example.com.    10800   IN  CNAME   yyy.zzz.example.
  1. 以上 5 个步骤设置完成后,需要等待一段时间(一般在半小时以内),记录生效后,LeanCloud 控制台会显示「已绑定」。
tip

可以使用如下命令验证绑定的域名请求是否正常

curl https://{host}/1.1/ping

如果长时间卡在「等待配置 DNS」阶段,那么请点击「等待配置 DNS」后的问号图标,依其提示运行相应的 dig 命令检查域名解析记录是否生效。 如 dig 命令查不到相应的域名解析记录,请返回域名商控制台检查配置是否正确,如仍有疑问,请联系域名商客服。 如 dig 命令能查到预期的 CNAME 记录,但控制台仍显示「等待配置 DNS」,请通过工单或论坛联系我们。

SSL 证书​

在 LeanCloud 控制台绑定自定义域名时,可以选择自动管理 SSL 证书或手动管理 SSL 证书。 如果选择自动模式,LeanCloud 会自动申请、续期 Let's Encrypt 证书。 如果选择手动模式,则需要上传自己的 SSL 证书(通常是 .crt 或 .pem 文件)和 SSL 私钥(通常是 .key 文件),并在证书过期前自行续期及再次上传。 SSL 证书通常可以在你的域名服务商处购买,你也可以自行申请免费的证书。 Let's Encrypt 之外,比较知名的免费 SSL 证书提供商有 ZeroSSL、buypass、TrustAsia。

如果设置完成后,显示绑定失败,并且有这个报错提示:

issueCert for {host}: Authorization not found in HTTP response from {host} ;

因为工信部规定,网站接入多个云服务商时,需要在各云服务商处接入备案。这个报错是缺少对应的云服务商备案所导致的(如果是华东区的应用,很可能是缺少腾讯云备案);可以参考域名备案指南进行备案操作;

推荐阅读​

如需了解更多域名的基本知识,可以参考以下两篇文章:

  1. 域名背后那些事
  2. 域名之殇

视频教程​

可以参考视频教程:如何绑定域名及如何提交备案。

更多视频教程见开发者学堂。因为 SDK 功能在不断完善,视频教程可能出现与新版 SDK 功能不一致的地方,以当前文档为准。