diff --git a/2024/11/29/CloudFlareReverseProxy/index.html b/2024/11/29/CloudFlareReverseProxy/index.html index 3307099..b6e0708 100644 --- a/2024/11/29/CloudFlareReverseProxy/index.html +++ b/2024/11/29/CloudFlareReverseProxy/index.html @@ -7,9 +7,9 @@ - + - + -

使用CloudFlare搭建反向代理

使用CloudFlare搭建反向代理

+

使用CloudFlare搭建反向代理

使用CloudFlare搭建反向代理

CloudFlare,互联网大善人!

FREE套餐CloudFlare每日提供 10w 请求的免费额度,个人用完全足够,但并不能保证很多人同时使用,强烈建议仅自用

@@ -258,9 +258,12 @@

拓展IP白名单

将下面的IP白名单换成你自己的服务器IP即可,极大的保证了不被滥用以及稳定不被墙

1
2
3
4
5
6
7
//IP白名单
const allowedIPs = [
// IPv4 示例
'123.123.123.123',
// IPv6 示例
'2001:0db8:85a3:0000:0000:8a2e:0370:7334'
];
-

通用反代

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
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request));
});

const specialCases = {
"*": {
"Origin": "DELETE",
"Referer": "DELETE"
}
};
//IP白名单
const allowedIPs = [
// IPv4 示例
'123.123.123.123',
// IPv6 示例
'2001:0db8:85a3:0000:0000:8a2e:0370:7334'
];

function handleSpecialCases(request) {
const rules = specialCases["*"];
for (const [key, value] of Object.entries(rules)) {
switch (value) {
case "KEEP":
break;
case "DELETE":
request.headers.delete(key);
break;
default:
request.headers.set(key, value);
break;
}
}
}

async function handleRequest(request) {
const url = new URL(request.url);

// 获取用户 IP 地址(支持 IPv4 和 IPv6)
const userIP = request.headers.get('CF-Connecting-IP') || request.headers.get('X-Forwarded-For') || request.connection.remoteAddress;

// 检查 IP 是否在白名单内
if (!allowedIPs.includes(userIP)) {
return new Response(`
<html>
<head>
<style>
body {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
background-color: #f9f9f9;
}
h1 {
font-family: Arial, sans-serif;
color: #333;
text-align: center;
}
</style>
</head>
<body>
<h1>Caused by playing Genshin Impact</h1>
</body>
</html>
`, {
headers: { "Content-Type": "text/html" }
});
}

// 如果是访问根目录就返回一个HTML
if (url.pathname === "/") {
return new Response(`
<html>
<head>
<style>
body {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
background-color: #f9f9f9;
}
h1 {
font-family: Arial, sans-serif;
color: #333;
text-align: center;
}
</style>
</head>
<body>
<h1>Why don't you play Genshin Impact?</h1>
</body>
</html>
`, {
headers: { "Content-Type": "text/html" }
});
}

if (url.pathname.startsWith("/")) {
let targetUrl = url.pathname.slice(1);

// 自动补全协议
if (!/^https?:\/\//.test(targetUrl)) {
targetUrl = "https://" + targetUrl;
}

// 动态生成URL
const modifiedRequest = new Request(targetUrl, {
headers: request.headers,
method: request.method,
body: request.body,
redirect: 'follow'
});

handleSpecialCases(modifiedRequest);

// 发送请求
const response = await fetch(modifiedRequest);
const modifiedResponse = new Response(response.body, response);

// 允许跨域
modifiedResponse.headers.set('Access-Control-Allow-Origin', '*');

return modifiedResponse;
}

return new Response("Path not found", { status: 404 });
}

+

通用反代

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
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request));
});

const specialCases = {
"*": {
"Origin": "DELETE",
"Referer": "DELETE"
}
};
//IP白名单
const allowedIPs = [
// IPv4 示例
'123.123.123.123',
// IPv6 示例
'2001:0db8:85a3:0000:0000:8a2e:0370:7334'
];

function handleSpecialCases(request) {
const rules = specialCases["*"];
for (const [key, value] of Object.entries(rules)) {
switch (value) {
case "KEEP":
break;
case "DELETE":
request.headers.delete(key);
break;
default:
request.headers.set(key, value);
break;
}
}
}

