树洞剪藏#剪藏#树洞剪藏

【最新】CloudFlare Workers 教程,搭建特定网站的网页代理 - 资源荟萃 - LINUX DO

2024 年 11 月 15 日1 分钟
分享Twitter / XTelegram微博
【最新】CloudFlare Workers 教程,搭建特定网站的网页代理 - 资源荟萃 - LINUX DO 封面

同步来源:树洞剪藏 源站剪藏 ID:83 原文地址:https://linux.do/t/topic/10643

打开原文 · 打开源站剪藏快照


【最新】CloudFlare Workers 教程,搭建特定网站的网页代理 - 资源荟萃 - LINUX DO

{ event.respondWith(fetchAndApply(event.req..."> { event.respondWith(fetchAndApply(event.req...">

跳到主要内容

话题

我的帖子

关于

友链

文档

更多

外部链接

Status

Connect

Channel

Telegram

Shared Chat

类别

开发调优

资源荟萃

文档共建

跳蚤市场

前沿快讯

福利羊毛

搞七捻三

运营反馈

深海幽域

所有类别

标签

抽奖

公告

精华神帖

快问快答

人工智能

所有标签

消息

收件箱

频道

常规频道

直接消息

聊天

真诚 、 友善 、 团结 、 专业 ,共建你我引以为荣之社区。 《常见问题解答》

【最新】CloudFlare Workers 教程,搭建特定网站的网页代理

资源荟萃

2月 3 日

1 / 25

2月 3 日

返回

9月 16 日

前排围观支持一下 感谢分享大佬厉害啊 有点厉害支持~~

Debian 龙行龘龘

2月 3 日 #1

之前看到了一个帖子:

【Cloudflare 教程系列】利用 Worker 反代 github 软件开发

实现的步骤就是步骤的实现: 第一步,绑定你的域名到 cloudflare。 略 第二步,创建一个 worker,并写入如下代码: export default { async fetch (request, env) { const _url = new URL (request.url); const hostname = _url.hostname _url.hos…

发现这代码功能不全,没有我的全(喜

那么今天分享一下我的 workers 代码:

// 反代目标网站. const upstream = 'github.com' ;

// 反代目标网站的移动版. const upstream_mobile = 'github.com' ;

// 访问区域黑名单(按需设置). const blocked_region = [ '' ];

// IP地址黑名单(按需设置). const blocked_ip_address = [ '0.0.0.0' , '127.0.0.1' ];

// 路径替换. const replace_dict = { '$upstream' : '$custom_domain' , // 将"$upstream"替换为"$custom_domain" '//github.com' : '' // 移除路径中的"//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' ); // 获取访问者的IP地址 const user_agent = request. headers . get ( 'user-agent' ); // 获取访问者的User-Agent头部信息

let response = null ; let url = new URL (request. url ); let url_host = url. host ;

if (url. protocol == 'http:' ) { // 如果请求协议是HTTP,则重定向到HTTPS url. protocol = 'https:' ; response = Response . redirect (url. href ); return response; }

if ( await device_status (user_agent)) { // 判断是否为移动设备 var upstream_domain = upstream; } else { var 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)){ // 检查IP地址是否在黑名单中 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); // 设置请求头的Host字段为反代目标网站的域名 new_request_headers. set ( 'Referer' , url. href ); // 设置请求头的Referer字段为当前请求的URL

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 && 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 ();

for ( let i in replace_dict) { let 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; }

功能比前面那个帖子强一点,但是要注意以下几点:

代码不是我写的,出了问题甭来找我

原作者无法考证,我记得原作者已被删库

有些网站会不正常,这是因为网站加了反爬虫之类的措施

代码是可以设置的,也可以代理其他网站(谷歌就算了,cloudflare workers 被白嫖了之后那些用户不停拿来访问谷歌,于是谷歌干脆封了 cf 的 ip)

具体怎么设置请看注释

如何注册 cf、添加 workers 应该不用教了吧

heart

laughing

37

回复

【Cloudflare教程系列】利用Worker反代github 22 【好玩的 Docker 项目】搭建一个高颜值的网站和服务在线状态跟踪工具——“uptime-kuma” 11

3.9k

浏览量

46

3

链接

18

用户

4

4

2

tingtao xiaobai 浴火重生

2月 3 日 #2

牛,学习了,哈哈

回复

山姆的奥特曼 Sam.sAltman 种子用户

2月 3 日 #3

榨干大善人

laughing

1

回复

陈窜稀 linyongcheng 浴火重生

2月 4 日 #4

使用这个代理 GitHub 的时候需要注意了,如果使用自己域名的话,可能会被识别为钓鱼网站,然后封域名的。别问我怎么知道的。 2 个回复

heart

clown_face

3

回复

meik wo 种子用户

2月 4 日 #5

如何反代 open ai gpt

回复

1 个月后

Sam Altman sama 龙行龘龘

3月 7 日 #6

如何反代类似于 chatgpt、poe 之类的呢?

回复

Tom TomTom

3月 7 日 #7

感谢分享!

但是好像存在一个问题,如下所示,均无法显示 GitHub 的 releases 资源,一直在转圈。

image 1136×716 42.6 KB

1 个回复

回复

ddone MJJcee

3月 8 日 #8

反代访问谷歌、YouTube 网站用的吗?

回复

冷蛋蛋 gdl

3月 8 日 #9

mark

回复

1 个月后

陈窜稀 linyongcheng 浴火重生

陈窜稀 4月 11 日 #11

轻撸。大善人的 workers 实现的。

回复

Megasoft zhong_little 大预言家

Tom 4月 11 日 #12

release 文件一般都不小,转存看网速,静态资源好弄一点

1 回复

Tom TomTom

2 陈窜稀 4月 11 日 #13

确实可以! 1 个回复

+1

1

回复

狼心独怆 linwolfer 浴火重生 Tom 4月 11 日 #14

这个实用,谢谢分享

1 回复

上次访问

CMIM devinglaw 种子用户

4月 14 日 #17

能不能实现反代 google 全部网站

回复

CMIM devinglaw 种子用户

4月 14 日 #18

Your browser did something unexpected. Please try again. If the error continues, try disabling all browser extensions.

登陆不了,显示以上错误 1 个回复

回复

CMIM devinglaw 种子用户 CMIM 4月 14 日 #19

image 783×456 10.5 KB

回复

妖怪别跑 loyar 浴火重生

陈窜稀 4月 15 日 #20

这么狠吗,域名封了之后没法解除? 1 个回复

回复

jayzqj

4月 15 日 #21

mark

回复

陈窜稀 linyongcheng 浴火重生

妖怪别跑 4月 15 日 #22

域名封了之后可以找域名提供商申诉的,我的 fun 域名,很容易申诉成功的。 1 个回复

回复

CMIM devinglaw 种子用户 陈窜稀 4月 21 日 #23

What‽

Your browser did something unexpected. Please try again. If the error continues, try disabling all browser extensions.

Please contact us if the problem persists.

完全无法用

回复

开始阅读 启用自动点赞

楼主

等级

相关文章