Workers 路由与自定义域:把 workers.dev 换成自己的域名
部署完默认拿到的是 https://<name>.<子域>.workers.dev。它能用,但不适合对外:域名不受控、证书是共享通配、也做不了根域。
1. 两种地址的差别
| 维度 | workers.dev | 自定义域 |
|---|---|---|
| 域名归属 | Cloudflare 共享子域 | 你自己的域名 |
| 证书 | *.workers.dev 通配证书 | 你域名对应的 Universal SSL |
| 能否用根域 | 否 | 是 |
| 需要域名在 Cloudflare | 不需要 | 要接入并 Active |
| 适合 | 测试、内部工具 | 对外站点 |
2. 两种配置方式
方式一:路由(Route),保留原域名,把某个路径模式交给 Worker:
routes = [
{ pattern = "example.com/api/*", zone_name = "example.com" }
]
方式二:自定义域(Custom Domain),把整个主机名绑给 Worker:
routes = [
{ pattern = "example.com", custom_domain = true }
]
区别在于:Route 是"域名照常解析,部分路径改由 Worker 处理";Custom Domain 是"这个主机名的全部请求都归 Worker",Cloudflare 会自动帮你建 DNS 记录并签证书。
3. 前提条件
域名要在同一个 Cloudflare 账号下,并且状态是 Active。满足之后,控制台的 Workers 页面才会出现"Add custom domain"入口。
如果 wrangler deploy 报找不到 zone,通常是三个原因:
- 域名还没接入 Cloudflare,见 49-add-domain-to-cloudflare.md。
- 域名的 NS 还没全网生效,
Resolve-DnsName -Type NS仍返回旧 NS。 - 域名在另一个 Cloudflare 账号下,跨账号不能直接绑。
4. 绑定后的验证
# 看响应头里的 cf-ray,确认请求走了边缘
(Invoke-WebRequest -Uri 'https://example.com' -UseBasicParsing).Headers['cf-ray']
# 看证书主体是否已经是你的域名
$tcp = New-Object Net.Sockets.TcpClient('example.com',443)
$ssl = New-Object Net.Security.SslStream($tcp.GetStream())
$ssl.AuthenticateAsClient('example.com')
(New-Object Security.Cryptography.X509Certificates.X509Certificate2($ssl.RemoteCertificate)).Subject
证书主体变成 CN=example.com 或包含该域名的通配,说明自定义域生效。绑定之前它是 *.workers.dev——我的示例站点实测就是 CN=hyysn.workers.dev。
5. 关掉默认域名
不想让 workers.dev 继续可访问,可以在配置里关闭:
workers_dev = false
注意这会让你少一个排错入口:自定义域没生效时,默认域名是唯一能验证代码本身没问题的地址。建议先在默认域上跑通,再关。
小结
workers.dev 是开发地址,自定义域才是站点地址。两者的差别不只是好看:根域能不能用、证书归属、是否受共享子域策略影响,都不同。
绑定失败基本只有一个原因——域名没在同一个账号下 Active。按"NS 是否生效 → 站点状态 → 账号归属"的顺序查,比在 Workers 配置里反复改快得多。
数据来源与检索时间
检索时间 2026-11-10。
| 来源 | URL | 对应数据 |
|---|---|---|
| Workers 路由文档 | https://developers.cloudflare.com/workers/configuration/routing/routes/ | routes 的 pattern 写法、custom_domain 语义、自定义域需要域名在同一账号且已托管 |
| Workers 入门指南 | https://developers.cloudflare.com/workers/get-started/guide/ | wrangler.toml 的基础字段与部署流程 |
| DNS 记录文档 | https://developers.cloudflare.com/dns/manage-dns-records/how-to/create-dns-records/ | 自定义域自动创建 DNS 记录的相关说明 |
核验说明
*.workers.dev证书主体CN=hyysn.workers.dev为本机 TLS 握手实测(见 51 篇)。- 未做:自定义域绑定未执行(账号无 Zone 权限),第 3、4 步的控制台行为依据文档;
workers_dev = false未实际验证。