【更新】Vercel 直接绑定域名

破案了,直接在 vercel 绑定域名也是可以的。先前我未能成功是因为我域名的SSL/TLS 加密模式没配置好。在 CF 里把此处改为完全即可解决“重定向次数过多”的问题。这样一来,登录后台的问题也解决了。

原因是当网站开启了 CloudFlare 服务,用户访问网站时实际访问的是离用户比较近的服务器,Cloudflare 再代理用户请求我们的源服务器,以达到加速和保护源服务器的目的。

如果在 SSL 中设置了 Flexible(灵活),CDN 会以 HTTP 协议回源网站。但如果源网站支持 HTTPS 并且设置了通 HTTP 协议访问时,CDN 会自动跳转访问 HTTPS 协议。

完美的循环重定向,最后浏览器不干了,报错 ERR_TOO_MANY_REDIRECTS。

既然已经有更好地方式解决问题,本文便用作 Worker 反代的方式之一的记录。


前言

2022 年 8 月 LeanCloud 官方表示由于管理原因,国际版公共域名在中国大陆无法访问,对于我这种不想备案的人来说不大友好。再加上看到有人说 Valine 安全性的问题(很多偏隐私的数据在前端即可查看),心生后怕,最后综合考虑,我选择 Waline。至于 Gittalk 这种,我认为这种需要特地登录账号的评论系统不够简洁。

前文提到 Waline 的部署方式之一是 Vercel 部署,但由于 Vercel 的某些功能在科学上网方面“比较友好”,所以*.vercel.app域名也就被“名正言顺”地墙了,以至于一段时间内常常使用代理阅读国外项目说明文档的我没能发现这个问题 (⊙﹏⊙)。

顺带更正下前面写过一篇配置 Valine/Waline 的文章的问题。

  1. Valine 由于我自暂未研究明白,且看在 Waline 后台方面便选择后者。Waline 在部署完后,如果主题有预留评论系统的配置项,在主题配置文件中只需在 Waline 填写生成的访问链接即可,无需额外引入 js 等,包括 leancloud 提供的域名。
  2. 使用海外版的 LeanCloud 也可以在国内访问,可以通过 Cloudflare 反代曲线救国解除封印。【我知道直接在 vercel 处理完域名就万事大吉了,可惜当时没解决。】

做法

我默认你的 Waline 已经在 Vercel 部署完成,打开代理时,使用其默认分配的vercel.app域名可以正常加载评论系统。同时,我默认你手头有一个在 Cloudflare 正常解析的域名。

此方法适用于几乎任意明网的反代。

打开并登录 Cloudflare 控制台,在左侧菜单找到Workers 和 Pages一项,在概述标题下方找到创建应用程序按钮(此处我已创建过了)。

【图 1】

选择 Worker 一路默认,名称随意,最后点击部署按钮。

【图 2】

回到概述,点击你刚才创建的 Worker,点击右上方快速编辑,删除其中所有内容,并替换为以下内容(下文为截至此文前我使用的方案。你有别处搜索到更好的也可以使用):

【图 3】

1
2
3
4
5
6
7
addEventListener("fetch", event => {
let url = new URL(event.request.url);
url.protocol = 'https:'
url.hostname = "【你想要代理的域名,前后不加斜杠、https 等】";
let request = new Request(url, event.request);
event.respondWith(fetch(request));
})

【图 4】

如果一切正常,右侧会返回 200 表示发送接收成功。

域名绑定

很显然,CF 的这个功能,创建镜像站点,一定程度上能够轻松绕过防火墙访问一些内容,对科学上网“十分友好”(不排除正常使用该功能加速网站的用户),所以*.worker.dev这个域名的下场和上文 vercel 那个大差不差,需要使用自己的域名来解决这一问题。

这绑定域名没什么好讲解的了,从概述界面点击进入你刚才创建的 worker 详细界面,点击Custom Domains(详见图三中“预览”字样下方),往下找到自定义域,点击添加自定义域,按照提示绑定。

【图 5】

完成后等待域名证书一栏变绿显示有效即可

后记

这只能解决评论区正常使用的问题,管理员登录的问题还没解决(只能用那个被墙的vercel.app域名,可能是我还未研究透彻)。