Cloudflare 简单几步用Cloudflare Workers搭建WorkersProxy加速任意网站

本文总共 2441 字 · 阅读全文大约需要 7 分钟
(2019-09-18) @Sleepyhead    


Cloudflare Workers的名称来自Web Workers,更具体地说是Service Workers,一个用于在web浏览器后台运行并拦截HTTP请求的脚本的W3C标准API。Cloudflare Workers是针对相同的标准API编写的,但是是在Cloudflare的服务器上运行,而不是在浏览器中运行。

CF Workers

以下是您可以使用的工具:

  • 使用最新的标准语言功能执行任意JavaScript代码。
  • 拦截和修改HTTP请求和响应URL,状态,标头和正文内容。
  • 直接从您的Worker响应请求,或将其转发到其他地方。
  • 将HTTP请求发送到第三方服务器。
  • 以串行或并行方式发送多个请求,并使用响应组成对原始请求的最终响应。
  • 在响应已经返回到客户端之后发送异步请求(例如,用于记录或分析)。
  • 控制其他Cloudflare功能,例如缓存行为。

如果想了解更多关于Cloudflare Workers的信息可以前往:https://blog.cloudflare.com/zh/xian-zai-qi-ren-he-ren-du-ke-yi-zai-cloudflareshang-shi-yong-workersyun-xing-javascript/


以上都是废话,下面直接上正文

步骤

getstarted

  • 创建一个Worker

create

  • 把左边内容替换成以下代码

code

// List of domains bind to your WorkersProxy.
const domain_list = ['https://你的cloudflareWorker应用地址/']

// Website you intended to retrieve for users.
const upstream = 'https://需要加速的网站的地址/'

// Website you intended to retrieve for users using mobile devices.
const upstream_mobile = 'https://需要加速的网站移动端的地址/'

// 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 = ['0.0.0.0', '10.0.0.0']

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 = request.url;

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

    for(let domain of domain_list) {
        url = url.replace(domain, 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 headers = request.headers;
        response = fetch(url, {
            method: method,
            headers: headers
        })
    }
    return response;
}

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

最后点击下方的Save and Deploy即可!

save

相关

cloudflare workers有一个限制就是每天的请求次数不能超过100000次,不过影响不大,我想一天也用不完10w次

google

推荐