【教程】几行代码轻松利用 Cloudflare Worker 搭建镜像网站!

【教程】几行代码轻松利用 Cloudflare Worker 搭建镜像网站!

CloudFlare

前言

之前教大家使用

CF-Worker-Dir

Cloudflare Worker

上免费搭建导航网站,也简单的介绍了一下

CloudFlare Worker

CloudFlare

提供的无服务器应用程序,有免费版,可以用来测试 JS 脚本。今天再教大家一种新的关于

CloudFlare Worker

的玩法 – 利用

Cloudflare Worker

搭建镜像网站!

CloudFlare Worker

每天免费

10万次

请求也足以应对个人使用或者是小范围分享了

搭建教程

1. 点击 创建
Worker

【教程】几行代码轻松利用 Cloudflare Worker 搭建镜像网站!

点击 创建 Worker

2. 将原有的示例代码全部删除

3. 将下方代码全部粘贴到代码框里,如下图所示:

  1. // 反代目标网站.
  2. const upstream = \'google.com\'
  3. // 反代目标网站的移动版.
  4. const upstream_mobile = \'google.com\'
  5. // 访问区域黑名单(按需设置).
  6. const blocked_region = [\'TK\']
  7. // IP地址黑名单(按需设置).
  8. const blocked_ip_address = [\'0.0.0.0\', \'127.0.0.1\']
  9. // 路径替换.
  10. const replace_dict = {
  11. \'$upstream\': \'$custom_domain\',
  12. \'//archiveofourown.org\': \'\'
  13. }
  14. addEventListener(\'fetch\', event => {
  15. event.respondWith(fetchAndApply(event.request));
  16. })
  17. async function fetchAndApply(request) {
  18. const region = request.headers.get(\'cf-ipcountry\').toUpperCase();
  19. const ip_address = request.headers.get(\'cf-connecting-ip\');
  20. const user_agent = request.headers.get(\'user-agent\');
  21. let response = null;
  22. let url = new URL(request.url);
  23. let url_host = url.host;
  24. if (url.protocol == \'http:\') {
  25. url.protocol = \'https:\'
  26. response = Response.redirect(url.href);
  27. return response;
  28. }
  29. if (await device_status(user_agent)) {
  30. var upstream_domain = upstream;
  31. } else {
  32. var upstream_domain = upstream_mobile;
  33. }
  34. url.host = upstream_domain;
  35. if (blocked_region.includes(region)) {
  36. response = new Response(\'Access denied: WorkersProxy is not available in your region yet.\', {
  37. status: 403
  38. });
  39. } else if(blocked_ip_address.includes(ip_address)){
  40. response = new Response(\'Access denied: Your IP address is blocked by WorkersProxy.\', {
  41. status: 403
  42. });
  43. } else{
  44. let method = request.method;
  45. let request_headers = request.headers;
  46. let new_request_headers = new Headers(request_headers);
  47. new_request_headers.set(\'Host\', upstream_domain);
  48. new_request_headers.set(\'Referer\', url.href);
  49. let original_response = await fetch(url.href, {
  50. method: method,
  51. headers: new_request_headers
  52. })
  53. let original_response_clone = original_response.clone();
  54. let original_text = null;
  55. let response_headers = original_response.headers;
  56. let new_response_headers = new Headers(response_headers);
  57. let status = original_response.status;
  58. new_response_headers.set(\'cache-control\' ,\'public, max-age=14400\')
  59. new_response_headers.set(\'access-control-allow-origin\', \'*\');
  60. new_response_headers.set(\'access-control-allow-credentials\', true);
  61. new_response_headers.delete(\'content-security-policy\');
  62. new_response_headers.delete(\'content-security-policy-report-only\');
  63. new_response_headers.delete(\'clear-site-data\');
  64. const content_type = new_response_headers.get(\'content-type\');
  65. if (content_type.includes(\'text/html\') && content_type.includes(\'UTF-8\')) {
  66. original_text = await replace_response_text(original_response_clone, upstream_domain, url_host);
  67. } else {
  68. original_text = original_response_clone.body
  69. }
  70. response = new Response(original_text, {
  71. status,
  72. headers: new_response_headers
  73. })
  74. }
  75. return response;
  76. }
  77. async function replace_response_text(response, upstream_domain, host_name) {
  78. let text = await response.text()
  79. var i, j;
  80. for (i in replace_dict) {
  81. j = replace_dict[i]
  82. if (i == \'$upstream\') {
  83. i = upstream_domain
  84. } else if (i == \'$custom_domain\') {
  85. i = host_name
  86. }
  87. if (j == \'$upstream\') {
  88. j = upstream_domain
  89. } else if (j == \'$custom_domain\') {
  90. j = host_name
  91. }
  92. let re = new RegExp(i, \'g\')
  93. text = text.replace(re, j);
  94. }
  95. return text;
  96. }
  97. async function device_status (user_agent_info) {
  98. var agents = ["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"];
  99. var flag = true;
  100. for (var v = 0; v < agents.length; v ) {
  101. if (user_agent_info.indexOf(agents[v]) > 0) {
  102. flag = false;
  103. break;
  104. }
  105. }
  106. return flag;
  107. }

 

const upstream

= \'反代目标网站\'

const upstream_mobile

= \'反代目标网站的移动版\'

const blocked_region

= [\'访问区域黑名单(按需设置)\']

const blocked_ip_address

= [\'IP地址黑名单(按需设置)\', \'127.0.0.1\']

【教程】几行代码轻松利用 Cloudflare Worker 搭建镜像网站!

将下方代码全部粘贴到代码框里

4. 粘贴好后按需修改下方参数,修改好之后,点击
保存并部署

const upstream

= \'反代目标网站\'

const upstream_mobile

= \'反代目标网站的移动版\'

const blocked_region

= [\'访问区域黑名单(按需设置)\']

const blocked_ip_address

= [\'IP地址黑名单(按需设置)\', \'127.0.0.1\']
const replace_dict = 路径替换
【教程】几行代码轻松利用 Cloudflare Worker 搭建镜像网站!

保存并部署

5. 部署完成,访问自带域名即可查看反代效果

【教程】几行代码轻松利用 Cloudflare Worker 搭建镜像网站!

访问自带域名即可查看反代效果

绑定自己的域名请移步至【教程】

Cloudflare Worker

上免费搭建了导航网站 域名太长不好看?绑定自己的域名到

Cloudflare Worker

!,它将会详细地教你将绑定自己的域名到

Cloudflare Worker

上!

给TA打赏
共{{data.count}}人
人已打赏
大杂烩

【整理】Linux Shell 命令速查表 三十条实用Shell 命令

2020-12-10 0:48:20

大杂烩

【教程】使用 CF-Worker-Dir 在 Cloudflare Worker 上免费搭建导航网站

2020-12-10 0:54:23




重要声明

本站资源来自会员发布以及互联网收集,不代表本站立场,如有侵犯你的权益请联系管理员-车车站内发信联系 我们会第一时间进行审核删除。站内资源为网友个人学习或测试研究使用,未经原版权作者许可,禁止用于任何商业途径!请用户仔细辨认内容的真实性,避免上当受骗!本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。请在下载24小时内删除!


如果遇到付费才可观看的文章,建议升级终身VIP。全站所有资源任意下免费看”。本站资源少部分采用7z压缩,为防止有人压缩软件不支持7z格式,7z解压,建议下载7-zip,zip、rar解压,建议下载WinRAR

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索