使用Cloudflare Workers对接甲骨文对象存储不仅可以实现防盗链,还能缩短直链,并且在甲骨文翻车后更加容易进行修复替换。
虽然Oracle Cloud文档上写着,如果需要CDN对接对象存储的话,直接使用cname指向甲骨文对象存储域名即可,但我尝试后发现不能正常对接访问。在查阅了Oracle的文档以及多次尝试后,我还是选择使用Cloudflare Workers进行反向代理,从而实现防盗链、缩短直链,并且进一步方便管理。
准备
cyberduck
使用Cyberduck对接好甲骨文对象存储,方法如下:
编辑对象存储可见性为:公共
获取某个文件的直链如下:
https://a0.compat.objectstorage.us-phoenix-1.oraclecloud.com/US/_%E8%AF%B4%E6%98%8E.html
可以分为三个部分:
https:// - 使用https
a0.compat.objectstorage.us-phoenix-1.oraclecloud.com - 网址
/US/ - 文件夹
_%E8%AF%B4%E6%98%8E.html - 文件名(一般中文都被转译了,也可以直接使用中文)
后面将根据这个直链来编写规则。
cloudflare
进入 Cloudflare Workers, 注册或登录 Cloudflare 账号, 为 Workers 设置子域名, 创建新的 Worker.
部署
github
前往github项目:
https://github.com/Siujoeng-Lau/Workers-Proxy
仔细阅读README_zh.md
部署worker
自定义 'src/index.js', 将代码复制到在线编辑器中, 替换默认代码.
只需要修改index.js的部分如下所示
// 代理网站
const upstream = 'www.google.com'
// 代理网站的目录
const upstream_path = '/'
// 手机用户代理网站
const upstream_mobile = 'www.google.com'
// 屏蔽国家和地区
const blocked_region = ['CN', 'KP', 'SY', 'PK', 'CU']
// 屏蔽 IP 地址
const blocked_ip_address = ['0.0.0.0', '127.0.0.1']
// 源站是否开启 HTTPS
const https = true
// 是否允许浏览器缓存
const disable_cache = false
// 文本替换
const replace_dict = {
'$upstream': '$custom_domain',
'//google.com': ''
}
你可以参考我的配置:
// Website you intended to retrieve for users.
const upstream = 'a0.compat.objectstorage.us-phoenix-1.oraclecloud.com'
// Custom pathname for the upstream website.
const upstream_path = '/US/'
// Website you intended to retrieve for users using mobile devices.
const upstream_mobile = 'a0.compat.objectstorage.us-phoenix-1.oraclecloud.com'
// Countries and regions where you wish to suspend your service.
const blocked_region = ['']
// IP addresses which you wish to block from using your service.
const blocked_ip_address = ['']
// Whether to use HTTPS protocol for upstream address.
const https = true
// Whether to disable cache.
const disable_cache = true
// Replace texts.
const replace_dict = {
'$upstream': '$custom_domain'
}
其中:
`代理网站`与`手机用户代理网站`的域名都填对象存储的域名
去掉`屏蔽国家和地区`与`屏蔽 IP 地址`
去掉`文本替换`自带的内容
更改 Worker 名称, 保存代码并部署。
此时你可以使用cloudflare worker分配给你的域名,例如:test.workers.dev
绑定自定义域名
检查你自己的域名是否接入 Cloudflare.(使用CFP或者NS接入均可)
跳转到域名的控制面板, 选择 'Workers' 页面, 点击 'Add Route'.
在 Route 中输入 https://<自定义域名>/*
并且选择刚创建的 Worker.
为自定义域名添加 CNAME DNS 记录. 在 DNS 页面中, 在 'Name' 区域输入自定义域名的子域名 (或者 @), 在 'Target' 区域输入 Worker 的二级域名 (例如 test.workers.dev), 将代理状态选择为 '代理'.
Hotlink 保护
使用
假如
文件直链是:https://a0.compat.objectstorage.us-phoenix-1.oraclecloud.com/US/_%E8%AF%B4%E6%98%8E.html
你自己的域名是:a.abc.com
worker域名是:test.workers.dev
此时你可以使用https://test.workers.dev/_%E8%AF%B4%E6%98%8E.html
或者https://a.abc.com/_%E8%AF%B4%E6%98%8E.html
直接访问文件,为了便于管理以及实现防盗链,请使用你自己的域名进行访问,即:https://a.abc.com/_%E8%AF%B4%E6%98%8E.html
,未来甲骨文翻车后,你直接替换反向代理的源站以及目录即可,在博客上的直链就不用进行替换了。
排错
在我测试过程中,我已经发现并和Workers-Proxy项目作者排除了部分问题。
直链被chrome以文本打开
造成问题的原因是 甲骨文对象存储 在 Response Header 中没有提供该文件的 "content-type", Cloudflare 的 No-Sniff Header 功能禁止 Chrome 主动判断文件类型. (Chrome 无法识别该文件为视频文件, 所以无法下载)
解决方法:
- 进入 Cloudflare 对应域名的 SSL/TLS 设置
- HTTP Strict Transport Security (HSTS) 选择 Change HSTS Settings
- No-Sniff Header 设置为 Off
其他问题
其他问题请在评论区或者GitHub的issues进行提问。
版权属于:寒夜方舟
本文链接:https://www.wnark.com/archives/106.html
本站所有原创文章采用署名-非商业性使用 4.0 国际 (CC BY-NC 4.0)。 您可以自由地转载和修改,但请注明引用文章来源和不可用于商业目的。声明:本博客完全禁止任何商业类网站转载,包括但不限于CSDN,51CTO,百度文库,360DOC,AcFun,哔哩哔哩等网站。