记录我的一些生活写照、无聊的牢骚、内心世界的活动 注册 | 登陆

白嫖cloudflare搭建属于自己的git加速站

白嫖cloudflare搭建属于自己的git加速站
不想自己动手的话,文末也有搭建好的,可以直接去白嫖!
基于开源项目gh-proxy地址:https://github.com/hunshcn/gh-proxy
cloudflare地址:https://dash.cloudflare.com
首先访问cloudflare注册一个你自己的账户
然后点击workers

白嫖cloudflare搭建属于自己的git加速站-2022年8月1日更新

 
之后弹出来这个界面,你需要在输入框中输入你自己的workers的名字
请注意!一定要方便记忆,不要乱输,这个会出现在你的网址中!!!
白嫖cloudflare搭建属于自己的git加速站-2022年8月1日更新
输入好后点set up
然后选择订阅模式,白嫖怪直接free!
免费版本每天的访问次数是10w次,应该是远远够用的!
 
白嫖cloudflare搭建属于自己的git加速站-2022年8月1日更新
然后要验证邮箱!
白嫖cloudflare搭建属于自己的git加速站-2022年8月1日更新
去你邮箱完成验证
白嫖cloudflare搭建属于自己的git加速站-2022年8月1日更新
验证完成后刷新,点击创建
白嫖cloudflare搭建属于自己的git加速站-2022年8月1日更新
然后按下图填写,之后点创建
白嫖cloudflare搭建属于自己的git加速站-2022年8月1日更新
然后点击快速编辑
白嫖cloudflare搭建属于自己的git加速站-2022年8月1日更新
将下面的代码复制 --->点击查看源码<--
XML/HTML代码
  1. 'use strict'  
  2.   
  3. /**  
  4.  * static files (404.html, sw.js, conf.js)  
  5.  */  
  6. const ASSET_URL = 'https://hunshcn.github.io/gh-proxy/'  
  7. // 前缀,如果自定义路由为example.com/gh/*,将PREFIX改为 '/gh/',注意,少一个杠都会错!  
  8. const PREFIX = '/'  
  9. // 分支文件使用jsDelivr镜像的开关,0为关闭,默认关闭  
  10. const Config = {  
  11.     jsdelivr: 0  
  12. }  
  13.   
  14. const whiteList = [] // 白名单,路径里面有包含字符的才会通过,e.g. ['/username/']  
  15.   
  16. /** @type {ResponseInit} */  
  17. const PREFLIGHT_INIT = {  
  18.     status: 204,  
  19.     headers: new Headers({  
  20.         'access-control-allow-origin': '*',  
  21.         'access-control-allow-methods': 'GET,POST,PUT,PATCH,TRACE,DELETE,HEAD,OPTIONS',  
  22.         'access-control-max-age': '1728000',  
  23.     }),  
  24. }  
  25.   
  26.   
  27. const exp1 = /^(?:https?:\/\/)?github\.com\/.+?\/.+?\/(?:releases|archive)\/.*$/i  
  28. const exp2 = /^(?:https?:\/\/)?github\.com\/.+?\/.+?\/(?:blob|raw)\/.*$/i  
  29. const exp3 = /^(?:https?:\/\/)?github\.com\/.+?\/.+?\/(?:info|git-).*$/i  
  30. const exp4 = /^(?:https?:\/\/)?raw\.(?:githubusercontent|github)\.com\/.+?\/.+?\/.+?\/.+$/i  
  31. const exp5 = /^(?:https?:\/\/)?gist\.(?:githubusercontent|github)\.com\/.+?\/.+?\/.+$/i  
  32. const exp6 = /^(?:https?:\/\/)?github\.com\/.+?\/.+?\/tags.*$/i  
  33.   
  34. /**  
  35.  * @param {any} body  
  36.  * @param {number} status  
  37.  * @param {Object<string, string>} headers  
  38.  */  
  39. function makeRes(body, status = 200headers = {}) {  
  40.     headers['access-control-allow-origin'] = '*'  
  41.     return new Response(body, {status, headers})  
  42. }  
  43.   
  44.   
  45. /**  
  46.  * @param {string} urlStr  
  47.  */  
  48. function newUrl(urlStr) {  
  49.     try {  
  50.         return new URL(urlStr)  
  51.     } catch (err) {  
  52.         return null  
  53.     }  
  54. }  
  55.   
  56.   
  57. addEventListener('fetch', e => {  
  58.     const ret = fetchHandler(e)  
  59.         .catch(err => makeRes('cfworker error:\n' + err.stack, 502))  
  60.     e.respondWith(ret)  
  61. })  
  62.   
  63.   
  64. function checkUrl(u) {  
  65.     for (let i of [exp1, exp2, exp3, exp4, exp5, exp6]) {  
  66.         if (u.search(i) === 0) {  
  67.             return true  
  68.         }  
  69.     }  
  70.     return false  
  71. }  
  72.   
  73. /**  
  74.  * @param {FetchEvent} e  
  75.  */  
  76. async function fetchHandler(e) {  
  77.     const req = e.request  
  78.     const urlStr = req.url  
  79.     const urlObj = new URL(urlStr)  
  80.     let path = urlObj.searchParams.get('q')  
  81.     if (path) {  
  82.         return Response.redirect('https://' + urlObj.host + PREFIX + path, 301)  
  83.     }  
  84.     // cfworker 会把路径中的 `//` 合并成 `/`  
  85.     path = urlObj.href.substr(urlObj.origin.length + PREFIX.length).replace(/^https?:\/+/, 'https://')  
  86.     if (path.search(exp1) === 0 || path.search(exp5) === 0 || path.search(exp6) === 0 || path.search(exp3) === 0 || path.search(exp4) === 0) {  
  87.         return httpHandler(req, path)  
  88.     } else if (path.search(exp2) === 0) {  
  89.         if (Config.jsdelivr) {  
  90.             const newUrl = path.replace('/blob/', '@').replace(/^(?:https?:\/\/)?github\.com/, 'https://cdn.jsdelivr.net/gh')  
  91.             return Response.redirect(newUrl, 302)  
  92.         } else {  
  93.             pathpath = path.replace('/blob/', '/raw/')  
  94.             return httpHandler(req, path)  
  95.         }  
  96.     } else if (path.search(exp4) === 0) {  
  97.         const newUrl = path.replace(/(?<=com\/.+?\/.+?)\/(.+?\/)/, '@$1').replace(/^(?:https?:\/\/)?raw\.(?:githubusercontent|github)\.com/, 'https://cdn.jsdelivr.net/gh')  
  98.         return Response.redirect(newUrl, 302)  
  99.     } else {  
  100.         return fetch(ASSET_URL + path)  
  101.     }  
  102. }  
  103.   
  104.   
  105. /**  
  106.  * @param {Request} req  
  107.  * @param {string} pathname  
  108.  */  
  109. function httpHandler(req, pathname) {  
  110.     const reqreqHdrRaw = req.headers  
  111.   
  112.     // preflight  
  113.     if (req.method === 'OPTIONS' &&  
  114.         reqHdrRaw.has('access-control-request-headers')  
  115.     ) {  
  116.         return new Response(null, PREFLIGHT_INIT)  
  117.     }  
  118.   
  119.     const reqHdrNew = new Headers(reqHdrRaw)  
  120.   
  121.     let urlStr = pathname  
  122.     let flag = !Boolean(whiteList.length)  
  123.     for (let i of whiteList) {  
  124.         if (urlStr.includes(i)) {  
  125.             flag = true  
  126.             break  
  127.         }  
  128.     }  
  129.     if (!flag) {  
  130.         return new Response("blocked", {status: 403})  
  131.     }  
  132.     if (urlStr.search(/^https?:\/\//) !== 0) {  
  133.         urlStr = 'https://' + urlStr  
  134.     }  
  135.     const urlObj = newUrl(urlStr)  
  136.   
  137.     /** @type {RequestInit} */  
  138.     const reqInit = {  
  139.         method: req.method,  
  140.         headers: reqHdrNew,  
  141.         redirect: 'manual',  
  142.         body: req.body  
  143.     }  
  144.     return proxy(urlObj, reqInit)  
  145. }  
  146.   
  147.   
  148. /**  
  149.  *  
  150.  * @param {URL} urlObj  
  151.  * @param {RequestInit} reqInit  
  152.  */  
  153. async function proxy(urlObj, reqInit) {  
  154.     const res = await fetch(urlObj.href, reqInit)  
  155.     const resresHdrOld = res.headers  
  156.     const resHdrNew = new Headers(resHdrOld)  
  157.   
  158.     const status = res.status  
  159.   
  160.     if (resHdrNew.has('location')) {  
  161.         let _location = resHdrNew.get('location')  
  162.         if (checkUrl(_location))  
  163.             resHdrNew.set('location', PREFIX + _location)  
  164.         else {  
  165.             reqInit.redirect = 'follow'  
  166.             return proxy(newUrl(_location), reqInit)  
  167.         }  
  168.     }  
  169.     resHdrNew.set('access-control-expose-headers', '*')  
  170.     resHdrNew.set('access-control-allow-origin', '*')  
  171.   
  172.     resHdrNew.delete('content-security-policy')  
  173.     resHdrNew.delete('content-security-policy-report-only')  
  174.     resHdrNew.delete('clear-site-data')  
  175.   
  176.     return new Response(res.body, {  
  177.         status,  
  178.         headers: resHdrNew,  
  179.     })  
  180. }  
替换掉原来所有代码,先点下面的保存,等待保存成功后,再点发送
白嫖cloudflare搭建属于自己的git加速站-2022年8月1日更新
显示如下就成功了
白嫖cloudflare搭建属于自己的git加速站-2022年8月1日更新
到此教程结束。
代理收集
烟雨阁(烟雨大佬的代理): https://github.yanyuge.workers.dev/ 
代理1:https://git.snakexgc.workers.dev/ 
代理2:https://github.diaobaol.workers.dev/ 
参考:https://www.kejiwanjia.net/jiaocheng/70055.html

« 上一篇 | 下一篇 »

发表评论

评论内容 (必填):