Azure App Service 或 Static Web Apps 提示自定义域名被旧订阅占用时,检查 DNS、旧资源、权限和证书,安全迁移或申请释放。
直接答案:Azure App Service 或 Azure Static Web Apps 添加自定义域名时,如果提示域名已被占用、已绑定到其他资源,先不要反复改 A、CNAME 或 TXT 记录。先证明当前 DNS 控制权,再检查自己能访问的订阅中是否还有旧绑定。旧应用仍可访问时,应先从旧资源删除自定义域名;旧订阅、旧租户或旧应用已经无法访问时,保留报错、域名所有权和资源信息,向 Azure Support 申请解除残留关联。
这类问题与“DNS 尚未生效”不是一回事。DNS 记录可以已经指向新应用,但 Azure 平台内部仍可能认为该主机名属于旧资源。直接切换生产 DNS 可能造成停机,删除证书也不一定能释放主机名。
先判断是 DNS 验证失败,还是旧资源仍占用
| 现场 | 优先判断 | 下一步 |
|---|---|---|
| 门户提示找不到 CNAME、A 或 TXT | DNS 记录错误、尚未传播或查错主机名 | 从公共 DNS 只读查询开始 |
| DNS 验证通过,但提示域名已绑定到其他 Azure 资源 | 旧 App Service、Static Web Apps、Front Door 等仍有关联 | 查旧订阅和旧资源;无访问权则提交支持请求 |
| 域名已添加,但 HTTPS 证书长期未签发 | 域名解析、证书绑定或公网可达性问题 | 先保持旧入口,再单独查证书状态 |
| 按钮灰色或立即报权限错误 | 当前身份缺少资源权限,或资源有只读锁 | 核对角色和资源锁,不改 DNS |
先把门户原始报错、发生时间、目标订阅 ID、资源组、应用名称、目标主机名和当前登录租户记下来。截图必须遮挡订阅 ID、租户 ID、邮箱和支持工单信息;不要在公开问答中贴完整账户资料。
用只读查询确认当前 DNS
以下命令只查询公共 DNS,不会修改域名。把示例域名替换为实际主机名。Windows 可使用 Resolve-DnsName,Linux 或 macOS 可使用 dig。
Resolve-DnsName www.example.com -Type CNAME
Resolve-DnsName asuid.www.example.com -Type TXT
Resolve-DnsName _dnsauth.www.example.com -Type TXT
dig +short CNAME www.example.com
dig +short TXT asuid.www.example.com
dig +short TXT _dnsauth.www.example.com
asuid 常用于 App Service 的域名所有权验证;_dnsauth 用于 Static Web Apps 的 TXT 验证场景。不要同时照抄两套记录。以目标产品“添加自定义域”页面当前显示的主机和值为准。
查询结果为空时,先到实际托管 DNS 的服务商检查记录。只在注册商面板增加记录但权威 DNS 已迁到别处,公共查询仍然看不到。结果正确但门户未通过时,等待记录 TTL 对应的传播时间后重试;不要通过不断删除和重建记录来“刷新”。
旧资源还能访问时,按什么顺序迁移
如果仍能进入旧订阅和旧应用,最安全的办法是先验证新资源,再解除旧绑定,最后切换流量。生产域名迁移前先确认新应用的默认域名可以正常打开,页面、登录、回调、上传和健康检查都通过。
- 在新资源的自定义域名页面取得 TXT 验证值,只添加所有权验证记录,不先改生产 A 或 CNAME。
- 等待公共 DNS 可以查询到 TXT,并在新资源完成所有权验证。
- 检查旧 App Service、Static Web Apps、Front Door 和其他可能使用该主机名的资源。
- 保存旧 DNS、证书绑定、TLS 设置和应用入口信息,再从旧资源删除该自定义域名绑定。
- 在新资源添加主机名,确认状态正常后,再修改生产 A、CNAME、ALIAS 或 ANAME。
- 保留旧应用和旧 DNS 配置到至少一个 TTL 窗口结束,并观察新旧入口日志。
删除“自定义域名绑定”不等于删除注册域名,也不等于注销 DNS 区域,但会让旧应用不能再用该主机名接收请求。操作前必须确认新入口已准备好。App Service 托管证书通常要在主机名映射完成后单独检查,不要因为证书尚未出现就提前删除旧入口。
旧订阅或旧租户无法访问怎么办
如果旧订阅已删除、旧租户不可用,或者资源不在任何当前可见订阅中,本地没有一条安全命令可以强制释放平台内部关联。此时应从 Azure 门户“帮助 + 支持”创建支持请求,说明这是自定义域名残留绑定或主机名释放问题。
工单至少提供以下信息:
- 受影响的完整主机名,例如
www.example.com,不要只写根域; - 当前目标资源的订阅、资源组、资源类型和应用名称;
- 旧订阅、旧应用或旧租户的已知信息,以及为何无法自行删除绑定;
- 门户完整错误文本、发生时间和已尝试步骤;
- 当前公共 DNS 查询结果,以及按门户要求建立的所有权 TXT 记录;
- 是否为生产域名、当前是否停机、旧流量入口是否还能访问。
不要向非官方人员提供域名注册商密码、Azure 密码、MFA 验证码、客户端密钥或完整访问令牌。支持人员需要的是资源标识、错误证据和域名控制权证明,不是登录凭据。
为什么只改 CNAME 通常解决不了
CNAME 负责把访问流量指向目标主机,TXT 负责证明域名控制权;它们不能直接删除 Azure 内部旧资源上的主机名关联。把 CNAME 从旧应用改到新应用,只会改变 DNS 方向。如果新应用尚未接受该 Host,请求可能出现 Azure 默认 404、证书不匹配或主机名未配置。
反过来,仅有 TXT 验证也不会自动切换流量。合理做法是先用 TXT 验证新资源,再处理旧绑定,最后改流量记录。这样可以把“证明归属”和“切换访问”拆开,减少停机。
按钮不可用和权限错误怎么分支处理
- 自定义域名入口不可用:确认 App Service 计划是否支持自定义域名。免费或共享层级不满足 App Service 自定义域名要求时,需要先评估升级费用。
- 提示无权添加主机名:核对当前身份在目标资源或订阅上的角色。不要通过公开 Owner 凭据或共享管理员账户绕过权限。
- 资源有只读锁:由有权限的管理员临时处理锁,完成变更后按原治理要求恢复。
- 根域无法使用 CNAME:按 DNS 服务商能力使用 ALIAS、ANAME、CNAME flattening 或产品官方支持的 A 记录方案,不能把子域步骤机械套到根域。
- Static Web Apps 新域名要求 TXT:按门户给出的 TXT token 方法验证;不要继续依赖旧教程中的 CNAME 验证流程。
费用、停机和数据风险
DNS 查询和增加 TXT 记录通常不产生 Azure 资源费用,但 App Service 计划升级、Azure DNS、Front Door、托管证书之外的证书产品和继续保留旧应用都可能收费。提交变更前,在目标资源的价格与计划页面核对。
域名迁移不会直接删除应用数据,但错误解除旧绑定或提前切换 DNS 会造成访问中断。真正的数据风险来自为了“重新部署”而删除旧应用、存储或数据库。域名问题没有要求删除业务数据;在确认根因前,不要删除旧资源组、数据库、存储账户或唯一证书私钥。
怎样验证迁移完成
完成绑定后,从公共网络分别检查 DNS、TLS 和应用,不要只看门户显示“成功”。
dig +short www.example.com
curl -I https://www.example.com/
验证结果应满足:公共 DNS 指向预期入口;浏览器证书包含目标域名且未过期;HTTP 返回业务预期状态;登录、回调和静态资源不跳到旧主机;新应用日志能看到请求;旧应用在 TTL 结束后不再接收该域名流量。若任一项失败,保留新资源不动,恢复之前保存的 DNS 记录或旧绑定,再按 DNS、主机名、证书、应用四层重新定位。
相关阅读
官方资料
以下资料核验日期为 2026 年 9 月 16 日。Azure 门户入口、验证方式和产品限制可能变化,以操作时门户提示为准。
- Microsoft:排查 Azure App Service 自定义域名问题
- Microsoft:为 App Service 配置现有自定义域名
- Microsoft:Static Web Apps 自定义域名与迁移
- Microsoft:使用外部 DNS 配置 Static Web Apps 自定义域名
- Microsoft:App Service 自定义域名概览
本稿未发现需要补充确认的黑鲨云业务事实。

