小沨的天空

  • 首页
  • 图床
  • 赞助
  • 网盘
  • 关于本站
私人小天地
谈天说地,学习笔记
  1. 首页
  2. Linux
  3. 正文

Gravatar头像的镜像使用Cloudflare Workers反代自建

2022年11月15日 406点热度 0人点赞 0条评论

众所周知的情况Gravatar头像是直接无法访问,但是很多网站使用Gravatar网站的头像图.
下面就分享一下使用Cloudflare Workers 反代自建来解决Gravatar头像镜像.

Cloudflare Workers创建,直接看截图操作吧.

然后编辑

自建的反代代码如下:

// 替换需要反代的站点
const upstream = 'gravatar.com'

// Custom pathname for the upstream website.
const upstream_path = '/'

// 如果那个站点有专门的移动适配站点,否则保持和上面一致
const upstream_mobile = 'gravatar.com'

// 可以禁止哪些国家访问
const blocked_region = []

// 禁止哪些IP访问
const blocked_ip_address = ['0.0.0.0', '127.0.0.1']

//  Replace texts
const replace_dict = {
    '$upstream': '$custom_domain',
}

// 以下不需要修改
addEventListener('fetch', event => {
    event.respondWith(fetchAndApply(event.request));
})

async function fetchAndApply(request) {

    const region = request.headers.get('cf-ipcountry').toUpperCase();
    const ip_address = request.headers.get('cf-connecting-ip');
    const user_agent = request.headers.get('user-agent');

    let response = null;
    let url = new URL(request.url);
    let url_host = url.host;

    if (url.protocol == 'http:') {
        url.protocol = 'https:'
        response = Response.redirect(url.href);
        return response;
    }

    if (await device_status(user_agent)) {
        upstream_domain = upstream
    } else {
        upstream_domain = upstream_mobile
    }

    url.host = upstream_domain;

    if (blocked_region.includes(region)) {
        response = new Response('Access denied: WorkersProxy is not available in your region yet.', {
            status: 403
        });
    } else if(blocked_ip_address.includes(ip_address)){
        response = new Response('Access denied: Your IP address is blocked by WorkersProxy.', {
            status: 403
        });
    } else{
        let method = request.method;
        let request_headers = request.headers;
        let new_request_headers = new Headers(request_headers);

        new_request_headers.set('Host', upstream_domain);
        new_request_headers.set('Referer', url.href);

        let original_response = await fetch(url.href, {
            method: method,
            headers: new_request_headers
        })

        let original_response_clone = original_response.clone();
        let original_text = null;
        let response_headers = original_response.headers;
        let new_response_headers = new Headers(response_headers);
        let status = original_response.status;

        new_response_headers.set('access-control-allow-origin', '*');
        new_response_headers.set('access-control-allow-credentials', true);
        new_response_headers.delete('content-security-policy');
        new_response_headers.delete('content-security-policy-report-only');
        new_response_headers.delete('clear-site-data');

        const content_type = new_response_headers.get('content-type');
        if (content_type.includes('text/html') && content_type.includes('UTF-8')) {
            original_text = await replace_response_text(original_response_clone, upstream_domain, url_host);
        } else {
            original_text = original_response_clone.body
        }

        response = new Response(original_text, {
            status,
            headers: new_response_headers
        })
    }
    return response;
}

async function replace_response_text(response, upstream_domain, host_name) {
    let text = await response.text()

    var i, j;
    for (i in replace_dict) {
        j = replace_dict[i]
        if (i == '$upstream') {
            i = upstream_domain
        } else if (i == '$custom_domain') {
            i = host_name
        }

        if (j == '$upstream') {
            j = upstream_domain
        } else if (j == '$custom_domain') {
            j = host_name
        }

        let re = new RegExp(i, 'g')
        text = text.replace(re, j);
    }
    return text;
}

async function device_status (user_agent_info) {
    var agents = ["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"];
    var flag = true;
    for (var v = 0; v < agents.length; v++) { if (user_agent_info.indexOf(agents[v]) > 0) {
            flag = false;
            break;
        }
    }
    return flag;
}

最后就绑定自己的域名

github: https://github.com/logdns/dev/blob/master/blog/Gravatar-Cloudflare-Workers

标签: Cloudflare Workers Gravatar 反代 头像 自建 镜像
最后更新:2022年11月15日

mikj

这个人很懒,什么都没留下

打赏 点赞
< 上一篇
下一篇 >

文章评论

您需要 登录 之后才可以评论
站内搜索
最新 热点 随机
最新 热点 随机
满5美元提现,每天签到和购物返现的网站 Win10蓝牙链接wifi热点网络和Win10使用蓝牙共享网络分享 Gravatar头像的镜像使用Cloudflare Workers反代自建 如何在论文中使用证据 acme申请google Public Certificate 免费ssl 证书应用LNMP Ubuntu的远程桌面环境使用Docker与Xfce Azure100美金使用开源的Azure 管理面板 网站Cloudflare使用CDN后如何获取前端真实客户IP Win10 共享文件夹(设置账户密码与终止所有连接) 戴尔PowerEdge R430设置RAID0 安装WINDOWS10
linux系统的shell一键脚本集合,网络收集(持续更新) 日本conoha vps ubuntu安装锐速,更换内核 免费org.ua域名 申请攻略 nginx目录浏览配置第三方插件fancyindex Python setuptools import error 欢迎使用Micolog Windows PowerShell批量创建Office 365 子账户(转) 监控宝 安装使用指南 CentOS5 更新镜像源 mirrors.163.com LastPass Premium 帐号免费半年
标签聚合
centos 代码 vps 服务器 php 升级 ubuntu debian 域名 系统 安装 网盘 Cloudflare linux 免费 DirectAdmin LNMP wordpress 月捐 插件
分类
  • Linux
  • VPS服务器
  • windows
  • wordpress
  • 域名相关
  • 建站分享
  • 教程学习
  • 数据库类
  • 未分类
  • 资源分享
友情链接
  • 李子博客
  • 死老鬼
  • semnew
  • vzone
  • 夜狐
  • QQTM论坛
  • 麦麦同学
  • 娃娃博客
  • 怪鸟博客
  • 撸羊毛
  • QQPCC
  • 我喔喔喔
  • 豆博
  • 寥寥后花园
  • 轨迹博客
  • 我的图库
  • 傻子-跸西的blog
  • 爱购啦
  • 朱志瑞
  • Shucheng Li
  • 天下无鱼
  • logdns.free.fr
  • 午夜客
  • 2.int.ru
  • xiaofengsky.free.fr
  • 回到未来博客
  • 小沨记事本
  • 陈否否
AD

COPYRIGHT © 2022 Xinai.De. ALL RIGHTS RESERVED.@ 网站运行:@ 服务器运行状态

Theme Kratos Made By Seaton Jiang