使用CloudFlare自己搭建Google镜像站

Hello, 欢迎登录 or 注册!

/ 2评 / 0

本文作者:  本文分类:hacker  浏览:2102
阅读时间:3256字, 约3.5-5.5分钟

这篇文章列出了一些可用的Google镜像站,但是无法保证他们一直可用。所以,自己搭建才是最佳选择。

首先,去Cloudflare进行注册。
Cloudflare 官网:https://www.cloudflare.com/zh-cn/
官网首页有中文,注册和登陆的时候就没有了。点击注册,然后填写邮箱和密码,即可完成注册。

注册好之后,去dashboard里面:
点击workers。

右上角创建worker.

将下面的代码copy到里面去,点击蓝色的那个“保存并部署”,等待一会就好了。

const upstream = 'www.google.com'

const upstream_mobile = 'www.google.com'

const blocked_region = ['KP']

const blocked_ip_address = ['0.0.0.0', '127.0.0.1']

const replace_dict = {
    '$upstream': '$custom_domain',
    '//www.google.com': ''
}

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;
}

female sex toys
wig store
adidas factory outlet
adidas factory outlet
nike air jordan black
new style wigs
nfl custom jersey
sex toys for sale
green bay packers
nike air jordan retro
Adult Sex Toys
male sex toys
Steelers Jerseys
nike air jordan shoes
green bay packers

关于作者

  1. EricNTH's Phone说道:

    worker 永远嘀神

  2. EricNTH说道:

    上一条为小程序评论测试

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注