云起软件 发报错截图
首页 知识库 排错
排错 2026-10-29

Vercel 部署后国内打不开,4 个解决办法

Vercel 部署成功但国内打不开,是 vercel.app 域名和节点在境内不可达,不是配置错误;要国内稳定访问只能迁到国内服务器备案,或加香港节点反代。

Vercel 后台一片绿色,部署日志显示成功,你本地也能打开——发给客户,客户说”打不开”。

这不是配置错误。Vercel 的默认域名和部分节点在国内不稳定,表现是间歇性的:上午能开,下午超时;你手机能开,客户电脑不行。很多人以为是代码问题,反复改配置、重建项目,改了两天也没用。

先确认是线路问题

别猜,用两条命令判断。

第一条,量响应时间:

curl -o /dev/null -s -w "状态 %{http_code}  总耗时 %{time_total}s\n" https://你的项目.vercel.app

正常应该小于 1 秒。如果出现以下三种,就是线路:

  • 总耗时 10.0s 以上,或直接 curl: (28) Operation timed out
  • 状态 000(连接都没建立)
  • 有时 0.3 秒、有时超时,反复执行结果不一样

第二条,看解析到哪:

nslookup 你的项目.vercel.app

如果返回 76.76.21.x 段,说明走的是 Vercel 的默认节点。这个段在国内的可达性时好时坏。

第三条(最直接):挂一个海外节点访问同一地址。海外能开、国内不能开,就到此为止,别再改代码了。

解法一:迁到国内服务器(唯一能彻底解决的)

客户在国内、要接微信支付、要在微信里打开,最终都得走这条路。

代价是要备案。流程大概是:买大陆服务器 → 域名实名 → 提交 ICP 备案 → 管局审核 → 解析 → 配 HTTPS。快的话 3 天,慢的 15 天以上,不受你控制。

回报是:国内访问 20–50ms,微信内正常打开,支付回调能通。这三样是海外节点给不了的。

具体怎么做,另一篇写得更细:源码部署上线。

解法二:香港 / 新加坡服务器反代(不备案的首选)

不想备案,又想国内能稳开,这是最实用的方案:买一台香港轻量服务器,用 Nginx 反代到 Vercel。

为什么反代比直连快:香港到国内的线路比你到 Vercel 的节点稳,而且域名解析到香港 IP,避开了对 vercel.app 域名的处理。

配置大概是这样:

server {
    listen 443 ssl http2;
    server_name yourdomain.com;

    ssl_certificate     /www/server/panel/vhost/cert/yourdomain.com/fullchain.pem;
    ssl_certificate_key /www/server/panel/vhost/cert/yourdomain.com/privkey.pem;

    location / {
        proxy_pass https://你的项目.vercel.app;
        proxy_ssl_server_name on;
        proxy_set_header Host 你的项目.vercel.app;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_read_timeout 60s;
    }
}

三个必须注意的点:

  1. proxy_ssl_server_name on; 少这行会报 502,因为 Vercel 靠 SNI 区分站点。
  2. Host 头要改写成 Vercel 的域名,否则它不认识你的域名,直接 404。
  3. 反代之后,应用里拿到的客户端 IP 是香港服务器的 IP。如果代码里有按 IP 做的风控或限流,逻辑会失效。

这个方案的天花板:静态页面和轻接口够用;如果你的应用要在服务端跑重活(图片处理、长任务),香港机器的配置和回源延迟会变成新瓶颈。

解法三:国内 CDN + 静态化(只治标)

把纯静态部分(首页、产品页、文档)预渲染成 HTML,放国内 CDN,只有接口走海外。

# Next.js 静态导出,产物在 out/
next build && next export

# Vite / Astro 产物在 dist/
npm run build

把产物目录传到国内对象存储,挂 CDN,解析自定义域名。

效果:首屏从”打不开”变成”秒开”。 局限:任何需要登录、下单、提交表单的动作,仍然要请求海外接口。用户点按钮转圈十几秒,体验比全站打不开更糟——因为前面给了他能打开的错觉。

解法四:分层用

不是所有页面都需要国内可达。合理的做法是把站点拆开:

部分放哪理由
官网 / 产品介绍国内服务器或 CDN客户在微信里点开必须秒开
文档 / 博客Vercel / Cloudflare Pages访问量低,国内读者能接受偶尔慢
实际业务系统国内服务器要登录、要支付、要稳定

硬要在 Vercel 上跑业务系统,省下的是备案时间,付出的是客户流失。

一个常见误判

“我挂了梯子能打开,说明网站是好的,是客户网络有问题。”

反了。客户不会挂梯子,客户就是普通手机、普通宽带、微信内置浏览器。你的验收标准应该是在不做任何特殊设置的国内环境下能打开,而不是”在我这儿能打开”。

上线前自己用这三种方式各测一遍,能省掉后面一堆解释:

  1. 手机 4G(不走公司网络)
  2. 微信里直接点链接打开
  3. 让一个不在你身边的朋友打开

判断该走哪条

  • 只是给海外客户看、或自己用 → 留着 Vercel,不用动
  • 客户在国内、偶尔打开 → 香港反代,当天能上
  • 客户在国内、要收款、要投广告 → 迁国内 + 备案,别绕

已经上线了、客户在催、不想再折腾配置的,把域名和报错发过来,看一眼就知道是哪一类。


相关:源码部署上线 · 案例:Vercel 部署正常,国内客户打不开 · 完整报价单

常见追问

Vercel 换自定义域名能解决国内访问吗?

多数情况不能。自定义域名只是换个名字,CNAME 仍然指向 Vercel 的节点 IP,线路还是那条。少数情况有改善,但不能指望。

国内的 CDN 加速 Vercel 有用吗?

对纯静态资源有一定作用,首屏能快一些。但只要页面要请求接口、要做登录,回源仍然走海外,该超时还是超时。

不备案有什么办法?

把服务放在香港或新加坡服务器,再解析到自己的域名。不需要备案,国内访问延迟通常在 30–80ms,比 Vercel 稳。这是不备案前提下最实用的方案。

怎么确认是 Vercel 的问题而不是我的代码?

用 curl 打你的域名看响应时间,超过 5 秒或直接超时就是线路问题;同时开一个海外节点访问同一地址,能打开就基本可以确定。

懒得自己折腾?

把报错截图发我,免费看。能修就说多少钱、几天;修不了直接说重做更便宜。

发截图
打电话 加微信,发驳回意见