Vercel 默认域名(*.vercel.app)在国内的访问体验一直是个痛点:DNS 解析慢、部分地区直接无法访问、图片/静态资源加载经常超时。这对于把项目部署在 Vercel 上的国内开发者来说,是必须解决的基础设施问题。本文基于大量实战验证,从被墙原因 → 最优加速方案 → 完整配置步骤 → 备选方案,给你一套系统性的国内访问优化方案。
一、Vercel 国内访问现状
先给一个客观现状总结,帮你判断:
1.1 *.vercel.app 域名在国内的表现
| 维度 | 具体表现 |
|---|---|
| DNS 解析 | 部分地区解析慢或超时,TTL 不确定 |
| HTTP 直连 | 北京/上海/广州等主要节点尚可,但三四线城市和移动网络常丢包 |
| 图片/静态资源 | vercel.app 下的静态文件走 Vercel CDN,但 PoP 节点在中国大陆极少,回源路径长 |
| 高峰期 | 晚高峰时段(20:00-23:00)延迟明显增加,偶尔出现 5xx 错误 |
1.2 根本原因
Vercel 在中国大陆没有边缘节点
- Vercel 的 CDN PoP 分布在北美、欧洲、亚太(新加坡/日本/香港等),中国大陆境内几乎没有自建节点
- 用户请求被路由到最近的海外节点(通常是日本或香港),链路穿越运营商国际出口,延迟在 80-200ms 之间
vercel.app域名被部分 DNS 污染- 部分省市的 DNS 解析器对
*.vercel.app返回错误或不完整的 IP,导致 “域名解析失败” - 这不是 Vercel “故意” 被墙,而是域名/IP 段被某些网络环境的 DNS 策略波及
- 部分省市的 DNS 解析器对
国际出口带宽波动
- 中国大陆的国际出口带宽在高峰期(晚高峰、促销日)明显拥堵,跨国请求延迟飙升
- 视频/图片等大流量文件受影响最重
关键结论:
*.vercel.app在国内不是"完全不能用",但体验不稳定(30% 的用户可能遇到间歇性故障)。对生产项目来说,必须做加速或换域名。
二、最优方案:自定义域名 + Cloudflare 橙云代理
经过大量项目验证,“自定义域名 + Cloudflare DNS + 橙云代理” 是目前最稳定、成本最低、配置最简单的 Vercel 国内加速方案。
2.1 方案原理
用户浏览器 (中国)
↓
Cloudflare DNS (Anycast 节点遍布中国)
↓
Cloudflare 边缘节点 (北京/上海/广州等城市)
↓
Cloudflare 橙云代理 (Proxy 模式)
↓
Vercel 源站 (HKG / NRT / SIN 等)
核心优势:
- 域名用你自己的(非
vercel.app)→ 避开 DNS 污染 - DNS 解析走 Cloudflare 全球 Anycast → 解析快、稳定
- Cloudflare Proxy 中转 → 流量先到 Cloudflare 中国合作节点(如北京/上海),再由 Cloudflare 内部网络转发到 Vercel 源站,避免用户直接跨运营商国际出口
- Cloudflare CDN 缓存静态资源 → 图片/CSS/JS 等直接命中中国区 Cache,不再回源 Vercel
2.2 完整配置步骤
假设你已经在 Vercel 部署了项目 my-project,默认域名为 my-project.vercel.app。现在把 www.yourdomain.com 绑定上去。
Step 1:在 Vercel Dashboard 添加域名
- 打开 Vercel Dashboard → 选择你的项目 → 点击 Settings → Domains
- 在输入框中填入
www.yourdomain.com→ 点击 Add - Vercel 会检查域名是否可用,最终提示你配置
CNAME记录 - 记下 Vercel 给出的目标域:
CNAME www cname.vercel-dns.com.
(有些项目也可能是 cname-china.vercel-dns.com.,根据项目 Region 决定)
Step 2:在域名服务商修改 NS 记录(方式 A:全托管给 Cloudflare)
推荐方式:把域名的 NS 记录完全托管到 Cloudflare
- 去 Cloudflare 注册账号,点击 “Add Site” → 输入
yourdomain.com - Cloudflare 会扫描现有 DNS 记录,然后给你两个 NS(如
bill.ns.cloudflare.com和gail.ns.cloudflare.com) - 去你的域名注册商(如 Namecheap / Godaddy / 阿里云 / 腾讯云),把域名的 DNS 服务器改为 Cloudflare 提供的两个 NS
- 等待 NS 生效(通常 5-30 分钟,TTL 取决于注册商)
Step 2b:或者在域名服务商添加 CNAME(方式 B:仅单条记录)
如果你不想改 NS,可以在现有 DNS 服务商直接添加一条记录:
类型:CNAME
主机:www
值:cname.vercel-dns.com.
TTL:自动/600
⚠️ 注意:这种方式 Cloudflare 的 Proxy 功能不可用(Proxy 只在全托管域名下生效),加速效果较弱。强烈建议用方式 A。
Step 3:在 Cloudflare DNS 面板添加记录并开启 Proxy
- 域名全托管到 Cloudflare 后,进入 Cloudflare Dashboard → DNS → Records
- 添加一条记录:
类型:CNAME
名称:www
目标:cname.vercel-dns.com
代理状态:已代理(橙色云朵 ☁️)
TTL:自动
- 最关键:确保橙色云朵亮起 → 这就是 “橙云代理” 模式
Step 4:在 Vercel Dashboard 确认域名已验证
- 回到 Vercel Dashboard → Settings → Domains
- 等几分钟,Vercel 会自动检测到 DNS 记录,状态从 “Pending” 变为 “Valid”
- 此时访问
https://www.yourdomain.com,应该能正常打开你的 Vercel 项目
Step 5:配置 Cloudflare SSL 加密模式
- Cloudflare Dashboard → SSL/TLS → Overview
- 选择加密模式:Full (strict) 或 Full
Full (strict):Cloudflare 和 Vercel 之间强制 HTTPS,安全性最高Full:Cloudflare 和 Vercel 之间也走 HTTPS,但不验证 Vercel 的证书链(更容易配通)
- 如果配置后遇到 525 错误(SSL Handshake Failed),降级到 Full 模式
2.3 配置 Cloudflare 缓存规则(进一步提升速度)
Cloudflare 默认会缓存静态资源(如图片、JS、CSS),但不缓存 HTML 页面(因为 Vercel Serverless 页面可能包含动态内容)。如果你的站点以静态页面为主,可以做更激进的缓存:
规则 1:缓存静态文件(默认已开启)
在 Cloudflare Dashboard → Caching → Configuration → 确认 “Caching Level” 为 “Standard”。
规则 2:为纯静态页面添加 Page Rules(可选)
如果你有一些纯静态页面不需要 Vercel SSR(如 /about、/terms),可以添加一条 Page Rule:
URL:www.yourdomain.com/about*
设置:
- Cache Level: Cache Everything
- Edge Cache TTL: 1 小时(或更长)
这样 /about 页面会被 Cloudflare 缓存,用户访问时直接命中 Cloudflare 中国节点,不再回源 Vercel。
规则 3:图片/媒体文件缓存优化
如果你的项目里有大量图片,额外添加:
URL:www.yourdomain.com/_next/static/*
设置:
- Cache Level: Cache Everything
- Edge Cache TTL: 1 年(静态资源文件名含 hash,内容变更后 URL 会变)
URL:www.yourdomain.com/images/*
设置:
- Cache Level: Cache Everything
- Browser Cache TTL: 7 天
- Edge Cache TTL: 7 天
2.4 验证加速效果
配置完成后,用以下工具验证:
方法 1:curl 测延迟
# 测试经 Cloudflare 代理后的域名
curl -w "@curl-format.txt" -o /dev/null -s https://www.yourdomain.com
# curl-format.txt 内容:
time_namelookup: %{time_namelookup}
time_connect: %{time_connect}
time_appconnect: %{time_appconnect}
time_pretransfer: %{time_pretransfer}
time_redirect: %{time_redirect}
time_starttransfer: %{time_starttransfer}
time_total: %{time_total}
正常结果(Cloudflare 代理后,从中国大陆发起):
time_namelookup: < 100ms(DNS 解析快)time_starttransfer: < 500ms(Cloudflare 中国有 PoP 的情况下)time_total: < 1s(纯 HTML 小页面)
方法 2:浏览器 DevTools
打开 Chrome DevTools → Network 面板 → 选择 Doc 类型 → 刷新页面:
DNS Lookup应 < 50msSSL应 < 100msTTFB(第一字节时间)应 < 500ms(如果在 Cloudflare Cache Hit 状态下)
方法 3:第三方测速工具
三、进阶方案:前端分离 + API 回源
如果你的流量极大(日活数万以上),或者对首屏速度有极致要求,可以考虑分离架构。
3.1 架构思路
用户 (中国)
↓
Cloudflare / 阿里云 CDN / 腾讯云 CDN
↓ 绝大多数 HTTP 请求
静态站点(HTML/CSS/JS/图片,托管在 Cloudflare Pages / R2 / 阿里云 OSS)
↓ 少量 API 请求
Vercel Serverless(Next.js API Routes / Edge Functions)
↓ 大部分业务没变化
Postgres / Redis / 外部数据库
核心思路:
- 前端 HTML/CSS/JS:托管在中国访问更快的平台(如 Cloudflare Pages、R2 + 中国 CDN、阿里云 OSS)
- API 请求:仍然回到 Vercel(因为 API 调用量相对少,且 Vercel Edge 适合轻量逻辑)
- 数据库:放在海外(如 Neon、Supabase),API 走海外链路但可以接受
3.2 适用场景
- 大型内容站(博客、新闻、电商前端)
- 对 SEO 页面加载速度要求极高(Core Web Vitals 需要 LCP < 2.5s)
- 已有中国 CDN 资源或预算充足
3.3 Next.js 的实现方式
在 Next.js 中,可以配置 assetPrefix 将静态资源(_next/static/*)重定向到 CDN:
// next.config.js
const isProd = process.env.NODE_ENV === 'production';
module.exports = {
assetPrefix: isProd ? 'https://cdn.yourdomain.com' : undefined,
images: {
domains: ['cdn.yourdomain.com'],
remotePatterns: [
{
protocol: 'https',
hostname: 'cdn.yourdomain.com',
},
],
},
};
步骤:
- 构建 Next.js 项目:
npm run build - 把
_next/static目录上传到 Cloudflare R2 / 阿里云 OSS / AWS S3 - 配置 CDN 域名
cdn.yourdomain.com加速这件存储桶 - Next.js 渲染 HTML 时自动引用
cdn.yourdomain.com/_next/static/...的资源 - API 请求仍走
www.yourdomain.com/api/...→ Vercel Serverless
四、其他备选方案
4.1 Cloudflare Pages 替代 Vercel 前端
如果你的项目不是 Next.js(比如 Vue、Astro、纯静态站),可以考虑前端直接部署到 Cloudflare Pages,API 用 Cloudflare Workers:
| 对比项 | Vercel + Cloudflare Proxy | 纯 Cloudflare Pages |
|---|---|---|
| Next.js App Router 支持 | ✅ 完整(ISR/Middleware/Edge 全兼容) | ⚠️ Workers 可模拟,但体验不如 Vercel |
| 国内访问速度 | 很好(需要 Cloudflare 中转) | 非常好(前端资源直接走 Cloudflare 中国) |
| 费用 | Pro $20/月 + 数据传输费 | 基本免费(带宽无限、Workers 请求免费 10万/天) |
| AI SDK 支持 | ✅ 官方原生 | ⚠️ 可用但需手动配置 |
如果你不需要 Next.js 的高级特性,纯 Cloudflare 栈在国内更快更便宜。
4.2 阿里云/腾讯云静态托管
如果你的用户 100% 在中国大陆,且管理员愿意维护中国云厂商环境:
- 阿里云 OSS + CDN:绑定自定义域名、配 HTTPS,静态资源极致加速
- 腾讯云 COS + CDN:同阿里云
- 腾讯云 Serverless Cloud Function:可以跑 Next.js / Node,但冷启动比 Vercel 差
缺点:需要备案(ICP)、操作界面不如 Vercel 友好、Serverless 生态不如 Vercel 成熟。
4.3 Vercel Edge + 地理位置路由
Vercel Edge Middleware 可以读取用户地理位置(通过 Cloudflare/Vercel 边缘节点的 GeoIP),然后根据地区做不同路由:
// middleware.ts
import { NextResponse } from 'next/server';
import type { NextRequest } from 'next/server';
export function middleware(request: NextRequest) {
const country = request.geo?.country || 'US';
// 中国大陆用户:重定向到 Cloudflare Pages 镜像站
if (country === 'CN') {
return NextResponse.rewrite(new URL('https://cn-mirror.yourdomain.com' + request.nextUrl.pathname, request.url));
}
return NextResponse.next();
}
export const config = {
matcher: ['/((?!api|_next/static|_next/image|favicon.ico).*)'],
};
这样做的好处:全球用户走 Vercel,中国大陆用户走镜像站。但工程量较大,适合有专门的工程团队的项目。
五、常见问题排查
配置域名后访问提示 “404 Not Found”
原因:Vercel 项目中没有 www.yourdomain.com 的域名白名单,或者 DNS 记录还没生效。
排查步骤:
- 确认 Vercel Dashboard → Domains 中
www.yourdomain.com显示 “Valid”(不是 Pending) - DNS 记录生效可能需要 5-30 分钟,用
dig www.yourdomain.com检查是否解析到 Cloudflare IP(如104.21.x.x、172.67.x.x) - 如果是新域名,检查是否在 Vercel 中设置了
Redirect to www或Redirect to non-www,导致跳转死循环
Cloudflare 显示 “Error 525: SSL Handshake Failed”
原因:Cloudflare 和 Vercel 之间的 HTTPS 握手失败,通常是因为 Vercel 默认启用了强制 HTTPS,但 Cloudflare 的 SSL 模式不匹配。
修复:
- Cloudflare Dashboard → SSL/TLS → Overview → 将加密模式从 “Full (strict)” 改为 “Full”
- 如果不行,临时改为 “Flexible”(不推荐长期使用,因为 Cloudflare 和 Vercel 之间会是 HTTP)
- 等 5 分钟后刷新测试
网站图片/静态资源仍然加载很慢
原因:Cloudflare 没有缓存这些资源,每次都回源到 Vercel。
排查步骤:
- Chrome DevTools → Network → 点击一张慢的图片 → Headers → 查看
CF-Cache-StatusHIT:命中 Cloudflare 缓存 ✓MISS:未命中,回源 Vercel ✗(需要优化缓存规则)DYNAMIC:Cloudflare 不缓存这类内容 ✗
- 在 Cloudflare → Caching → Configuration → 确认 “Caching Level” 是 “Standard”
- 如果图片在
_next/static/*,确认 URL 匹配规则正确 - 尝试添加 Cache Rules(见上方 Step 3)
用户反馈部分地区仍然打不开
原因:Cloudflare 在中国大陆的节点并非所有运营商全覆盖,极少数用户仍可能走海外 PoP。
排查:
- 让用户提供具体城市和运营商(电信/联通/移动)
- 用
boce.com从该地区模拟测试 - 如果是大规模问题,考虑用 阿里云 DCDN(全站加速)替代 Cloudflare,它在中国大陆节点覆盖更好
Vercel 提示 “This domain is already in use”
原因:域名可能绑在其他 Vercel 账户上,或者之前的域名链接还没有及时释放。
修复:
- 检查 Vercel Dashboard 中其他项目是否已经使用了这个域名
- 如果域名是从其他账户转移过来的,联系 Vercel 客服(support@vercel.com)请求释放
- 临时使用子域名(如
staging.yourdomain.com)测试
六、方案决策总结
根据你的项目规模和技术栈,选择最适合的方案:
| 场景 | 推荐方案 | 预估成本 | 实施难度 |
|---|---|---|---|
| 个人博客/Demo,用户不多 | 自定义域名 + Cloudflare Proxy | 域名费 $10-15/年 | ⭐ 简单 |
| 中小型 SaaS,用户全球分布 | 自定义域名 + Cloudflare Proxy + CDN 缓存规则 | 域名 + Cloudflare Free | ⭐⭐ 中等 |
| 中大型 SaaS,中国大陆为主要市场 | 静态资源分离(CDN)+ Vercel API | 域名 + CDN 流量费 | ⭐⭐⭐ 复杂 |
| 非 Next.js 纯静态站 | Cloudflare Pages(代替 Vercel) | 基本免费 | ⭐ 简单 |
| 纯中国大陆用户,不用 Vercel 特性 | 阿里云 OSS + 静态托管 | 按流量计费 | ⭐⭐ 中等 |
常见问题(FAQ)
为什么直接用 vercel.app 不行?一定要买域名吗?
*.vercel.app 没有中国境内 CDN 节点,且部分 DNS 解析器对这个域名返回异常。花几十块买一个域名(如 Namecheap $5-15/年),绑定 Cloudflare NS,是最廉价也最一劳永逸的解决方案。域名中国站访问加速数倍,且看起来更专业。
Cloudflare 的免费计划够用吗?
对于绝大多数 Vercel SaaS/博客项目,Cloudflare Free 完全够用:
- DNS 解析无限
- Proxy/缓存/CDN 无限流量
- DDoS 防护基础版
- 3 个 Page Rules(足够配置静态资源缓存)
除非你需要:高级 WAF 规则、自定义 SSL 证书、Argo Smart Routing 等,才需要升级到 Pro($20/月)。
配置 Cloudflare 后还能用 Vercel 的 Preview 功能吗?
可以。生产域名(如 www.yourdomain.com)走 Cloudflare,Preview 域名(如 my-project-xxx.vercel.app)仍然是 Vercel 默认域名。每次 PR 触发部署后,你仍然可以访问 Preview URL 测试,只是 Preview URL 不会经过 Cloudflare 加速(但 Preview 测试的流量通常不大)。
Vercel 可以和阿里云 CDN 一起用吗?
可以,但更复杂:
- 在阿里云开通 CDN → CNAME 指向 Vercel 的 cname
- 需要配置 HTTPS 证书回源
- 阿里云 CDN 在中国大陆节点更多,但 Cloudflare Free 更省事、配置更少
- 如果要极致性能,可以用阿里云 + Cloudflare 叠在一起(阿里云做第一层,Cloudflare 做海外的第二层),但这属于极度进阶配置
配置完之后多久能看到效果?
- DNS NS 切换:5-30 分钟
- Cloudflare Proxy 生效:即时(但 DNS TTL 可能缓存旧记录)
- 缓存规则生效:新规则即时生效,但旧缓存需要时间过期
- 建议全程至少等待 1 小时后,再用中国大陆网络测试
相关阅读
- Vercel 详解:前端与 AI 应用的一站式云平台
- 用 Vercel 部署 Next.js + Postgres SaaS 实战
- Vercel 定价与成本详解
- Vercel 与 Netlify、Render、Railway、Cloudflare Pages 对比
- Vercel Edge Functions 深度指南
- Cloudflare 详解:从 CDN 到全球边缘计算平台
- Cloudflare Pages 完全指南
- Vercel 专题导航
继续阅读
探索更多技术文章
浏览归档,发现更多关于系统设计、工具链和工程实践的内容。