使用Vercel反代Leancloud国际版api以避免屏蔽

本文最后更新于:5 个月前

情况描述

我用的Hexo主题为Fluid,它内置了用leancloud实现的UV统计功能。作为一位完全不想备案,想方设法逃避的博主,我当然不会选择leancloud国内版,国际版才是最优选!

然而,由于手机和电脑分流规则皆是“漏网之鱼”指向了代理,我也没有专门为我的网站设立规则,我一直没发现一个问题:通过大陆ip访问博客时,leancloud的api会拒绝连接![1]

我分配到的leancloud api地址是ewtbugjp.api.lncldglobal.com,大陆直连时服务器会拒绝连接,其他地方访问才会出现404的返回。

不知道这是什么情况,我Google了好一会儿也没找到原因,没有任何人报告出现此问题。唉,无论是否是特例,我都得修好这个bug!

请注意⚠️
此方法涉及到源代码修改,如果你用的是Serverless托管部署方案[2],主题安装方式必须为releases包安装,而非npm install方式安装。

解决方法

思路

既然直连不行,还有种方法叫“反代[3]”。通过一个不在大陆的服务器去反代这个api,是否就能躲开leancloud国际版对于大陆ip的屏蔽?

可是我的整套个人网站都是Serverless的,不存在后端去代理啊?🤔

事实上,serverless服务也可以作为反代服务器!有很多种办法达成目的。考虑到我现在主博客采用的Vercel部署,且延迟优秀、速度快,自然就想到了用Vercel来反代。

当然,Cloudflarr Worker也可以达到类似效果。教程可以在Google上面搜一下,估计一大堆。

一. Vercel反代

首先,你得有一个Vercel的帐号。
这不是废话嘛

其次,你得有一个终端环境。推荐bash或zsh。

1. 安装Vercel CLI

通过Debian系的sudo apt install npm或CentOS系的sudo yum install npm安装npm包管理器。

安装完成后,使用npm i -g vercel以安装Vercel CLI。

2. 登陆Vercel CLI

vercel login

这个过程中有很多种登录方式,这里就不细说了,看着英文指导来就可以。

3. 创建反代文件

新建一个文件夹当作部署的根目录,在文件夹下随便创建一个json文件。我的是ewtbugjp.api.lncldglobal.com.json

在json文件内写入

1
2
3
4
5
6
{
”version“: 2,
”routes“: [
{”src“: ”/(.*)“,”dest“: ”https://ewtbugjp.api.lncldglobal.com/$1“}
]
}

上面的https://ewtbugjp.api.lncldglobal.com是我的api地址。可以在leancloud项目后台找到替换上去,或者通过appid获取:

https://app-router.leancloud.cn/2/route?appId=

将appid添加到上述地址后面访问,即可看到json格式的返回,其中最后一个api_server的值即为你的api服务器域名。

4. 部署

准备好反代文件后,就可以部署了。

vercel -A ewtbugjp.api.lncldglobal.com.json —prod

上面命令中的json文件名记得改为你记得的。

5. 获取部署域名

访问vercel,找到你刚刚部署的项目后,可以选择在设置中通过A记录或CNAME添加域名,也可以直接用vercel提供的域名。

记录下这个域名,我们开始替换leancloud.js内的地址。

二. 替换leancloud地址

以Fluid主题内的leancloud.js为例。

1. 找到leancloud.js

使用npm包安装、在vps或云服务器上运行的Hexo中,leancloud.js文件是node_modules/hexo-theme-fluid/source/js/leancloud.js

使用releases安装在themes文件夹,则leancloud.js是themes/fluid/source/js/leancloud.js

2. 修改server_url

脚本内大约180多行处,有一处代码如下:

1
var apiServer = serverUrl || `https://${appId.slice(0, 8).toLowerCase()}.api.lncldglobal.com`;

将其改为:

1
var apiServer = serverUrl || `https://leancloud.morax-xyc.com`;

当然,此处的https://leancloud.morax-xyc.com应该修改为你自己的反代网址。

推送部署后,你的api应该就能全球访问了。此行为不会影响“浏览人数”的数据。

注释
  1. 官方没有任何关于此现象的信息,无法判断是否所有国际版api都有此问题。
  2. 即Cloudflare Pages、Github Actions & Pages、Vercel、Heroku等
  3. 即反向代理,与一般意义上代理不同,反向代理负责代理需要请求的资源再返回给客户端,于是被请求服务器只能得到反代服务器的IP及反代内容。

使用Vercel反代Leancloud国际版api以避免屏蔽
https://www.morax-xyc.com/post/ab0987cd/
作者
Morax-xyc
发布于
2022年5月13日
更新于
2022年5月13日
许可协议