今天依旧更新一下关于我们赛博大善人的教程。
首先,Workers是Cloud flare免费提供的一项无服务器部署JavaScript代码到CF的边缘网络上的技术,免费版每天限制100k个请求(10万个),应该是够用了。
准备步骤:一枚CF和Github账号,一个能绑定在CF的域名,一个聪明的大脑,还有你勤劳的小手 一.使用CF Pages搭建Vless节点 第一种方法(较推荐): 1.使用注册时所用的邮箱和密码登录进面板之后点击左侧侧边栏里的
1.登录进CF仪表盘后,右上角Language更改语言为简体中文后点击右侧的“Workers and Pages”,点击创建
2选Pages,上传资产
3.命名一下,创建项目,把这个包传上去,上传完成后点击部署站点,https://tutt.lanzouh.com/iNuzw227k25e 无密码
4.点击自定义域,设置一下域名,点击设置,环境变量,在制作那里添加变量
5.变量名称为UUID(大写),值的话可以在这个网站里生成:https://1024tools.com/uuid 默认生成了5个随便找一个复制就好,填进去,保存
6.点击部署,创建新部署,再把那个文件重新传一次就好
7.点击你刚才给Worker绑定的域名,加上/你设置的UUID即可,复制节点配置,添加到V2rayNG里,右键编辑服务器, 地址可以替换,我这里贴两个:www.gov.se,www.visa.com.sg,198.41.221.170,端口为443即可
二.使用Cloudflare和Telegraph搭建图床 1.Fork Telegraph-Image 仓库 访问 Telegraph-Image 仓库地址(https://github.com/cf-pages/Telegraph-Image),fork 到个人仓库:
2.同样点击右侧的“Workers and Pages”,点击创建,选Pages,连接到Git,绑定账号后选择相应仓库开始安装
3.安装完成后同样点击自定义域,设置一下域名,绑定好以后就可以用这个地址访问了,可以测试一下图片上传
4.配置高级点的功能 4-1.开启图片管理后台 Telegraph-Image 的图片管理功能默认是关闭的,我们需要绑定 KV 命名空间才能使用。
首先,依次点击 Workers 和 Pages , KV , 创建命名空间,添加一个名为image-hosting的命名空间
然后,依次点击 Workers 和 Pages,你刚才创建的那个Pages,设置,函数,绑定刚刚创建的命名空间image-hosting 变量名称设置为img_url,KV 命名空间设置为image-hosting,回到部署页面重试部署即可
4-2.后台登录验证: 要开启它,需要新增BASIC_USER(管理员登录名称)和BASIC_PASS(登录密码)环境变量,在你自定义的域名后面加上/admin即可访问。
三.使用Workers搭建Google镜像站 1.点击Workers和Pagers,创建,选Worker,创建一个Worker,命名一下,点击部署
2.部署完成后点击编辑代码,删掉原来的代码,粘贴下面的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 const upstream = 'ipv6.google.com.hk' const upstream_v4 = 'www.google.com.hk' const blocked_region = ['TK' ] const replace_dict = { $upstream : '$custom_domain' , 'www.google.com/' : 'tu.tuji.cloudns.be/' , 'gstatic.com' : 'gstatic.cn' , 'ajax.googleapis.com' : 'ajax.lug.ustc.edu.cn' , 'fonts.googleapis.com' : 'fonts.googleapis.cn' , 'themes.googleusercontent.com' : 'google-themes.lug.ustc.edu.cn' , 'www.gravatar.com/avatar' : 'dn-qiniu-avatar.qbox.me/avatar' , 'www.google.co.jp' : '$custom_domain' , 'www.google.com.sg' : '$custom_domain' , 'books.google.com.hk' : '$custom_domain' , 'books.google.co.jp' : '$custom_domain' , 'books.google.com.sg' : '$custom_domain' , 'maps.google.com.hk' : '$custom_domain' , 'maps.google.co.jp' : '$custom_domain' , 'maps.google.com.sg' : '$custom_domain' , 'maps.google.com' : '$custom_domain' , 'books.google.com' : '$custom_domain' , }addEventListener ('fetch' , (event) => { event.respondWith (fetchAndApply (event.request)) }) async function fetchAndApply (request) { const region = request.headers .get ('cf-ipcountry' ).toUpperCase () 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 } var key = url.href var ikey1 = 'tbm=isch' var ikey2 = '/img' if ((key.search (ikey1) == -1 ) && (key.search (ikey2) == -1 )) { var upstream_domain = upstream } else { var upstream_domain = upstream_v4 } 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 { 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 ('cache-control' , 'public, max-age=14400' ) 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 }
注意:记得把 ‘www.google.com/ ‘: ‘tu.tuji.cloudns.be/‘, 此处的tu.tuji.cloudns.be替换为你的子域名(你之后要自定义的那个域名,不是CF默认的)
3.回到设置,触发器,绑定自定义域名,,等待DNS解析生效后即可访问
四.使用Workers镜像Github 1.点击Workers和Pagers,创建,选Worker,创建一个Worker,命名一下,点击部署
2.部署完成后点击编辑代码,删掉原来的代码,粘贴下面的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 const upstream = 'github.com' const upstream_path = '/' const upstream_mobile = 'github.com' const blocked_region = ['KP' , 'SY' , 'PK' , 'CU' ]const blocked_ip_address = ['0.0.0.0' , '127.0.0.1' ]const https = true const replace_dict = {'$upstream' : '$custom_domain' , '//github.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_hostname = url.hostname if (https == true ) { url.protocol = 'https:' } else { url.protocol = 'http:' } if (await device_status(user_agent)) { var upstream_domain = upstream } else { var upstream_domain = upstream_mobile } url.host = upstream_domain if (url.pathname == '/' ) { url.pathname = upstream_path } else { url.pathname = upstream_path + url.pathname } 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' , url.hostname) new_request_headers.set ('Referer' , url.hostname) 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_hostname) } 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 }
3.回到设置,触发器,绑定自定义域名,,等待DNS解析生效后即可访问 注意!如果是使用CloudNS提供的免费域名,不要用来绑定类似于Github这种有关人家版权的网站,会被封号,整不好你绑在Github镜像站上的域名会被举报认定为是在钓鱼!别问我咋知道的,问就是我自个已经踩过坑了,给你们避个雷
待更新》》》