通过自动化将多个站点添加到 Cloudflare
了解如何使用 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 CF_API_EMAIL=you@example.comexport 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": "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"]
复制提供给您的值(不是上面的值)并在您的注册商处 更新名称名服务器。
通过 flarectl(Cloudflare 的 CLI 工具)添加域名
您还可以使用 Cloudflare 的官方 CLI 工具 flarectl 添加域名。您可以为您的操作系统(Windows、macOS/Darwin、Linux) 下载预建程序包,并用来创建域名。
您需要先设置 API 凭据:
export CF_API_EMAIL=you@example.comexport 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 社区中搜索帮助或提示。
常见问题
如果此过程中返回了任何错误,则域名可能未注册(或刚刚注册),或者它是子域或无效。以下文章介绍了最常见的情况: