Vercel 国内访问优化指南:域名被墙、Cloudflare 中转与加速方案全解

Vercel 默认域名在国内访问慢或不稳定?本文深入分析 *.vercel.app 被墙原因,详解自定义域名 + Cloudflare 橙云代理的完整配置流程,提供三种加速方案对比(中转/分离/替代),附 DNS 设置截图级步骤和各种常见问题排查。

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 根本原因

  1. Vercel 在中国大陆没有边缘节点

    • Vercel 的 CDN PoP 分布在北美、欧洲、亚太(新加坡/日本/香港等),中国大陆境内几乎没有自建节点
    • 用户请求被路由到最近的海外节点(通常是日本或香港),链路穿越运营商国际出口,延迟在 80-200ms 之间
  2. vercel.app 域名被部分 DNS 污染

    • 部分省市的 DNS 解析器对 *.vercel.app 返回错误或不完整的 IP,导致 “域名解析失败”
    • 这不是 Vercel “故意” 被墙,而是域名/IP 段被某些网络环境的 DNS 策略波及
  3. 国际出口带宽波动

    • 中国大陆的国际出口带宽在高峰期(晚高峰、促销日)明显拥堵,跨国请求延迟飙升
    • 视频/图片等大流量文件受影响最重

关键结论: *.vercel.app 在国内不是"完全不能用",但体验不稳定(30% 的用户可能遇到间歇性故障)。对生产项目来说,必须做加速或换域名


二、最优方案:自定义域名 + Cloudflare 橙云代理

经过大量项目验证,“自定义域名 + Cloudflare DNS + 橙云代理” 是目前最稳定、成本最低、配置最简单的 Vercel 国内加速方案。

2.1 方案原理

用户浏览器 (中国)
    ↓
Cloudflare DNS (Anycast 节点遍布中国)
    ↓
Cloudflare 边缘节点 (北京/上海/广州等城市)
    ↓
Cloudflare 橙云代理 (Proxy 模式)
    ↓
Vercel 源站 (HKG / NRT / SIN 等)

核心优势:

  1. 域名用你自己的(非 vercel.app)→ 避开 DNS 污染
  2. DNS 解析走 Cloudflare 全球 Anycast → 解析快、稳定
  3. Cloudflare Proxy 中转 → 流量先到 Cloudflare 中国合作节点(如北京/上海),再由 Cloudflare 内部网络转发到 Vercel 源站,避免用户直接跨运营商国际出口
  4. Cloudflare CDN 缓存静态资源 → 图片/CSS/JS 等直接命中中国区 Cache,不再回源 Vercel

2.2 完整配置步骤

假设你已经在 Vercel 部署了项目 my-project,默认域名为 my-project.vercel.app。现在把 www.yourdomain.com 绑定上去。

Step 1:在 Vercel Dashboard 添加域名

  1. 打开 Vercel Dashboard → 选择你的项目 → 点击 Settings → Domains
  2. 在输入框中填入 www.yourdomain.com → 点击 Add
  3. Vercel 会检查域名是否可用,最终提示你配置 CNAME 记录
  4. 记下 Vercel 给出的目标域:
CNAME    www    cname.vercel-dns.com.

(有些项目也可能是 cname-china.vercel-dns.com.,根据项目 Region 决定)

Step 2:在域名服务商修改 NS 记录(方式 A:全托管给 Cloudflare)

