不使用SaaS在cf进行IP优选
前言
因为一些原因,我无法使用saas(其实就是没借记卡),所以打算通过一些其他办法来实现IP优选
不建议使用该方法,因为可能会被SNI阻断
使用此方法,你必须拥有两个域名或者一个支持通过仅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个
权重计算公式如下
$$\text{单个源站流量比例}_i = \frac{\text{该源站权重}_i}{\sum_{j=1}^{n} \text{源站权重}_j} \times 100\%$$权重计算步骤
- 求和:首先将源站组内所有处于“可用”状态的源站权重数值相加,得到总权重分母。
- 占比计算:使用单个源站的权重除以总权重。
- 流量分配: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) |
将保留查询字符串打开,就可以用了,直接访问会被跳转到在其他平台托管的域名