5 分钟搭建专属的 GitHub 加速站

5 分钟搭建专属的 GitHub 加速站

前言

由于国内环境的问题,经常导致下载GitHub的文件缓慢、拉库出错、SSH出错等情况,其实都可以通过GitHub加速来解决。

项目地址:https://github.com/hunshcn/gh-proxy
简单、快速、0成本

演示环境

  • Windows 10
  • Edge
  • 香港节点

新建 Workers

注册登录 Cloudflare:https://dash.cloudflare.com/

点击左侧的 Workers
图片[1]|5分钟搭建专属的 GitHub 加速站

点击创建服务
图片[2]|5分钟搭建专属的 GitHub 加速站

输入一个未被使用的名字后创建
图片[3]|5分钟搭建专属的 GitHub 加速站

编辑 Workers站点

进入创建的服务里,点击快速编辑
图片[4]|5分钟搭建专属的 GitHub 加速站

清空原始内容,并将作者提供的代码复制进去

'use strict'

/**
* static files (404.html, sw.js, conf.js)
*/
const ASSET_URL = 'https://hunshcn.github.io/gh-proxy/'
// 前缀,如果自定义路由为example.com/gh/*,将PREFIX改为 '/gh/',注意,少一个杠都会错!
const PREFIX = '/'
// 分支文件使用jsDelivr镜像的开关,0为关闭,默认开启
const Config = {
    jsdelivr: 1
}

/** @type {RequestInit} */
const PREFLIGHT_INIT = {
    status: 204,
    headers: new Headers({
        'access-control-allow-origin': '*',
        'access-control-allow-methods': 'GET,POST,PUT,PATCH,TRACE,DELETE,HEAD,OPTIONS',
        'access-control-max-age': '1728000',
    }),
}

const exp1 = /^(?:https?:\/\/)?github\.com\/.+?\/.+?\/(?:releases|archive)\/.*$/i
const exp2 = /^(?:https?:\/\/)?github\.com\/.+?\/.+?\/(?:blob|raw)\/.*$/i
const exp3 = /^(?:https?:\/\/)?github\.com\/.+?\/.+?\/(?:info|git-).*$/i
const exp4 = /^(?:https?:\/\/)?raw\.(?:githubusercontent|github)\.com\/.+?\/.+?\/.+?\/.+$/i
const exp5 = /^(?:https?:\/\/)?gist\.(?:githubusercontent|github)\.com\/.+?\/.+?\/.+$/i
const exp6 = /^(?:https?:\/\/)?github\.com\/.+?\/.+?\/tags.*$/i

/**
* @param {any} body
* @param {number} status
* @param {Object} headers
*/
function makeRes(body, status = 200, headers = {}) {
    headers['access-control-allow-origin'] = '*'
    return new Response(body, {status, headers})
}

/**
* @param {string} urlStr
*/
function newUrl(urlStr) {
    try {
        return new URL(urlStr)
    } catch (err) {
        return null
    }
}

addEventListener('fetch', e => {
    const ret = fetchHandler(e)
        .catch(err => makeRes('cfworker error:\n' + err.stack, 502))
    e.respondWith(ret)
})

function checkUrl(u) {
    for (let i of [exp1, exp2, exp3, exp4, exp5, exp6]) {
        if (u.search(i) === 0) {
            return true
        }
    }
    return false
}

/**
* @param {FetchEvent} e
*/
async function fetchHandler(e) {
    const req = e.request
    const urlStr = req.url
    const urlObj = new URL(urlStr)
    let path = urlObj.searchParams.get('q')
    if (path) {
        return Response.redirect('https://' + urlObj.host + PREFIX + path, 301)
    }
    // cfworker 会把路径中的 // 合并成 /
    path = urlObj.href.substr(urlObj.origin.length + PREFIX.length).replace(/^https?:\/+/, 'https://')
    if (path.search(exp1) === 0 || path.search(exp5) === 0 || path.search(exp6) === 0 || path.search(exp3) === 0 || path.search(exp4) === 0) {
        return httpHandler(req, path)
    } else if (path.search(exp2) === 0) {
        if (Config.jsdelivr) {
            const newUrl = path.replace('/blob/', '@').replace(/^(?:https?:\/\/)?github\.com/, 'https://cdn.jsdelivr.net/gh')
            return Response.redirect(newUrl, 302)
        } else {
            path = path.replace('/blob/', '/raw/')
            return httpHandler(req, path)
        }
    } else if (path.search(exp4) === 0) {
        const newUrl = path.replace(/(?

部署站点

点击保存并部署并发送即可
图片[5]|5分钟搭建专属的 GitHub 加速站

部署成功

打开刚刚设置的网址即可看到你的 GitHub 加速站
图片[6]|5分钟搭建专属的 GitHub 加速站

© 版权声明
THE END
点个赞再走吧
点赞7赞赏
评论 共1条

请登录后发表评论

    请登录后查看评论内容