要通过 Cloudflare API 一次性更高效地添加多个站点到 Cloudflare,可以使用自动化方式。
在以下情况下,批量添加多个站点很有用:
- 有多个域名映射到单个规范域名(常见于不同国家的域名,如
.com.au、.co.uk,您希望由 Cloudflare 保护)。 - 您是合作伙伴 ↗、代理商或 IT 咨询公司,代表客户管理多个域名。
- 您正在将现有的一组站点迁移到 Cloudflare。
使用 API 可以让您快速高效地添加多个站点,尤其当您已熟悉如何更改 nameserver或添加 DNS 记录时。
本教程假设域名将使用主 DNS 设置(完整)添加。
要通过自动化向 Cloudflare 添加多个站点,您需要:
-
现有的 Cloudflare 账户。
-
带有
curl的命令行 -
具有以下权限之一的 Cloudflare API 令牌:
- Zone 级
Administrator - Zone 级
Zone: Edit和DNS: Edit - 账户级
Domain Administrator
- Zone 级
-
已在域名注册商(购买域名的地方)为每个域名禁用 DNSSEC。
各提供商 DNSSEC 说明
以下并非完整列表,但这些链接可能有帮助:
- 创建要添加的域名列表,每行一个域名(以换行符分隔),保存在
domains.txt等文件中。 - 创建 bash 脚本
add-multiple-zones.sh并添加以下内容。将domains.txt放在同一目录,或相应更新其路径。
for domain in $(cat domains.txt); do
printf "Adding ${domain}:\n"
curl https://api.cloudflare.com/client/v4/zones \
--header "Authorization: Bearer <API_TOKEN>" \
--header "Content-Type: application/json" \
--data '{
"account": {
"id":"<ACCOUNT_ID>"
},
"name": "'"$domain"'",
"type": "full"
}'
printf "\n\n"
done- 打开命令行并运行:
bash add-multiple-zones.sh添加域名后,它将处于 Pending Nameserver Update 状态。
jq ↗ 是一个解析并美化 JSON 输出的命令行工具。
完成本教程中任何其他选项步骤都需要此工具。
echo '{"foo":{"bar":"foo","testing":"hello"}}' | jq .有关更多信息,请参阅 jq 文档 ↗。
Cloudflare 提供快速扫描,帮助填充 zone 的 DNS 记录。该扫描是基于常用记录名称和类型预定义列表的最佳努力尝试。
此 API 调用需要域名 ID。可在以下位置找到:
使用上述第一个选项配合 jq,修改脚本 add-multiple-zones.sh 以提取域名 ID 并运行后续 API 调用进行 DNS 记录快速扫描。
for domain in $(cat domains.txt); do
printf "Adding ${domain}:\n"
add_output=`curl https://api.cloudflare.com/client/v4/zones \
--header "Authorization: Bearer <API_TOKEN>" \
--header "Content-Type: application/json" \
--data '{
"account": {
"id":"<ACCOUNT_ID>"
},
"name": "'"$domain"'",
"type": "full"
}'`
echo $add_output | jq .
domain_id=`echo $add_output | jq -r .result.id`
printf "\n\n"
printf "DNS quick scanning ${domain}:\n"
scan_output=`curl --request POST https://api.cloudflare.com/client/v4/zones/$domain_id/dns_records/scan \
--header "X-Auth-Email: <EMAIL>" \
--header "X-Auth-Key: <API_KEY>"`
echo $scan_output | jq .
done要使每个域名在 Cloudflare 上激活,必须在完整设置或部分设置中激活。以下脚本将输出包含每个域名关联 nameserver 的列表。
可在以下位置找到 zone 的 nameserver:
- 修改脚本
add-multiple-zones.sh,从Create ZoneJSON 响应打印 CSV 数据。
for domain in $(cat domains.txt); do
printf "Adding ${domain}:\n"
add_output=`curl https://api.cloudflare.com/client/v4/zones \
--header "Authorization: Bearer <API_TOKEN>" \
--header "Content-Type: application/json" \
--data '{
"account": {
"id": "<ACCOUNT_ID>"
},
"name": "'"$domain"'",
"type": "full"
}'`
# Create csv of nameservers
echo $add_output | jq -r '[.result.name,.result.id,.result.name_servers[]] | @csv' >> /tmp/domain_nameservers.csv
domain_id=`echo $add_output | jq -r .result.id`
printf "\n\n"
printf "DNS quick scanning ${domain}:\n"
scan_output=`curl --request POST https://api.cloudflare.com/client/v4/zones/$domain_id/dns_records/scan \
--header "X-Auth-Email: <EMAIL>" \
--header "X-Auth-Key: <API_KEY>"`
echo $scan_output | jq .
done
printf "name_servers are saved in /tmp/domain_nameservers"
cat /tmp/domain_nameservers.csv| ID | ZONE | NAME SERVERS |
|---|---|---|
| <ZONE_ID> | example.com |
arya.ns.cloudflare.com, tim.ns.cloudflare.com |
- 使用 NAME SERVERS(名称服务器) 列中的值,在每个域名的注册商处更新 nameserver。
一次可添加的域名数量有限制——具体来说,每 10 分钟最多只能注册 25 个域名。
此外,如果您拥有超过 50 个域名,且其中待激活的域名多于已激活的域名,您将被阻止添加更多域名。建议等待待激活站点激活后再添加更多域名。
如果此过程中返回任何错误,该域名可能未注册(或刚刚注册)、是子域名,或以其他方式无效。更多详情,请参阅无法添加域名。