通过自动化将多个站点添加到 Cloudflare

如果您要同时向 Cloudflare 添加多个站点(10+),可以通过 Cloudflare API 执行此操作。在以下情况下添加多个站点非常有用:

  • 将多个域名映射回单个规范域名,例如您希望 Cloudflare 保护的不同国家/地区(.com.au、.co.uk 等)的域名
  • 您是代理商或 IT 咨询公司,并为您的客户管理多个域名(注意:您应该考虑我们的合作伙伴计划!)
  • 您正在将现有的一组现存网站移至 Cloudflare

使用 API,您可以快速地添加多个站点,特别是您已熟悉如何更改域名服务器添加 DNS 记录的情况下。

前提条件

您需要:

  • 一个现有的 Cloudflare 账户(注册 / 登录
  • 基本熟悉命令行
  • 已安装 curl(macOS 和 Linux 上默认安装)
  • 您的 Cloudflare API 密钥
  • 要添加的域名列表,每个域名都在单独一行上使用换行符分隔 - 例如“domains.txt”

通过 API 添加域名

Cloudflare 具有功能齐全的 API(API文档),允许您自动创建新域名,以及配置 DNS 记录、Page Rule 和我们的安全设置。我们将使用此 API 自动同时添加多个域名。

打开您的终端(例如 Terminal 或 Terminal.app)并设置您的 API 密钥和电子邮件 -

export CF_API_EMAIL=you@example.com
export CF_API_KEY=abc123def456ghi789

然后,我们将编写一个简单的 for 循环来获取每个域名 

for domain in $(cat domains.txt); do \
curl -X POST -H "X-Auth-Key: $CF_API_KEY" -H "X-Auth-Email: $CF_API_EMAIL" \
-H "Content-Type: application/json" \
"https://api.cloudflare.com/client/v4/zones" \
--data '{"name":"'$domain'","jump_start":true}'; done

“jump_start”键将使 Cloudflare 自动尝试扫描常见的 DNS 记录,例如 “www”、“mail”、“blog”和许多其他记录,这样你就不必手动配置它们(您仍然应该在自动添加后再次确认我们发现了全部所需记录)。

API 会返回响应,包括您需要在您的 registrar 处(您注册域名的地方)更改的域名服务器

{
"result": {
"id": "abc123def456ghi789",
"name": "example.com",
"status": "pending",
"paused": false,
"type": "full",
"development_mode":0,
"name_servers": [
"chad.ns.cloudflare.com",
"lucy.ns.cloudflare.com"
],
"original_name_servers": [
"ns-cloud-e1.googledomains.com",
"ns-cloud-e2.googledomains.com",
"ns-cloud-e3.googledomains.com",
"ns-cloud-e4.googledomains.com"
],
"original_registrar": null,
"original_dnshost": null,
"modified_on":"2018-02-12T01:42:13.827149Z",
"created_on":"2018-02-12T01:42:13.827149Z",
"meta": {
"step":4,
"wildcard_proxiable": false,
"custom_certificate_quota":0,
"page_rule_quota":3,
"phishing_detected": false,
"multiple_railguns_allowed": false
},
"owner": {
"id": "abc123def456ghi789",
"type": "user",
"email": "you@example.com"
},
"account": {
"id": "abc123def456ghi789",
"name": "you@example.com"
},
"permissions": [
"#access:edit",
"#access:read",
"#analytics:read",
"#app:edit",
"#billing:edit",
"#billing:read",
"#cache_purge:edit",
"#dns_records:edit",
"#dns_records:read",
"#lb:edit",
"#lb:read",
"#logs:read",
"#member:edit",
"#member:read",
"#organization:edit",
"#organization:read",
"#ssl:edit",
"#ssl:read",
"#subscription:edit",
"#subscription:read",
"#waf:edit",
"#waf:read",
"#worker:edit",
"#worker:read",
"#zone:edit",
"#zone:read",
"#zone_settings:edit",
"#zone_settings:read"
],
"plan": {
"id":"0feeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
"name":"Free Website",
"price":0,
"currency":"USD",
"frequency": "",
"is_subscribed": true,
"can_subscribe": false,
"legacy_id": "free",
"legacy_discount": false,
"externally_managed": false
}
},
"success": true,
"errors": [],
"messages": []
}

请注意响应中的“name_servers”键。对于您在账户下添加的所有网站,这些通常会是同一对,例如

"name_servers": [
   "chad.ns.cloudflare.com",
   "lucy.ns.cloudflare.com"
 ]

复制提供给您的域名服务器(不是以上样例之中提供的服务器)并在您的 registrar 处更新域名服务器

通过 flarectl(Cloudflare 的 CLI 工具)添加域名

您还可以使用 Cloudflare 的官方 CLI——flarectl 添加域名。您可以为您的操作系统(Windows、macOS/Darwin、Linux)下载预建程序包,并用来创建域名。

您需要先设置 API 凭据:

export CF_API_EMAIL=you@example.com
export CF_API_KEY=abc123def456ghi789

...然后在 flarectl 中运行以下命令:

for domain in $(cat domains.txt); do flarectl zone create --zone=$domain --jumpstart=false; done

在此之后,可以通过“flarectl zone list”获取每个域的域名服务器:

for domain in $(cat domains.txt); do flarectl zone info --zone=$domain; done

常见问题

如果在此过程中返回任何错误,则域名可能未注册(或刚刚注册),或是子域,或者无效。以下文章介绍了最常见的情况:

Not finding what you need?

95% of questions can be answered using the search tool. This is the quickest way to get a response.

由 Zendesk 提供技术支持