blog/_posts/2022-10-05-rules.md

27 lines
6.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
layout: post
title: Cloudflare规则新功能体验
tags: [Cloudflare, 规则, 功能]
---
Cloudflare真是良心为广大站长节约了无数成本<!--more-->
# 起因
之前登录到Cloudflare的时候看规则的时候发现了一些新功能现在好像增加了什么转换规则动态重定向啥的。看到之后好像还挺有意思就试用了一下。用了一下之后发现还真不错功能很强大而且还免费。所以这次想说说关于Cloudflare规则新出的几个功能体验。
# 使用体验
为了更好的描述,我就直接用实例说明了。
## 二级域名重定向到用户页面
之前Telegram出了个新功能可以直接用二级域名作为自己的Telegram名片比如我的用户名是unmayx在Telegram上就是 <https://unmayx.t.me/> 。这个功能看起来还挺有意思的所以我也想给自己的网站整一个。其实这个东西如果说自己的网站没有二级域名直接用页面规则就可以做出来这个功能能实现也是多亏了Cloudflare愿意让免费用户使用泛解析的代理真是太良心了😭。首先在解析里加一条泛解析A或者CNAME都行目标也可以随便填。然后在页面规则里加一条URL为`*.example.com/*`这样的地址具体域名写自己的就行然后设置为转发URL状态代码301或者302都行目标URL填类似于`https://example.com/username-$1.html`具体规则根据自己网站来像Telegram那样的规则就可以填`https://t.me/$1`这样子 ~~当然Telegram不可能用Cloudflare的CDN啦🤣~~
不过这样设定有个问题大多数网站不会只有一级域名如果有二级域名而且也用了Cloudflare CDN会和规则冲突导致优先匹配规则。Cloudflare原来的页面规则比较拉跨的地方就是除了匹配URL没有别的可以操作的地方像我要不匹配某个东西也没办法做到。还好新出的动态重定向有这样的功能它可以匹配一串东西比如我要不匹配某个地址比如www开头的我可以写`not starts_with(http.host, "www.")`反正Cloudflare的证书也没法用在三级以上的域名这样匹配也没啥问题。另外还要除了自己所以最终写成`(not starts_with(http.host, "www.") and http.host ne "example.com")`就可以啦,接下来就是写动态重定向到哪里了。我翻了半天[文档](https://developers.cloudflare.com/ruleset-engine/rules-language/)发现除非用正则表达式,否则没有办法单独把`http.host`中“.”前面的东西取出来,然而正则功能不是免费的😂。
但是之前用页面规则的时候也没有这个问题啊,怎么这个新功能还有这种问题……不过既然页面规则支持这个功能那我们就可以把两个结合一下,先用动态重定向接收,然后发给页面规则处理就好啦,所以我们可以把刚刚动态重定向的表达式写成一个和现有网站不冲突的地址,比如`concat("https://example.com/user/", http.host, "/")`这时候它会先重定向到一级域名的某个位置然后用页面规则接收一下URL设定为`example.com/user/*.example.com/`然后目标URL设定为`https://example.com/username-$1.html`就可以啦。
## Pixiv图片反代
之前我也有搭过Pixiv的图片反代是学着[Pixiv圖片代理](https://pixiv.re/reverseproxy.html)的教程搭的用的是Cloudflare Workers不过我大概看了下代码其实我们的主要目的只是想让服务器收到可以用的Referer嘛正好这个新出的转换规则就挺不错的可以重写URL、请求头和响应头那么我们这次的需求就是把请求Pixiv图片服务器的请求头改掉吧那么我们就首先给自己的域名加一条指向i.pximg.net的CNAME解析像我整的就是 <https://pixiv.mayx.eu.org> ,然后添加一条修改请求头的转换规则,内容就写当`(http.host eq "pixiv.mayx.eu.org")`时将Referer设定为 <https://www.pixiv.net/> 就好啦实际上好像是只要包含pixiv字样就可以
为了让它能发挥更大的用处,我想起来我以前写的[发图微信机器人](/2021/02/23/picbotpro.html)这次我想整个直接在Web界面就可以用的于是[Viewer](https://github.com/Mabbs/pixiv-index/blob/main/setu.html)就诞生了而且用的就是我新设定的反代相比原来的Workers反代不仅没有了请求次数限制而且还可以设定页面规则来设置更长时间的缓存来达到更快的速度。
## Iwara下载地址解析与DNS解析
看着这个规则我就又想起来了高中的时候写的[Iwara Viewer](/2019/04/13/iwara.html)因为跨域我不能直接用Web调用Iwara的API而且当时主要是为了给服务器获取下载地址。现在我既然可以用转换规则改响应头那相应的我就可以加一个`Access-Control-Allow-Origin: *`了吧那这样我也可以用前端去直接调用Iwara的API了吧所以我简单写了一个[Iwara Downloader](/iwara.html)因为对JavaScript不是特别熟悉而且Iwara的目录老是出问题所以就懒得写Viewer了。现在只要把Iwara的地址粘到输入框里比如[OBSERVATION DIARY](https://ecchi.iwara.tv/videos/jemn7sgm7wuw0oqv9)就可以获取到这个视频的下载地址。不过这个东西确实有点鸡肋了😂毕竟Iwara又不是不给你下载地址。
其实我写这个还有个想法就是做在国内下载的加速器但是那个防盗链实在是整的让人难受它的Hash目前来看好像是由文件名Host过期时间和访问者IP四个值算出来的有没有更多的我也不清楚我要是修改了这四个中的任意一项就会403然而Iwara的域名又被DNS污染了首先先解决这个问题吧Cloudflare能代理除了它本身的其他不检查Host的网站我想了想可以反代Google DNS的DoH这样我就可以获取到下载地址的真实IP了顺便dns.mayx.eu.org就相当于我的DoH了。不过获取到了也没什么用😂如果改hosts会发现有SNI RST直接用IP访问防盗链会检查Host字段我也想过要不然把下载的地址再反代一下不过因为会检查Host那个转换规则又不能改Host所以没办法就先写这么个东西吧。
# 感想
Cloudflare真是良心啊其他就算是付费CDN可能都没有这么多功能吧而且还抗打。不过限制还是比较多的要是能像Nginx那样随意配置该多好啊😂不过想想也不可能真那样估计就被大规模滥用了。