async function handleRequest(request) {
const url = new URL(request.url);

// 获取用户 IP 地址(支持 IPv4 和 IPv6)
const userIP = request.headers.get('CF-Connecting-IP') || request.headers.get('X-Forwarded-For') || request.connection.remoteAddress;

// 检查 IP 是否在白名单内
if (!allowedIPs.includes(userIP)) {
return new Response(`
<html>
<head>
<style>
body {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
background-color: #f9f9f9;
}
h1 {
font-family: Arial, sans-serif;
color: #333;
text-align: center;
}
</style>
</head>
<body>
<h1>Caused by playing Genshin Impact</h1>
</body>
</html>
`, {
headers: { "Content-Type": "text/html" }
});
}

// 如果是访问根目录就返回一个HTML
if (url.pathname === "/") {
return new Response(`
<html>
<head>
<style>
body {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
background-color: #f9f9f9;
}
h1 {
font-family: Arial, sans-serif;
color: #333;
text-align: center;
}
</style>
</head>
<body>
<h1>Why don't you play Genshin Impact?</h1>
</body>
</html>
`, {
headers: { "Content-Type": "text/html" }
});
}

if (url.pathname.startsWith("/")) {
let targetUrl = url.pathname.slice(1);

// 自动补全协议
if (!/^https?:\/\//.test(targetUrl)) {
targetUrl = "https://" + targetUrl;
}

// 动态生成URL
const modifiedRequest = new Request(targetUrl, {
headers: request.headers,
method: request.method,
body: request.body,
redirect: 'follow'
});

handleSpecialCases(modifiedRequest);

// 发送请求
const response = await fetch(modifiedRequest);
const modifiedResponse = new Response(response.body, response);

// 允许跨域
modifiedResponse.headers.set('Access-Control-Allow-Origin', '*');

return modifiedResponse;
}

return new Response("Path not found", { status: 404 });
}
-

指定反代

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
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request));
});

// 域名映射表
const domainMappings = {
"/steam-store": "https://store.steampowered.com",
"/steam-api": "https://api.steampowered.com"
};

const specialCases = {
"*": {
"Origin": "DELETE",
"Referer": "DELETE"
}
};
//IP白名单
const allowedIPs = [
// IPv4 示例
'123.123.123.123',
// IPv6 示例
'2001:0db8:85a3:0000:0000:8a2e:0370:7334'
];

function handleSpecialCases(request) {
const rules = specialCases["*"];
for (const [key, value] of Object.entries(rules)) {
switch (value) {
case "KEEP":
break;
case "DELETE":
request.headers.delete(key);
break;
default:
request.headers.set(key, value);
break;
}
}
}

// 获取用户 IP 地址
function getUserIP(request) {
return request.headers.get('CF-Connecting-IP') || request.headers.get('X-Forwarded-For') || request.connection.remoteAddress;
}

async function handleRequest(request) {
const url = new URL(request.url);

const userIP = getUserIP(request);

// 检查 IP 是否在白名单内
if (!allowedIPs.includes(userIP)) {
return new Response(`
<html>
<head>
<style>
body {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
background-color: #f9f9f9;
}
h1 {
font-family: Arial, sans-serif;
color: #333;
text-align: center;
}
</style>
</head>
<body>
<h1>Caused by playing Genshin Impact</h1>
</body>
</html>
`, {
headers: { "Content-Type": "text/html" }
});
}

// 如果是访问根目录就返回一个HTML
if (url.pathname === "/") {
return new Response(`
<html>
<head>
<style>
body {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
background-color: #f9f9f9;
}
h1 {
font-family: Arial, sans-serif;
color: #333;
text-align: center;
}
</style>
</head>
<body>
<h1>Why don't you play Genshin Impact?</h1>
</body>
</html>
`, {
headers: { "Content-Type": "text/html" }
});
}

const basePath = Object.keys(domainMappings).find(path => url.pathname.startsWith(path));
if (!basePath) {
return new Response("Path not found in domain mappings", { status: 404 });
}

const targetBase = domainMappings[basePath];
const targetPath = url.pathname.slice(basePath.length) + url.search + url.hash;

const targetUrl = new URL(targetPath, targetBase);

const modifiedRequest = new Request(targetUrl, {
headers: request.headers,
method: request.method,
body: request.body,
redirect: 'follow'
});

handleSpecialCases(modifiedRequest);

// 发送请求
const response = await fetch(modifiedRequest);
const modifiedResponse = new Response(response.body, response);

modifiedResponse.headers.set('Access-Control-Allow-Origin', '*');

return modifiedResponse;
}
文章作者: MapleLeaf
文章链接: http://mapleleaf.icu/2024/11/29/CloudFlareReverseProxy/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 MapleLeaf
赞助
  • wechat
    wechat
  • alipay
    alipay

评论
赞助
  • wechat
    wechat
  • alipay
    alipay

评论
-

