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;
}
}
三个必须注意的点:
proxy_ssl_server_name on;少这行会报 502,因为 Vercel 靠 SNI 区分站点。Host头要改写成 Vercel 的域名,否则它不认识你的域名,直接 404。- 反代之后,应用里拿到的客户端 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 上跑业务系统,省下的是备案时间,付出的是客户流失。
一个常见误判
“我挂了梯子能打开,说明网站是好的,是客户网络有问题。”
反了。客户不会挂梯子,客户就是普通手机、普通宽带、微信内置浏览器。你的验收标准应该是在不做任何特殊设置的国内环境下能打开,而不是”在我这儿能打开”。
上线前自己用这三种方式各测一遍,能省掉后面一堆解释:
- 手机 4G(不走公司网络)
- 微信里直接点链接打开
- 让一个不在你身边的朋友打开
判断该走哪条
- 只是给海外客户看、或自己用 → 留着 Vercel,不用动
- 客户在国内、偶尔打开 → 香港反代,当天能上
- 客户在国内、要收款、要投广告 → 迁国内 + 备案,别绕
已经上线了、客户在催、不想再折腾配置的,把域名和报错发过来,看一眼就知道是哪一类。
相关:源码部署上线 · 案例:Vercel 部署正常,国内客户打不开 · 完整报价单
常见追问
Vercel 换自定义域名能解决国内访问吗?
多数情况不能。自定义域名只是换个名字,CNAME 仍然指向 Vercel 的节点 IP,线路还是那条。少数情况有改善,但不能指望。
国内的 CDN 加速 Vercel 有用吗?
对纯静态资源有一定作用,首屏能快一些。但只要页面要请求接口、要做登录,回源仍然走海外,该超时还是超时。
不备案有什么办法?
把服务放在香港或新加坡服务器,再解析到自己的域名。不需要备案,国内访问延迟通常在 30–80ms,比 Vercel 稳。这是不备案前提下最实用的方案。
怎么确认是 Vercel 的问题而不是我的代码?
用 curl 打你的域名看响应时间,超过 5 秒或直接超时就是线路问题;同时开一个海外节点访问同一地址,能打开就基本可以确定。
懒得自己折腾?
把报错截图发我,免费看。能修就说多少钱、几天;修不了直接说重做更便宜。