前言

因为一些原因,我无法使用saas(其实就是没借记卡),所以打算通过一些其他办法来实现IP优选

不建议使用该方法,因为可能会被SNI阻断

此方法貌似会导致网站出现“连接不安全”提示
如果想避免“连接不安全”需要设定自定义SSL,但这通常需要Business以上套餐

使用此方法,你必须拥有两个域名或者一个支持通过仅DNS托管域名的服务商,并且该服务商支持配置源站IP及回源host,此处使用的是edgeone

准备工作

获取edgeone账户

如果有可以不看,如果没有可以前往edgeone的领取地址领取免费套餐,算上微信抽奖获取的,可以获得最多五个免费套餐,也就是可以绑定最多五个域名
值得注意的是,这个免费套餐如果受到大流量攻击,可能会直接给这个站点停止服务

cloudflare账户

这个应该大家都有,就不过多说了

获取优选IP(可选)

首先通过工具获取优选IP,这里我用的是CloudflareSpeedTest来进行测速

测速完成后会生成一个csv文件,一般为result.csv,使用系统自带的文本编辑器打开即可

实现方法

由于不能使用SaaS,我只想到能通过重定向规则来实现IP优选,且需要一个支持源站组的服务商,这里我用的是edgeone

配置edgeone

首先登录edgeone,在面板点开你的域名,左侧点开域名服务,有个源站配置,里面就有源站组

配置源站组

进入源站组,先新建源站组,名称随便填,两个类型(通用型和HTTP专用型)均可,看个人需求,我这里用的是HTTP专用型

添加源站,填入你优选的cloudflare IP,权重可以不填(edgeone会自动尝试分配到最优源站),也可以按照你的优选IP结果来,不过源站IP最多可以填20个

权重计算公式如下

下列公式和权重计算步骤来自Gemini,请注意瓶别

$$\text{单个源站流量比例}_i = \frac{\text{该源站权重}_i}{\sum_{j=1}^{n} \text{源站权重}_j} \times 100\%$$

权重计算步骤

  1. 求和:首先将源站组内所有处于“可用”状态的源站权重数值相加,得到总权重分母。
  2. 占比计算:使用单个源站的权重除以总权重。
  3. 流量分配:EdgeOne 根据计算出的百分比,将客户端请求按比例分发到各个源站。

回源host填入你的主域名

配置访问域名

在基础配置,选择域名管理,添加域名,加速域名不能和源站域名相同

源站配置改为源站组,并选择刚才新建的源站组,设置好后,点击下一步,一键启用即可

你需要保证流量不会被Cloudflare进行质询,因为你无法添加自定义域,质询会检测浏览器访问的主机名,导致质询出现问题,无法正常验证

配置cloudflare

为了保证访问会跳转到加速域名,我们需要配置重定向规则进行跳转,重定向规则表达式如下

(http.host eq "你的域名" and not http.user_agent contains "Cloudflare-RPC" and not starts_with(http.request.uri.path, "/cdn-cgi/") and not http.request.uri.path contains "avatar.ico" and not http.request.headers["x-pjax"][0] eq "true")

如果你要自己配置表达式,可以参考如下:

条件成分 目的
主机名等于你的域名 确保规则只作用于该博客域名。
用户代理不包含Cloudflare-RPC 排除 Cloudflare 内部通信或部分 Worker 触发的请求。
URL路径开头不是/cdn-cgi/ 排除 Cloudflare 的功能性路径。
URL路径不包含avatar.ico 排除头像图标请求。
not http.request.headers["x-pjax"][0] eq "true" 排除 PJAX 异步加载请求。(可选)

注:此处的排除 PJAX 可以根据自己的需要更改

由于请求头规则貌似无法在编辑器里找到,通过图形化编辑添加完后可能还需要编辑表达式增加PJAX规则,附加到结尾的括号前面即可,表达式如下

and not http.request.headers["x-pjax"][0] eq "true"

重定向规则选择动态,状态码按照自己情况选,表达式如下

concat("你的加速域名", http.request.uri.path)

将保留查询字符串打开,就可以用了,直接访问会被跳转到在其他平台托管的域名