标签 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已经在墙外了。