域名绑定指南
根据法律法规和有关部门的要求,使用云服务需要绑定一个已经在工信部备案过的域名。绑定自有域名也有利于从域名层面做好应用隔离,确保业务稳定。
这篇指南假定你了解域名解析的基本知识,如果你不太熟悉这方面的内容,可以参考这篇文章。
本指南面向国内版应用的开发者。
以下服务需绑定域名
使用 TDS 的数据存储、云引擎和公告服务要求必须绑定自有域名,其他服务可选是否绑定自有域名。 我们提供了 API 共享域名和文件共享域名,但是请注意,共享域名没有可用性保证,容易受到 DDoS 攻击影响。我们建议在生产环境中使用绑定的自定义域名。
自定义域名的种类
国内节点服务涉及以下几种自定义域名:
域名种类 | 涉及服务 | 在工信部备案 | 在 TDS 备案或接入备案 | SSL | 绑定目标 | 静态资源加速 |
---|---|---|---|---|---|---|
文件域名 | 文件服务、云存档 | 必须 | 可选 | 可选 | 应用 | 是 |
云引擎域名 | 云引擎 网站托管 | 必须 | 必须 | 可选 | 分组 | 视情况 |
API 域名 | 存储、排行榜、内建账户、好友、成就、实时语音、即时通讯、推送、云函数、云存档 | 必须 | 必须 | 必须 | 应用 | 否 |
公告系统域名 | 公告系统 | 必须 | 可选 | 必须 | 应用 | 是 |
说明:
- 可以使用同一主域名下不同的子域名,每个子域名只能绑定到一个应用,且同一应用的 API 服务、云引擎网站托管服务、文件服务需绑定不同的子域名。
- API 域名需要启用 SSL,绑定时会自动申请 SSL 证书,当然你也可以自行上传证书。
- 绑定目标中的「分组」指应用下的云引擎实例分组的生产环境。
- 我们推荐为 API 域名和云引擎域名配置独立 IP。API 服务只对独立(IP)入口提供可用性保证。未配置独立 IP 的云引擎服务默认会为静态站点优化,有一些对动态内容不那么友好的限制。详见下面的 API 域名、云引擎域名小节。
- 文件域名、使用共享 IP 的 API 域名、云引擎域名使用 CNAME 配置域名解析,因此不支持绑定裸域名,以免影响该域名下的其他域名的解析以及与 MX 等记录冲突。如果需要使用裸域名作为 API 域名或云引擎域名可以配置独立 IP 后使用 A 记录绑定。
- 一个应用(文件域名、API 域名)或分组(云引擎域名)上可以绑定多个域名,但文件服务返回的内部文件(托管在 TDS 文件服务的文件)的
url
字段同一时间只能选择使用一个域名(可以在控制台切换)。
文件域名
如果你的应用使用了文件服务,请前往 开发者中心 > 游戏服务 > 应用配置 > 基本信息 > 域名配置 > 文件 绑定文件域名。
注意,即使你并未使用数据存储服务,但是使用了即时通讯的多媒体消息(图像、音频、视频等),那么就有可能使用了文件服务。 一个简单的判断方法是到 开发者中心 > 游戏服务 > 云服务 > 数据存储 > 文件 > 文件管理 页面,如果其中有数据,就表明你的应用使用了文件服务。
绑定文件域名时,可以选择是否启用 HTTPS:
不启用 HTTPS,则客户端只能通过 HTTP 访问。
启用 HTTPS 后,客户端同时可以通过 HTTPS 和 HTTP 访问文件。但是,受限于文件服务提供商,无论客户端使用 HTTP URL 还是 HTTPS URL 访问:
- 启用 HTTPS 域名的自定义文件域名的流量均按照 HTTPS 流量计费。
- 同理,应用控制台的文件流量统计也总是归入 HTTPS 流量。
通过 开发者中心 > 游戏服务 > 云服务 > 数据存储 > 文件 > 设置 > 文件访问地址 更换文件域名后,之前托管在文件服务的文件 URL 会自动更新。 即时通讯历史消息(包括富媒体消息)中的 URL 不会自动更新。 类似地,如果开发者把文件 URL 单独保存在别的地方,更换文件域名后,需要在客户端自行实现相应的替换逻辑。 因此,我们建议开发者在开始使用文件服务和即时通讯服务时就绑定自定义文件域名,以免给以后迁移增加困难。
之前使用公共文件域名的旧应用,在绑定文件域名后,现存的使用共享域名的 URL 仍然可以访问。 如果绑定了多个文件域名,那么通过这些域名都可以访问托管在文件服务的文件(内部文件),但文件服务返回的内部文件的 URL 总是使用在前述「文件访问地址」中设置的域名。
由于底层文件服务商的限制,如果你在底层文件服务商(七牛)处有账号,并且在自己的七牛账号绑定了泛域名(例如 *.example.com
),那么该域名(example.com
)下的所有子域名均无法绑定 TDS 文件服务。
如在七牛取消泛域名绑定,下一个账期以后可以绑定该域名下的子域名至 TDS 文件服务。
云引擎域名
使用云引擎网站托管服务的应用,需要前往 开发者中心 > 游戏服务 > 应用配置 > 基本信息 > 域名配置 > 云引擎 绑定云引擎域名。
如前所述,仅使用云函数(包括 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 域名。其中「结构化数据存储」和「云函数」两个模块是要求绑定自有域名的。
我们为每个绑定了 API 自定义域名的应用赠送了独立 IP。API 服务入口分为独立(IP)入口与共享入口,我们只对独立(IP)入口提供可用性保证。
共享入口有很多应用共同使用,风险较大,我们不对其提供可用性保证。通过以下方式访问 API 服务将使用不提供可用性保证的共享入口:
使用已绑定,但是没有指向独立 IP 的自有域名
你可以在命令行
dig
自有域名,检查解析结果是否指向独立 IP。 如果没有指向独立 IP,请前往自有域名的域名服务商处修改域名解析,将 CNAME 记录替换为指向独立 IP 的 A 记录。使用系统分配的测试域名
我们为开发测试阶段的应用提供测试域名,这个域名仅供测试使用,可能被回收。正式上线的应用请绑定自有域名。测试域名可以在 开发者中心 > 游戏服务 > 应用配置 > 基本信息 > 域名配置 > API > 共享域名 查看。
目前,绑定 API 域名后,即时通讯、LiveQuery 以及多人对战的 WebSocket 连接仍会使用共享域名。 这些共享域名虽然使用共享入口,但我们也会尽可能保证其可用。 我们后续会支持这类 WebSocket 连接使用自有域名。
更新代码
绑定自有 API 域名后,需要更新客户端代码以使用自定义域名。请参考各服务的开发指南进行配置。
公告系统域名
如果你用到了公告系统服务,那么你需要前往 开发者中心 > 游戏服务 > 应用配置 > 基本信息 > 域名配置 > 公告 绑定公告系统域名。
配置域名后需要更新客户端代码以使用自定义域名,请参考 公告系统开发指南。
在国内节点公告系统必须使用自定义域名访问,自定义域名会默认开启 CDN 加速。
独立 IP
我们为每个绑定了 API 自定义域名的应用赠送了独立 IP。绑定 API 自定义域名,并在客户端 SDK 初始化时指定 API 自定义域名,即可使用独立 IP。
云引擎独立 IP 可按需购买。
域名绑定
绑定自定义域名前需要准备一个已经备案的域名,接下来我们详细介绍自定义域名绑定流程。
绑定域名过程中,控制台会提示相应的 DNS 配置,请按照控制台的提示到域名注册商或域名解析服务提供商处设置(如果自己架设域名解析服务器的话,请根据域名解析服务器文档配置)A 记录或 CNAME 记录。
以下使用已经备案的主域名 example.com
的子域名 api.example.com
为例,介绍自定义域名绑定流程:
通过开发者管理后台 -> 游戏服务 -> 应用配置 -> 域名配置页面开始,选择你需要绑定自定义域名的服务,然后点击绑定新域名。
上图以 云服务 API 绑定为例,接下来,我们对绑定过程中的操作步骤进行单独说明:
我们要求使用二级域名(当你已备案的主域名为
example.com
时,可以在主域名前加上自定义字段形成新域名,这个域名就是二级域名)进行绑定。输入二级域名后,我们默认启用 SSL、强制使用 HTTPS 和 SSL 证书自动管理,如果自己有证书可以设置为手动,设置 SSL 证书可参考 SSL 证书。然后点击“绑定”按钮进行下一步。输入绑定的域名后,后台会先检查该域名是否已经被其他应用绑定过(同一个域名不可重复绑定多个应用或多个服务),然后会检查域名备案信息。
当域名未备案时,会出现绑定失败的提示,这时需要对域名进行备案,可参考域名备案指南,或者使用其他已备案的域名重新进行绑定。
检查域名备案信息通过后,会提示配置 DNS,并且会显示推荐 DNS 配置,当绑定的服务选择云服务 API,推荐的 DNS 配置为 A 记录。当绑定服务选择的是云引擎、文件、公告,推荐的 DNS 配置为 CNAME 记录,并都会提供推荐的记录值。
- 根据上一步推荐的 DNS 配置到你的域名注册商或域名解析服务提供商处设置域名解析(例如:你的域名是通过腾讯云或者阿里云购买的,这时就需要你通过腾讯云或阿里云管理后台中的域名管理界面进行解析)。上图的第 5 步使用了百度云进行举例,大部分云服务商后台设置域名解析的路径大概均为控制台 -> 域名管理 -> 解析。进入域名解析页面后,按照以下说明添加解析记录即可。
- 主机记录:自定义的字段 + 主域名;例如我设置的自定义域名是
api.example.com
,所以我只需填api
即可; - 记录类型:根据上步推荐的 DNS 配置选择对应的记录类型;例如:云服务 API 推荐为 A 记录,因此解析时,记录类型也选择 A 记录;
- 记录值:直接复制粘贴推荐的 DNS 配置的记录值。
- 其他解析线路、TTL 都可使用默认配置。
- 主机记录:自定义的字段 + 主域名;例如我设置的自定义域名是
大多数域名注册商或域名解析服务提供商都提供图形化的设置界面,这样就不用直接写 DNS Zone 记录,按照其说明配置即可。如下,是通过另一个服务商进行域名解析,并设置 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.
- 以上 5 个步骤设置完成后,需要等待一段时间(一般在半小时以内),记录生效后,TDS 控制台会显示「已绑定」。
可以使用如下命令验证绑定的域名请求是否正常
curl https://{host}/1.1/ping
如果长时间卡在「等待配置 DNS」阶段,那么请点击「等待配置 DNS」后的问号图标,依其提示运行相应的 dig 命令检查域名解析记录是否生效。 如 dig 命令查不到相应的域名解析记录,请返回域名商控制台检查配置是否正确,如仍有疑问,请联系域名商客服。 如 dig 命令能查到预期的 CNAME 记录,但控制台仍显示「等待配置 DNS」,请通过工单或论坛联系我们。
SSL 证书
在 TDS 控制台绑定自定义域名时,可以选择自动管理 SSL 证书或手动管理 SSL 证书。
如果选择自动模式,TDS 会自动申请、续期 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} ;
因为工信部规定,网站接入多个云服务商时,需要在各云服务商处接入备案。这个报错是缺少对应的云服务商备案所导致的(如果是华东区的应用,很可能是缺少腾讯云备案);可以参考域名备案指南进行备案操作;
推荐阅读
如需了解更多域名的基本知识,可以参考以下两篇文章: