Workers 的 Routes 和 Custom Domains 有什么区别?

同一个 zone 里,一个 Worker 想直接 fetch() 另一个 Worker,只有挂在 Custom Domain 上的才行;挂在 Route 上的,得用 service binding。入口选错,后面调用关系就要跟着改。

区别在于 Worker 的位置:Custom Domain 里 Worker 就是这个主机名的源站,Route 里 Worker 站在已有源站前面。Worker 就是整个应用时用 Custom Domain,Worker 只是挡在老服务前面做鉴权、改写、缓存时用 Route。

这个差别决定了 DNS 谁来管、能不能用通配符、Worker 之间怎么互相调用。下面逐个问题说。

workers.dev 能当生产入口吗?

不建议。每个 Worker 自动有一个 workers.dev 子域名,可以关闭,适合起步和内部测试;官方建议生产环境用 Route 或 Custom Domain,而不是 workers.dev。

Custom Domain 是怎么工作的?

Custom Domain 把一个域名或子域名直接指给 Worker,Worker 就是这个主机名的源站。Cloudflare 自动创建 DNS 记录和证书,所以你不用自己管 DNS。

官方文档给了几个限制:

  • 域名所在的 zone 要在 Cloudflare,且该主机名上没有已存在的 CNAME。
  • 只按主机名匹配,不支持通配,路径和查询参数被忽略。

Route 是怎么工作的?

Route 按 URL 模式(如 example.com/api/*)匹配 zone 内的请求,Worker 位于已有源站之前。

  • 你需要自己管理一条已代理(proxied)的 DNS 记录。没有的话,请求连不上,表现是域名解析失败,不是 Worker 报错。Custom Domain 没有这个问题,因为 DNS 是自动创建的。
  • 模式里 * 是唯一的通配符,不允许中缀通配,最具体的模式优先。

两种入口在配置里怎么写?

{
  "routes": [
    { "pattern": "shop.example.com", "custom_domain": true },
    { "pattern": "example.com/api/*", "zone_name": "example.com" }
  ]
}

第一条是 Custom Domain,第二条是 Route。

怎么选?

Worker 就是整个应用(SSR、API、静态站点)时用 Custom Domain,配置最少。Worker 只是挡在老服务前面时用 Route。

还有两个容易忽略的点:

  • 同一 zone 内,Worker 之间的 fetch() 只有 Custom Domain 可以直接调用,Route 则需要 service binding 才行。service binding 本身见 wrangler 与绑定。
  • Route 如果不绑定任何 Worker,会让匹配的请求绕过 Workers,可以用来给某个子路径「开洞」。

入口配好之后,版本怎么发、出问题怎么退,见 Cloudflare Workers 部署出问题了,怎么回滚?。

这篇的内容都来自 2026 年 10 月的官方文档,我没有使用 Cloudflare 账号,没有在线上配置过路由或域名,所以以上行为都没有亲自验证过。行为可能变化,以官方文档为准:Routes 与 Custom Domains。