评论
公告
An epitaph is short, and so is life.
最新文章
标签
网站资讯
文章数目 :
3
已运行时间 :
本站总字数 :
3.3k
本站访客数 :
本站总访问量 :
最后更新时间 :
-
文章总览 - 2
2024
使用CloudFlare搭建反向代理
使用CloudFlare搭建反向代理
Hello World
Hello World
公告
An epitaph is short, and so is life.
最新文章
标签
网站资讯
文章数目 :
3
已运行时间 :
本站总字数 :
3.3k
本站访客数 :
本站总访问量 :
最后更新时间 :
\ No newline at end of file +
文章总览 - 2
2024
使用CloudFlare搭建反向代理
使用CloudFlare搭建反向代理
Hello World
Hello World
公告
An epitaph is short, and so is life.
最新文章
网站资讯
文章数目 :
3
已运行时间 :
本站总字数 :
3.3k
本站访客数 :
本站总访问量 :
最后更新时间 :
\ No newline at end of file diff --git a/archives/2024/12/index.html b/archives/2024/12/index.html index 1fdd019..1d76f10 100644 --- a/archives/2024/12/index.html +++ b/archives/2024/12/index.html @@ -54,7 +54,7 @@ isHome: false, isHighlightShrink: false, isToc: false, - postUpdate: '2024-12-06 20:55:58' + postUpdate: '2024-12-08 21:12:23' } -
文章总览 - 1
2024
npm,pnpm,yarn换源
npm,pnpm,yarn换源
公告
An epitaph is short, and so is life.
最新文章
标签
网站资讯
文章数目 :
3
已运行时间 :
本站总字数 :
3.3k
本站访客数 :
本站总访问量 :
最后更新时间 :
\ No newline at end of file +
文章总览 - 1
2024
npm,pnpm,yarn换源
npm,pnpm,yarn换源
公告
An epitaph is short, and so is life.
最新文章
网站资讯
文章数目 :
3
已运行时间 :
本站总字数 :
3.3k
本站访客数 :
本站总访问量 :
最后更新时间 :
\ No newline at end of file diff --git a/archives/2024/index.html b/archives/2024/index.html index c77b9d9..6214448 100644 --- a/archives/2024/index.html +++ b/archives/2024/index.html @@ -54,7 +54,7 @@ isHome: false, isHighlightShrink: false, isToc: false, - postUpdate: '2024-12-06 20:55:58' + postUpdate: '2024-12-08 21:12:23' } -
文章总览 - 3
2024
npm,pnpm,yarn换源
npm,pnpm,yarn换源
使用CloudFlare搭建反向代理
使用CloudFlare搭建反向代理
Hello World
Hello World
公告
An epitaph is short, and so is life.
最新文章
标签
网站资讯
文章数目 :
3
已运行时间 :
本站总字数 :
3.3k
本站访客数 :
本站总访问量 :
最后更新时间 :
\ No newline at end of file +
文章总览 - 3
2024
npm,pnpm,yarn换源
npm,pnpm,yarn换源
使用CloudFlare搭建反向代理
使用CloudFlare搭建反向代理
Hello World
Hello World
公告
An epitaph is short, and so is life.
最新文章
网站资讯
文章数目 :
3
已运行时间 :
本站总字数 :
3.3k
本站访客数 :
本站总访问量 :
最后更新时间 :
\ No newline at end of file diff --git a/archives/index.html b/archives/index.html index 67f89b7..41dc467 100644 --- a/archives/index.html +++ b/archives/index.html @@ -54,7 +54,7 @@ isHome: false, isHighlightShrink: false, isToc: false, - postUpdate: '2024-12-06 20:55:58' + postUpdate: '2024-12-08 21:12:23' } -
文章总览 - 3
2024
npm,pnpm,yarn换源
npm,pnpm,yarn换源
使用CloudFlare搭建反向代理
使用CloudFlare搭建反向代理
Hello World
Hello World
公告
An epitaph is short, and so is life.
最新文章
标签
网站资讯
文章数目 :
3
已运行时间 :
本站总字数 :
3.3k
本站访客数 :
本站总访问量 :
最后更新时间 :
\ No newline at end of file +
文章总览 - 3
2024
npm,pnpm,yarn换源
npm,pnpm,yarn换源
使用CloudFlare搭建反向代理
使用CloudFlare搭建反向代理
Hello World
Hello World
公告
An epitaph is short, and so is life.
最新文章
网站资讯
文章数目 :
3
已运行时间 :
本站总字数 :
3.3k
本站访客数 :
本站总访问量 :
最后更新时间 :
\ No newline at end of file diff --git a/atom.xml b/atom.xml index 497b60b..7e4c52d 100644 --- a/atom.xml +++ b/atom.xml @@ -44,7 +44,7 @@ http://mapleleaf.icu/2024/11/29/CloudFlareReverseProxy/ 2024-11-29T04:27:29.000Z - 2024-12-06T09:40:29.557Z + 2024-12-08T05:06:10.156Z @@ -58,7 +58,7 @@ - + diff --git a/baidusitemap.xml b/baidusitemap.xml index 1726ff8..3247366 100644 --- a/baidusitemap.xml +++ b/baidusitemap.xml @@ -2,7 +2,7 @@ http://MapleLeaf.icu/2024/11/29/CloudFlareReverseProxy/ - 2024-12-06 + 2024-12-08 http://MapleLeaf.icu/2024/11/29/hello-world/ diff --git a/categories/index.html b/categories/index.html index 5eacf82..f7fb037 100644 --- a/categories/index.html +++ b/categories/index.html @@ -3,12 +3,12 @@ - + - -

