使用cloudflare workers反代图片
有一个没有流量的辣鸡采集站,源站的图床不支持https,所以原来是在有访问的时候把图片下载到服务器的,最近服务器到期了要换小鸡,发现图片占的空间不小,就想着直接用nginx反代源站图床好了,省点硬盘,后来发现cloudflare worker可以直接反代图片,这下图片连服务器资源都省了,直接白嫖了。
如果想白嫖一些设置有referer防盗链的图床,也可以用worker反代,然后修改请求的Referer头,cloudflare workers当然还可以搞很多有意思的玩法,免费版每天有10W次的额度,对于没啥流量的辣鸡站足够用了。
使用nginx配置图片反向代理,只需把图片请求发送到源站就可以了
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
# 反向代理图片
proxy_pass http://图片源站域名;
expires 30d;
}
使用 cloudflare worker 配置图片反向代理
首先要一个cloudflare的账号,登录,在左侧菜单中找到workers,初次使用workers会生成一个随机的子域和一个随机名的worker项目,这个没关系,可以随时进行修改,点开新建的worker项目,快速编辑,把下边的代码复制粘贴,然后可以在右侧窗口直接测试代码,保存并部署。
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
async function handleRequest(request) {
const imageUrl = new URL(request.url);
imageUrl.hostname = "源站域名"; // 替换成源站域名
imageUrl.protocol = "http"; // 源站的http协议
// 构建新的请求对象
const imageRequest = new Request(imageUrl, request)
// 删除 Referer 请求头,也可以使用 imageRequest.headers.set('Referer', '') 修改Referer
imageRequest.headers.delete('Referer')
// 从远程服务器获取响应
const imageResponse = await fetch(imageRequest)
// 将响应体作为字节数组读取
const imageBuffer = await imageResponse.arrayBuffer()
// 构建新的响应对象
const response = new Response(imageBuffer, imageResponse)
// 设置 Content-Type 标头
response.headers.set('Content-Type', imageResponse.headers.get('Content-Type'))
// 返回响应对象
return response
}
如果域名在cloudflare,还要配置路由触发器,并添加对应dns,直接指向服务器ip即可,worker只有匹配路由规则的请求才会触发,其他的请求还是直接发送到服务器的。
添加路由,img.xxxxx.com/uploads/*
,具体路由匹配规则可以查看文档 https://developers.cloudflare.com/workers/platform/triggers/routes/#matching-behavior
域名不在cloudflare的,应该直接添加cname解析指向workers.dev项目域名就可以了,不过这个没测试。
当然也可以直接使用cloudflare workers提供的workers.dev项目域名,不过好像据说workers.dev已经在墙外了。
d2+cf 直接白嫖cdn+oss