当您使用部分 zone(CNAME 设置)时,Cloudflare 处理 DNS 记录的方式与主要 zone(完整设置)略有不同,以便在内部解析已代理 HTTP 请求发送到的源站服务器。
当您在部分 zone 中创建新的 DNS 记录时,Cloudflare 会自动检查是否有任何 CNAME 记录指向同一 zone 内现有的 A、AAAA 或 CNAME 记录。
例如,如果您的部分 zone 中有以下记录,Cloudflare 会显示警告:
sub1.partialzone.com CNAME sub2.partialzone.com
sub2.partialzone.com A 192.0.2.1由于 Cloudflare 同时包含 CNAME 及其目标,我们的 DNS 解析会将发往 sub1.partialzone.com 的传入 HTTP 请求发送到源站 192.0.2.1。
如果您在权威 DNS 提供商处已有 sub2.partialzone.com 的 DNS 记录,这可能会导致问题。这些记录可能指向 192.0.2.4、其他 IP 地址或其他域名——但由于 Cloudflare 包含初始记录和目标,它永远不会向权威 DNS 提供商查询 sub2.partialzone.com 的记录。
flowchart TD
accTitle: DNS resolution flow with CNAME target in same partial zone
A[Request to <code>sub1.partialzone.com</code>] --> B[<code>CNAME</code> record for <code>sub1.partialzone.com</code> to <code>sub2.partialzone.com</code>]
subgraph Cloudflare
B --> C[<code>A</code> record for <code>sub2.partialzone.com</code> to <code>192.0.2.1</code>]
end
C --> D[<code>192.0.2.1</code>]
subgraph Authoritative DNS
E[<code>A</code> record for <code>sub2.partialzone.com</code> to <code>192.0.2.4</code>]
end
当您避免这种情况时——即部分 zone 中没有 CNAME 记录的目标——DNS 解析会以不同方式进行。
flowchart TD
accTitle: DNS resolution flow with CNAME target not in partial zone
A[Request to <code>sub1.partialzone.com</code>] --> B[<code>CNAME</code> record for <code>sub1.partialzone.com</code> to <code>sub2.partialzone.com</code>]
B --> C[<code>A</code> record for <code>sub2.partialzone.com</code> to <code>192.0.2.4</code>]
C --> D[<code>192.0.2.4</code>]
subgraph Cloudflare
B
end
subgraph Authoritative DNS
C
end
您也可以在某个 zone(部分或完整)中创建 CNAME 记录,指向账户内另一个部分 zone 中的记录。
在这种情况下,Cloudflare 始终根据 CNAME 目标 zone 的权威 DNS 提供商处的值解析 CNAME 目标。
flowchart TD
accTitle: DNS resolution flow with CNAME target in a zone within the same account
A[Request to <code>www\.alice.com</code>] --> B[<code>CNAME</code> record for <code>www\.alice.com</code> to <code>www\.partialzone.com</code>]
B --> C[<code>A</code> record for <code>www\.partialzone.com</code> to <code>192.0.2.4</code>]
C --> D[<code>192.0.2.4</code>]
subgraph Cloudflare account
subgraph Cloudflare zone 1
B
end
subgraph Cloudflare zone 2
E[<code>A</code> record for <code>www\.partialzone.com</code> to <code>203.0.113.1</code>]
end
end
subgraph Authoritative DNS
C
end
考虑以下场景:
- 目标 zone(本例中的 Cloudflare zone 2)是部分 zone,且部分 zone 上的 DNS 记录已代理。
- 权威 DNS 服务器上的 DNS 记录指向
cdn.cloudflare.net
如果存在此类设置,子域名(本例中为 www.partialzone.com)将解析到 Cloudflare 代理 IP,最终导致错误。请考虑改用 custom hostnames 和 O2O 设置。
flowchart TD
accTitle: DNS resolution flow with CNAME target in a zone within the same account and auth DNS pointing to cdn.cloudflare.net
A[Request to <code>www\.alice.com</code>] --> B[<code>CNAME</code> record for <code>www\.alice.com</code> to <code>www\.partialzone.com</code>]
B --> C[<code>CNAME</code> record for <code>www\.partialzone.com</code> to <code>www\.partialzone.com.cdn.cloudflare.net</code>]
C --> D[<code>Cloudflare proxy IP</code>]
subgraph Cloudflare account
subgraph Cloudflare zone 1
B
end
subgraph Cloudflare zone 2
E[Proxied <code>A</code> record for <code>www\.partialzone.com</code> to <code>203.0.113.1</code>]
end
end
subgraph Authoritative DNS
C
end