评论
公告
An epitaph is short, and so is life.
最新文章
标签
网站资讯
文章数目 :
3
已运行时间 :
本站总字数 :
3.3k
本站访客数 :
本站总访问量 :
最后更新时间 :
-

评论
公告
An epitaph is short, and so is life.
最新文章
标签
网站资讯
文章数目 :
3
已运行时间 :
本站总字数 :
3.3k
本站访客数 :
本站总访问量 :
最后更新时间 :
-
npm,pnpm,yarn换源
公告
An epitaph is short, and so is life.
最新文章
网站资讯
文章数目 :
3
已运行时间 :
本站总字数 :
3.3k
本站访客数 :
本站总访问量 :
最后更新时间 :
\ No newline at end of file diff --git a/link/index.html b/link/index.html index fae5914..4a5ae74 100644 --- a/link/index.html +++ b/link/index.html @@ -3,12 +3,12 @@ - + -
-

评论
公告
An epitaph is short, and so is life.
最新文章
标签
网站资讯
文章数目 :
3
已运行时间 :
本站总字数 :
3.3k
本站访客数 :
本站总访问量 :
最后更新时间 :
-

评论
公告
An epitaph is short, and so is life.
最新文章
标签
网站资讯
文章数目 :
3
已运行时间 :
本站总字数 :
3.3k
本站访客数 :
本站总访问量 :
最后更新时间 :
-

评论
公告
An epitaph is short, and so is life.
最新文章
标签
网站资讯
文章数目 :
3
已运行时间 :
本站总字数 :
3.3k
本站访客数 :
本站总访问量 :
最后更新时间 :
-
标签 - npm
2024
npm,pnpm,yarn换源
npm,pnpm,yarn换源
公告
An epitaph is short, and so is life.
最新文章
标签
网站资讯
文章数目 :
3
已运行时间 :
本站总字数 :
3.3k
本站访客数 :
本站总访问量 :
最后更新时间 :
\ No newline at end of file +
标签 - npm
2024
npm,pnpm,yarn换源
npm,pnpm,yarn换源
公告
An epitaph is short, and so is life.
最新文章
网站资讯
文章数目 :
3
已运行时间 :
本站总字数 :
3.3k
本站访客数 :
本站总访问量 :
最后更新时间 :
\ No newline at end of file diff --git "a/tags/\344\273\243\347\220\206-CloudFlare/index.html" "b/tags/\344\273\243\347\220\206-CloudFlare/index.html" new file mode 100644 index 0000000..5741cc9 --- /dev/null +++ "b/tags/\344\273\243\347\220\206-CloudFlare/index.html" @@ -0,0 +1,155 @@ +标签: 代理 CloudFlare | MapleLeaf + + + + + + + + +
标签 - 代理 CloudFlare
2024
使用CloudFlare搭建反向代理
使用CloudFlare搭建反向代理
公告
An epitaph is short, and so is life.
最新文章
网站资讯
文章数目 :
3
已运行时间 :
本站总字数 :
3.3k
本站访客数 :
本站总访问量 :
最后更新时间 :
\ No newline at end of file diff --git "a/tags/\344\273\243\347\220\206/index.html" "b/tags/\344\273\243\347\220\206/index.html" deleted file mode 100644 index 7dd2abf..0000000 --- "a/tags/\344\273\243\347\220\206/index.html" +++ /dev/null @@ -1,155 +0,0 @@ -标签: 代理 | MapleLeaf - - - - - - - - -
标签 - 代理
2024
使用CloudFlare搭建反向代理
使用CloudFlare搭建反向代理
公告
An epitaph is short, and so is life.
最新文章
标签
网站资讯
文章数目 :
3
已运行时间 :
本站总字数 :
3.3k
本站访客数 :
本站总访问量 :
最后更新时间 :
\ No newline at end of file