用 VPS 反向代理本地服务器到公网(Tailscale 虚拟内网方案)

在现实中,如果你身边有一台性能不错的服务器,但是没有公网 IP,可以通过购买一台便宜的 VPS 组成虚拟内网,然后用 VPS 反向代理本地服务到公网上。

Q:为什么不用 frp?
A:frp 更新频繁,配置稍显复杂,而 Tailscale 的设置相对简单。

0.5 购买一台公网 VPS

推荐 AKI,一家主打大流量的云服务商,便宜主机可以蹲活动,或者在 Push 市场加价买。

我的 aff 链接:
https://akile.io/register?aff_code=4b747e2a-2136-4be3-b678-d470b262f0bf

1. 安装环境

为了方便运维,本地机和 VPS 都装上宝塔面板。

我的操作环境(仅供参考,不必完全一致):

  • 本地主机:Debian 12、宝塔 11.0、nginx 1.28、PHP 8.4
  • VPS:Debian 12、宝塔 11.0、nginx 1.28

2. 组建虚拟内网

打开 tailscale.com,注册账号并新建虚拟内网,将两台机子都加入同一内网。

在 Tailscale 的管理面板有操作引导和一键加入命令,非常简单。

3. VPS 反代本地服务

我在本地服务器上通过虚拟内网迁移好了另一台云主机的 WordPress,这就是本地服务。(宝塔迁移很好用,你知道吗?)

本地机设置

在本地主机的网络服务中,添加本机的虚拟 IP(Tailscale 分配的地址)。

VPS 设置反向代理

在 VPS 的宝塔面板中添加反向代理,指向本地机的虚拟 IP 。

4. WordPress 反代后的 HTTPS 问题

一般的网络服务到这就能正常访问,但 WordPress 使用 SSL + 反向代理时可能会遇到样式丢失问题。

参考:
WordPress 反代后,css 丢失或者后台进不去的问题的解决 - NodeLoc

原因
回源使用 HTTP(80 端口)时,WordPress 误以为是 HTTP 网站,导致资源链接变成 http:// 而不是 https://

解决方法

  1. 在反代的 VPS 上申请 Let's Encrypt 证书,并启用强制 HTTPS
  2. 将 VPS 的证书复制到本地机,同样启用强制 HTTPS
  3. 如果使用 Cloudflare CDN,建议使用“灵活模式”。

5. 多服务反代

如果有多个网络服务,可以通过不同端口区分,并分别反代。


这样,你就能用一台便宜的 VPS,把没有公网 IP 的本地服务器服务安全地发布到公网了。

本地服务器+反向代理=便宜且性能强劲的公网服务器。