跳转到内容
搜索文档

通过自动化添加多个站点

最后更新 查看 MarkdownAgent 设置

要通过 Cloudflare API 一次性更高效地添加多个站点到 Cloudflare,可以使用自动化方式。

在以下情况下,批量添加多个站点很有用:

  • 有多个域名映射到单个规范域名(常见于不同国家的域名,如 .com.au.co.uk,您希望由 Cloudflare 保护)。
  • 您是合作伙伴、代理商或 IT 咨询公司,代表客户管理多个域名。
  • 您正在将现有的一组站点迁移到 Cloudflare。

使用 API 可以让您快速高效地添加多个站点,尤其当您已熟悉如何更改 nameserver添加 DNS 记录时。

本教程假设域名将使用主 DNS 设置(完整)添加。


前提条件

要通过自动化向 Cloudflare 添加多个站点,您需要:


1. 添加域名

  1. 创建要添加的域名列表,每行一个域名(以换行符分隔),保存在 domains.txt 等文件中。
  2. 创建 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
  1. 打开命令行并运行:
bash add-multiple-zones.sh

添加域名后,它将处于 Pending Nameserver Update 状态。

其他选项

jq

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

2. 更新 nameserver

要使每个域名在 Cloudflare 上激活,必须在完整设置部分设置中激活。以下脚本将输出包含每个域名关联 nameserver 的列表。

可在以下位置找到 zone 的 nameserver:

  1. 修改脚本 add-multiple-zones.sh,从 Create Zone JSON 响应打印 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
  1. 使用 NAME SERVERS(名称服务器) 列中的值,在每个域名的注册商处更新 nameserver

限制

一次可添加的域名数量有限制——具体来说,每 10 分钟最多只能注册 25 个域名。

此外,如果您拥有超过 50 个域名,且其中待激活的域名多于已激活的域名,您将被阻止添加更多域名。建议等待待激活站点激活后再添加更多域名。

常见问题

如果此过程中返回任何错误,该域名可能未注册(或刚刚注册)、是子域名,或以其他方式无效。更多详情,请参阅无法添加域名

这篇文档对您有帮助吗?