Skip to main content
Vercel 默认分配的 vercel.app 域名在中国大陆经常无法访问,原因是该域名遭到 DNS 污染,且 Vercel 的边缘节点不在大陆。解决方法是绑定自定义域名并走 Cloudflare 代理,绕过 DNS 污染问题。

前提

  • 已有一个域名(Namesilo / Cloudflare Registrar / 阿里云均可)
  • 已将域名 DNS 迁移到 Cloudflare(Cloudflare 配置指南
  • Vercel 账号已部署了项目

第一步:在 Vercel 绑定自定义域名

进入项目 → SettingsDomains → 添加你的域名(如 app.yourdomain.com)。 Vercel 会显示 DNS 配置要求,通常是一条 CNAME 记录:
CNAME  app  cname.vercel-dns.com
先不要在 Cloudflare 里添加这条记录,下一步用优化方案替代。

第二步:Cloudflare CNAME 配置

标准方案

在 Cloudflare DNS 面板添加记录:
类型名称内容代理状态
CNAMEappcname.vercel-dns.com仅 DNS(灰云)
绑定 Vercel 自定义域名时,Cloudflare 代理(橙云)会干扰 Vercel 的域名验证。先用灰云完成验证,看到 Vercel 显示两个绿色勾后再决定是否开启代理。

优化方案(enhanced-FaaS-in-China)

标准方案对国内访问速度的提升有限。enhanced-FaaS-in-China 提供了优选过的 CNAME 节点,在中国大陆访问更稳定。 将 CNAME 记录的内容改为优选节点:
类型名称内容代理状态
CNAMEappvercel-cname.xingpingcn.top仅 DNS(灰云)
在 Vercel Domains 设置里,域名验证通过(两个绿勾)后这条记录即生效。 验证是否生效:
# 从国内网络检测解析结果
nslookup app.yourdomain.com
# 期望看到解析到非 76.76.21.x 的 IP(76.76.21.x 是 Vercel 默认节点,国内不稳定)

第三步:SSL/TLS 模式设置

Cloudflare 和 Vercel 之间需要 SSL 配置匹配,否则会出现证书错误。 在 Cloudflare 面板:SSL/TLS概述 → 选择 完全(Full) 模式。 不要选”灵活(Flexible)“——灵活模式下 Cloudflare 到 Vercel 是明文传输,Vercel 会返回 SSL 错误。

常见报错

526 无效 SSL 证书

Cloudflare 无法验证源服务器(Vercel)的证书。原因通常是 SSL/TLS 模式设为了”灵活”,改为”完全”即可。

CNAME 扁平化冲突(根域名无法使用 CNAME)

如果你想用根域名(yourdomain.com 而非 app.yourdomain.com)指向 Vercel,DNS 协议不允许根域名设置 CNAME。 解决方法:在 Cloudflare 添加 A 记录,指向 Vercel 的 IP,或在 Vercel 的 Domains 里选择使用 www 子域并配置根域名重定向。 实际上 Cloudflare 对根域名有 CNAME Flattening 功能,可以把根域名的 CNAME 在查询时自动解析为 A 记录,Vercel 验证页面会提示 Vercel 专用的配置方式。

Vercel 域名验证一直未通过

Cloudflare 的代理(橙云)会隐藏真实 DNS,导致 Vercel 看不到预期的 CNAME。验证期间保持灰云状态,验证通过后再切换。

效果预期

配置完成后,国内访问你的应用走的路径是:
用户 → Cloudflare/优选节点 → Vercel 边缘(新加坡/日本)
与默认的 vercel.app 相比,DNS 解析稳定,访问成功率显著提升。由于 Vercel 最近的大陆外节点在亚太区,延迟通常在 80~150ms,无法做到大陆节点那样的 10ms 级别,但足够支撑正常使用。 如果对延迟要求更高,可考虑将静态资源托管到阿里云 OSS + CDN,仅用 Vercel 处理 SSR 请求。
域名购买与 DNS 基础配置见 域名与 DNS 配置。Cloudflare 账号设置见 Cloudflare 配置指南 本文最后更新于 2026-04。