推荐方式:把域名的 NS 记录完全托管到 Cloudflare

  1. 去 Cloudflare 注册账号,点击 “Add Site” → 输入 yourdomain.com
  2. Cloudflare 会扫描现有 DNS 记录,然后给你两个 NS(如 bill.ns.cloudflare.comgail.ns.cloudflare.com
  3. 去你的域名注册商(如 Namecheap / Godaddy / 阿里云 / 腾讯云),把域名的 DNS 服务器改为 Cloudflare 提供的两个 NS
  4. 等待 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

  1. 域名全托管到 Cloudflare 后,进入 Cloudflare Dashboard → DNS → Records
  2. 添加一条记录:
类型:CNAME
名称:www
目标:cname.vercel-dns.com
代理状态:已代理(橙色云朵 ☁️)
TTL:自动
  1. 最关键:确保橙色云朵亮起 → 这就是 “橙云代理” 模式

Step 4:在 Vercel Dashboard 确认域名已验证

  1. 回到 Vercel Dashboard → Settings → Domains
  2. 等几分钟,Vercel 会自动检测到 DNS 记录,状态从 “Pending” 变为 “Valid”
  3. 此时访问 https://www.yourdomain.com,应该能正常打开你的 Vercel 项目

Step 5:配置 Cloudflare SSL 加密模式

  1. Cloudflare Dashboard → SSL/TLS → Overview
  2. 选择加密模式:Full (strict)Full
    • Full (strict):Cloudflare 和 Vercel 之间强制 HTTPS,安全性最高
    • Full:Cloudflare 和 Vercel 之间也走 HTTPS,但不验证 Vercel 的证书链(更容易配通)
  3. 如果配置后遇到 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 应 < 50ms
  • SSL 应 < 100ms
  • TTFB(第一字节时间)应 < 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',
      },
    ],
  },
};

步骤:

  1. 构建 Next.js 项目:npm run build
  2. _next/static 目录上传到 Cloudflare R2 / 阿里云 OSS / AWS S3
  3. 配置 CDN 域名 cdn.yourdomain.com 加速这件存储桶
  4. Next.js 渲染 HTML 时自动引用 cdn.yourdomain.com/_next/static/... 的资源
  5. 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 记录还没生效。

排查步骤

  1. 确认 Vercel Dashboard → Domains 中 www.yourdomain.com 显示 “Valid”(不是 Pending)
  2. DNS 记录生效可能需要 5-30 分钟,用 dig www.yourdomain.com 检查是否解析到 Cloudflare IP(如 104.21.x.x172.67.x.x
  3. 如果是新域名,检查是否在 Vercel 中设置了 Redirect to wwwRedirect to non-www,导致跳转死循环

Cloudflare 显示 “Error 525: SSL Handshake Failed”

原因:Cloudflare 和 Vercel 之间的 HTTPS 握手失败,通常是因为 Vercel 默认启用了强制 HTTPS,但 Cloudflare 的 SSL 模式不匹配。

修复

  1. Cloudflare Dashboard → SSL/TLS → Overview → 将加密模式从 “Full (strict)” 改为 “Full”
  2. 如果不行,临时改为 “Flexible”(不推荐长期使用,因为 Cloudflare 和 Vercel 之间会是 HTTP)
  3. 等 5 分钟后刷新测试

网站图片/静态资源仍然加载很慢

原因:Cloudflare 没有缓存这些资源,每次都回源到 Vercel。

排查步骤

  1. Chrome DevTools → Network → 点击一张慢的图片 → Headers → 查看 CF-Cache-Status
    • HIT:命中 Cloudflare 缓存 ✓
    • MISS:未命中,回源 Vercel ✗(需要优化缓存规则)
    • DYNAMIC:Cloudflare 不缓存这类内容 ✗
  2. 在 Cloudflare → Caching → Configuration → 确认 “Caching Level” 是 “Standard”
  3. 如果图片在 _next/static/*,确认 URL 匹配规则正确
  4. 尝试添加 Cache Rules(见上方 Step 3)

用户反馈部分地区仍然打不开

原因:Cloudflare 在中国大陆的节点并非所有运营商全覆盖,极少数用户仍可能走海外 PoP。

排查

  1. 让用户提供具体城市和运营商(电信/联通/移动)
  2. boce.com 从该地区模拟测试
  3. 如果是大规模问题,考虑用 阿里云 DCDN(全站加速)替代 Cloudflare,它在中国大陆节点覆盖更好

Vercel 提示 “This domain is already in use”

原因:域名可能绑在其他 Vercel 账户上,或者之前的域名链接还没有及时释放。

修复

  1. 检查 Vercel Dashboard 中其他项目是否已经使用了这个域名
  2. 如果域名是从其他账户转移过来的,联系 Vercel 客服(support@vercel.com)请求释放
  3. 临时使用子域名(如 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 小时后,再用中国大陆网络测试

相关阅读

继续阅读

探索更多技术文章

浏览归档,发现更多关于系统设计、工具链和工程实践的内容。

全部文章 返回首页

「saas」更多文章