Cloudflare反代加速Onedrive

序言

我们在使用Onedrive时下载速度总是差强人意,这是我们只需要获取Onedrive的直链就可以了。

开始操作

登录后台

clouflare后台

创建workers服务

如图所示,点击创建服务,右侧显示每天的额度,如果只是搭建个人服务这些额度绰绰有余了。下方会显示所有已经搭建的服务。
创建服务

进入创建服务页面后,我们要稍微配置一下这个服务名称,将他改为自己心仪的名称,因为以后我们要用他访问镜像站(2022年后workers.dev就被墙了)
创建函数

这样我们的服务就搭建好了。但是我们还需要修改代码。转到控制界面,可以找到右下角有一个快速编辑的按钮。
控制界面

左边修改代码,下方部署,右侧可以选择预览窗口,以及打开链接。

一般我们就打开这个页面,把下方的代码复制进去,点击保存部署,然后输入链接就可以直接访问Tiktok镜像站了。
部署代码

代码内容

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
139
140
141
142
143
144
145
146
147
148
149
// 替换成你OneDrive的网址
const upstream = '-my.sharepoint.com'
const upstream_mobile = '-my.sharepoint.com'

// 下面的配置都不用动
const upstream_path = '/'

const blocked_region = ['KP', 'SY', 'PK', 'CU']

const blocked_ip_address = ['0.0.0.0', '127.0.0.1']

const https = true

const disable_cache = false

const replace_dict = {
'$upstream': '$custom_domain',
'//sunpma.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', upstream_domain);
new_request_headers.set('Referer', url.protocol + '//' + url_hostname);

let original_response = await fetch(url.href, {
method: method,
headers: new_request_headers
})

connection_upgrade = new_request_headers.get("Upgrade");
if (connection_upgrade && connection_upgrade.toLowerCase() == "websocket") {
return original_response;
}

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;

if (disable_cache) {
new_response_headers.set('Cache-Control', 'no-store');
}

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');

if (new_response_headers.get("x-pjax-url")) {
new_response_headers.set("x-pjax-url", response_headers.get("x-pjax-url").replace("//" + upstream_domain, "//" + url_hostname));
}

const content_type = new_response_headers.get('content-type');
if (content_type != null && 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;
}

自定义域名

托管域名到Cloudflare

就是把自己的域名转移到CloudFlare这个很简单,到Cloudflare 主页点击添加站点即可托管。

新增DNS解析

进入自己的域名后转到DNS界面,添加一条‘AAAA“DNS解析,IPv6为100::,最重要的是打开小黄云(即打开Cloudflare代理)
DNS解析

关联域名

进入你的域名,不是你的首页!进入Workers,添加路由

本文作者:Eric Zige
本文地址: https://www.zigecn.eu.org/undefined.html
版权声明:本博客所有文章除特别声明外,均采用CC BY-NC-SA 4.0许可协议。转载请注明出处!

扫一扫,分享到微信

微信分享二维码
  • Copyrights © 2019-2022 子哥
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信