了解如何使用 Cloudflare API 或 Cloudflare 的 CLI 工具 flarectl 一次向 Cloudflare 添加多个站点(10 个以上)。
概述
如果需要一次向 Cloudflare 添加多个站点(10 个以上),可以通过 Cloudflare API 来完成。在以下情况下添加多个站点非常有用:
- 将多个域名映射回单个规范域名,例如您希望 Cloudflare 保护的不同国家/地区(.com.au、.co.uk 等)的域名
- 您是代理商或 IT 咨询公司,并为您的客户管理多个域名(注意:您应该考虑 Cloudflare 合作伙伴计划)
- 您要将现有的一组网站转移到 Cloudflare
使用 API,您可以快速地添加多个站点,特别是您已熟悉如何更改名称服务器或添加 DNS 记录的情况下。
先决条件
要通过自动化将多个站点添加到 Cloudflare,您需要:
- 一个现有的 Cloudflare 帐户(注册 / 登录)
- 基本熟悉命令行
- 已安装 curl(macOS 和 Linux 上默认安装)
- 您的 Cloudflare API 密钥
- 要添加的域名列表(每行一个域名,使用换行符分隔,例如“domains.txt”)
通过 API 添加域名
Cloudflare 具有功能齐全的 API(文档),允许您自动创建新域名,以及配置 DNS 记录、页面规则和诸多安全设置。我们将使用此 API 自动同时添加多个域名。
打开您的终端应用程序(例如 Terminal 或 Terminal.app),并设置您的 API 密钥和电子邮件:
export [email protected].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 '{"account": {"id": "id_of_that_account"}, "name":"'$domain'","jump_start":true}'; done
“jump_start”键会使 Cloudflare 自动尝试扫描常见 DNS 记录,例如“www”、“mail”和“blog”等等;这样,您就不必手动配置它们(但仍然要确认我们已全部找到它们)。id_of_that_account 可在 Cloudflare 概述应用的帐户 ID 下找到。
API 会返回响应,包括您需要在您的注册商处(您注册域名的地方)更改的名称服务器。
{
"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": "[email protected]"
},
"account": {
"id": "abc123def456ghi789",
"name": "[email protected]"
},
"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" ]
复制提供给您的值(不是上面的值)并在您的注册商处更新名称名服务器。
通过 flarectl(Cloudflare 的 CLI 工具)添加域名
您还可以使用 Cloudflare 的官方 CLI 工具 flarectl 添加域名。您可以为您的操作系统(Windows、macOS/Darwin、Linux)下载预建程序包,并用来创建域名。
您需要先设置 API 凭据:
export [email protected]
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
在 Cloudflare 社区中搜索帮助或提示。
常见问题
如果此过程中返回了任何错误,则域名可能未注册(或刚刚注册),或者它是子域或无效。以下文章介绍了最常见的情况: