利用 cf 隐藏端口(无需修改 ns)并绕过 CORS
借鉴其他大佬的经验,增加了一个博客订阅页面,后端用的 FreshRSS。一开始用的套 cloudflare 的域名,比较麻烦的地方在于需要增加 CORS 规则,而且国内访问比较慢,最致命的是 FreshRSS 页面有时候刷不出剩下的条目。所以就在想,有没有办法可以多个域名访问:带端口的直通域名 A 自己使用;增加一个跟博客同域的子域名 B 用于前端 fetch。当然,最简单的是把域名 B 的 NS 记录迁移到 cf。那么有没有仅修改 CNAME 的方式呢?
下面就是最新成果:
设置 FreshRSS 基础域名
FreshRSS 用了 php 作为配置文件,这就很方便了,找到data/config.php
,修改以下字段:
|
具体含义就不罗嗦了,根据需要自行修改。
配置 cloudflare SaaS 服务
这个网上一堆教程,比较重要的前提是有绑定 cf 的域名 C 作为 fallback origin。可能的坑包括:
- 解析记录需要明确的字段,比如 rss,泛域名字符“*”是不可以的
- 验证完域名 B 的 txt 记录之后别忘了还有个 ssl 相关的 txt 记录
- 回源子域名 C 不能是服务器上绑定过反向代理或虚拟主机的
修改端口和域名解析
为回源域名增加 Origin Rules,转发所有流量到服务器的指定端口,也可以根据需要增加 condition。回到域名 B 的 DNS 配置页,增加指向回源子域名 C 的 CNAME 规则。再到服务器增加一个反代或者虚拟服务器规则,注意这里设定的是子域名 B 的,而不是 C 的,端口填 Origin Rules 指定的值。如果还有路由层,再在路由器上增加一个转发规则。
测试
测试前记得在 cf 上打开 develop mode 暂时关闭 cache。使用子域名 B 访问,看看是否能正确打开 FreshRSS 登录页。至于跨域,是我想多了..子域名也算跨域。xml 也不能用 JSONP,除了 以一些不稳定的公共 api,也只剩 HTTP Header 一条路了。
好了,想到这么多就先写下来。cf 不愧是网络瑞士军刀,穿透、跨域、反代、边缘节点..你能想到的需求总能在这里找到实现方式,而且大部分功能是免费的!另外,在论坛发帖求助后有大佬展示了 cf tunnel + SaaS 实现的 CNAME 级域名转发,有兴趣的可以点击这里围观。Bye~~