香港服务器反向代理加速,是我们给两个国内用户访问慢的接口用过的办法,改完以后国内体感明显变快。这篇只写我们实际用过、或者官方文档能证实的配置。
香港服务器反向代理加速适合谁
同时满足下面几条,就适合:
- 后端跑在 Cloudflare 上,而且绑了它的数据库、KV、对象存储这类服务,搬下来要重写一大块。
- 主要用户在国内,现在访问慢或者时不时失败。
- 暂时不想备案。中国香港地域的服务器不需要备案,也不能用于备案。
不适合的情况:后端在 Vercel 上(Vercel 官方不建议在部署前面加代理);主要是大文件下载(中转机的带宽会成为瓶颈,放对象存储加 CDN 更合适,见 对象存储推荐)。
原理:绕开慢的那一段
原来的链路是「国内用户到 Cloudflare」,这一段在国内经常慢、丢包(原因见 Cloudflare 国内访问慢怎么办)。加中转以后变成两段:「国内用户到香港服务器」和「香港服务器到 Cloudflare」,这两段通常都比原来那一段快。
香港机只做转发:Cloudflare 上的数据库、存储、统计绑定一个字不用动,客户端请求的域名不变,不用发新版本。它是没有备案时的次优解;有了备案,把接口搬到境内服务器,会再近一层。
香港服务器反向代理怎么设置:Caddy 最小配置
我们用的是 Caddy,因为它会自动申请和续期证书,配置很短。下面是一个最小配置,域名都是占位符:
api.example.com {
reverse_proxy https://your-worker.your-subdomain.workers.dev {
header_up Host {upstream_hostport}
}
}
- 第一行是给国内用户访问的域名,Caddy 会为它自动申请证书。
reverse_proxy后面是你原来 Worker 的地址。header_up Host这一行把转发时的 Host 改成上游的域名,让它和 TLS 握手里的服务器名一致,Cloudflare 才知道该交给哪个 Worker。Caddy 官方文档说明,2.11.0 及以后的版本转发到 HTTPS 上游时会自动这么做,旧版本要手动写。我们当时是手动写的,写上也不影响新版本。
服务器这边要做的:安装 Caddy,把上面的内容写进它的配置文件,然后重启。云厂商的防火墙或安全组要放行 80 和 443,80 端口签证书时要用。
上线顺序:先改解析,再加站点
- 在 Cloudflare 把这个域名从 Worker 的自定义域名里移除。
- 给这个域名加一条 A 记录,指向香港服务器,只做解析,不开 Cloudflare 的代理(控制台里的灰色云朵)。
- 等解析生效以后,再在香港服务器上加站点、重启 Caddy。
顺序反过来会出问题:解析还指向 Cloudflare 时就加站点,Caddy 申请证书的校验请求会打到 Cloudflare 上,申请失败,然后进入退避重试,要手动重启才会重新申请。Caddy 官方文档也写明,要先把域名的解析指向服务器,它才能申请证书。
我们踩过的坑
- 本机测试被代理劫持:电脑开着代理时,解析出来的是代理软件分配的假地址,请求还会被按域名转回 Cloudflare。验证一律用第三方多节点测速工具,或者在服务器上自测。
- 看到 Cloudflare 的 525 错误:说明请求打到了 Cloudflare 上一个已经删掉的自定义域名,也就是你的测试被转回了 Cloudflare,不是香港机的问题。
- 看到
tlsv1 alert internal error:说明香港机上的 Caddy 还没有这个域名的证书,站点没加成功或证书没签下来,不是转发的问题。看 Caddy 日志里有没有证书申请成功的记录。 - 命令跑错了地方:
systemctl报找不到命令,多半是在自己电脑上跑了本该在服务器上跑的命令。脚本开头先检查一下当前环境。
和搬到境内怎么取舍
| 香港中转 | 搬到境内服务器 | |
|---|---|---|
| 备案 | 不需要 | 需要 |
| 代码改动 | 不改 | 后端要自包含,不能回连 Cloudflare |
| 速度 | 明显变快,仍有一段跨境 | 最快,我们实测从 10 秒以上到 1.2 秒左右 |
| 维护 | 多一台香港机 | 多一台境内机,还要维护备案 |
一个稳妥的顺序是先加香港中转解决眼前的问题,同时推进备案(见 App 备案流程),号下来以后再把核心接口搬进境内。完整的决策思路见 网站国内访问慢怎么解决。