使用CF Snippets反代你的pages

使用CF Snippets反代你的pages

MoGuQAQ Lv3

Cloudflare Workers 在使用反代、边缘请求处理时,常常会带来很高的延迟,并且请求数每天只有1M。而Snippets是Cloudflare推出的位于规则引擎级别的更轻量的边缘js服务,对于无需使用Worker全栈功能的用户来讲,他能够提供无限的请求数,延迟更低,更适合反代、边缘请求处理的业务。

这个功能类似阿里云的EdgeScript和腾讯的EdgeFunction,理论上之间的脚本都是可以互相修改适配的。

怎么开通

目前Snippets只对少部分域名后缀的大部分域名的Free计划提供5个配额,其他不支持的后缀可能需要等待后续跟进或开通Pro套餐。

目前已知可以获取Snippets的后缀有.top .net .xyz .org .me .cc .com

具体是否支持可以自行在Cloudflare进入一个域名,点击规则->Snippets,若出现需要升级计划则是不支持。

反代脚本

这个脚本是修改yutian81大佬编写的Worker反代pages脚本

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

async function handleRequest(request) {
// ✅ 使用你的Pages默认地址
const targetBase = 'https://your.pages.dev'

if (request.headers.get('Upgrade') === 'websocket') {
return fetch(request)
}

const url = new URL(request.url)
const newUrl = new URL(url.pathname + url.search, targetBase)

const newHeaders = new Headers(request.headers)
newHeaders.set('Host', newUrl.hostname)

const newRequest = new Request(newUrl, {
method: request.method,
headers: newHeaders,
body: request.body,
redirect: 'manual'
})

const response = await fetch(newRequest)

if ([301, 302, 303, 307, 308].includes(response.status)) {
const location = response.headers.get('Location')
if (location && location.includes(targetBase)) {
return Response.redirect(
location.replace(targetBase, `https://${url.hostname}`),
response.status
)
}
}

return response
}

Snippets 版本

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
export default {
async fetch(request) {
try {
return await handleRequest(request);
} catch (e) {
return new Response(e.message || "Internal Error", { status: 500 });
}
},
};

async function handleRequest(request) {
// ✅ 使用你的Pages默认地址
const targetBase = 'https://your.pages.dev'

if (request.headers.get('Upgrade') === 'websocket') {
return fetch(request)
}

const url = new URL(request.url)
const newUrl = new URL(url.pathname + url.search, targetBase)

const newHeaders = new Headers(request.headers)
newHeaders.set('Host', newUrl.hostname)

const newRequest = new Request(newUrl, {
method: request.method,
headers: newHeaders,
body: request.body,
redirect: 'manual'
})

const response = await fetch(newRequest)

if ([301, 302, 303, 307, 308].includes(response.status)) {
const location = response.headers.get('Location')
if (location && location.includes(targetBase)) {
return Response.redirect(
location.replace(targetBase, `https://${url.hostname}`),
response.status
)
}
}

return response
}

替换掉其中的targetBase到你的目标地址。

使用教程

在Cloudflare进入一个支持Snippets的域名,点击规则->Snippets,点击创建片段。

Snippets

复制上方Snippets版本脚本,粘贴在左边,修改targetBase地址

脚本

填写片段名称后,点击部署,在右侧选择自定义筛选表达式,具体匹配规则如图,值按照这个格式填写你的域名:https://访问域名/*,点击完成。

部署

如果出现了此规则可能不适用于您的流量,说明你的访问域名可能已经正在使用,且没有开启Cloudflare小黄云。如果你使用的是优选域名则可以忽略这条消息直接选择部署,如果不是就选择创建新代理 DNS 记录,随便填写一个地址,后续再修改。

你可以按照这个教程部署优选域名,直接使用指向当前域名区域的优选域名,或者关闭小黄云直接在Cloudflare使用优选(不推荐,目前可用但以后可能会被禁止访问)。

规则会马上生效,你可以自行访问尝试是否可用。

关于更多Snippets的具体介绍可以参考Cloudflare文档:https://developers.cloudflare.com/rules/snippets/

  • 标题: 使用CF Snippets反代你的pages
  • 作者: MoGuQAQ
  • 创建于 : 2026-02-10 13:53:19
  • 更新于 : 2026-02-10 13:53:19
  • 链接: https://blog.moguq.top/posts/26021001/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论
目录
使用CF Snippets反代你的pages