文章摘要
GPT 4
此内容根据文章生成,并经过人工审核,仅用于文章内容的解释与总结
投诉

前言

感谢代码提供方:

有时候,一些问题让我们困扰:有人刷网站流量,相加IP黑名单不知道怎么加?很讨厌日本排核污水,想要禁止国外访问?……

那么,Cloudflare Workers可以轻松解决这个问题!

实践

  1. 准备你的Cloudflare账号
  2. 来到主页 -> Workers 和 Pages,点击创建

  1. 选择创建Workers
  2. 输入名字,其他不用管,点击部署

  1. 进入控制台,选择编辑代码(右上角):

  1. 将里面的代码全部删除,粘贴下列代码并做好修改:
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
// 反代目标网站(修改)
const upstream = 'google.com'

// 反代目标网站的移动版(没有可不填)
const upstream_mobile = 'google.com'

// 访问区域黑名单(按需设置,使用国家简称,如CN,JP,US等)
const blocked_region = ['TK']

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

// 路径替换(你的网站)
const replace_dict = {
'$upstream': '$custom_domain',
'//archiveofourown.org': ''
}

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_host = url.host;

if (url.protocol == 'http:') {
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)){
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);
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;
}


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;
}
  1. 点击右上角部署,等待几分钟即可出现反代网站:

1
https://你填的名字.账户名(邮箱@前的东西).workers.dev

当你使用限制的IP或国家访问时,会弹出403报错:Access denied: WorkersProxy is not available in your region yet.Access denied: Your IP address is blocked by WorkersProxy.

因为workers.dev在中国已被污染无法访问,请自定义域名进行访问:

设置 -> 触发器 -> 添加自定义域

总结

CloudFlare Workers相当于免费给我们多了IP保护,并且每日有10w的请求量,足够一日使用,还自带DDos防护,一举两得。

版权所有©MC-Sep 2024.