🎬 视频教程

📌 搭建节点教程

📌 保活方式

单独配置保活项目,在后台定时拉起保活程序。

  1. 运行以下命令进入脚本:
    1
    bash <(curl -Ls https://raw.githubusercontent.com/frankiejun/serv00-play/main/start.sh)
  2. 输入 6,配置保活项目。
  3. 选择 2,选择 Sing-box
  4. Sing-box 选项中,输入 3,选择 All
  5. 消息推送,默认 N,直接回车。
  6. 是否 cron 保活,默认 N,输入 Y
  7. 保活间隔,默认 5 分钟,直接回车。

系统会生成一个保活程序,但这个程序也可能被系统杀掉!

其他保活方式

  • linkalive 项目通过更新订阅的方式保活,但仅限会员使用。

  • keepalive 依赖 GitHub Actions 进行自动保活,需要先部署 GitHub 项目。

  • 🚀 本文提供更简单的 Cloudflare Workers 方式。

🔥 利用 keepalive 页面保活 + Cloudflare Workers 自动保活

具体操作

  1. 安装 keepalive

    • 进入脚本,输入 25
    • 进入 keepalive 脚本,输入 1 进行安装。
    • 使用默认域名,默认 Y,直接回车。
    • 自定义 token,默认 Y,可回车自定义,也可输入 N
    • 自定义路径,回车输入即可。
    • 保活间隔,默认 2 分钟,回车。

    ✅ 安装完成后,访问默认的 keepalive 域名,若出现哪吒的图片,则说明页面保活生效!

  2. Cloudflare Workers 自动保活

    • 进入 Cloudflare,创建 Workers。
    • 选择 “Hello World” 模板,点击 “跳过”,直接创建。
    • 自定义项目名称,然后点击 “部署”。
    • 进入代码编辑,删除默认代码,替换为以下代码:
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
addEventListener('scheduled', event => {
event.waitUntil(handleScheduled().catch(error => {
console.error("⛔ 任务失败:", error);
return Promise.reject(error); // 确保 Cloudflare 任务失败
}));
});

const pageUrl = 'https://2jztest.serv00.net/';
const expectedImagePath = '/static/nezha.jpg';
const expectedImageUrl = new URL(expectedImagePath, pageUrl).href;
const TIMEOUT = 5000; // 超时 5 秒

async function fetchWithTimeout(url) {
const controller = new AbortController();
const timeout = setTimeout(() => controller.abort(), TIMEOUT);

try {
const response = await fetch(url, { signal: controller.signal });

if (!response.ok) {
console.warn(`⚠️ 访问失败: ${url}, 状态码: ${response.status}`);
return false;
}

// 确保图片可以正确加载(如果是图片请求)
if (url.endsWith('.jpg') || url.endsWith('.png')) {
const contentType = response.headers.get('content-type') || '';
if (!contentType.startsWith('image/')) {
console.warn(`⚠️ 图片加载失败: ${url},返回的不是图片类型: ${contentType}`);
return false;
}
}

console.log(`✅ 成功: ${url} 状态码: ${response.status}`);
return true;
} catch (error) {
console.warn(`❌ 访问失败: ${url}, 错误: ${error.message}`);
return false;
} finally {
clearTimeout(timeout);
}
}

async function handleScheduled() {
console.log('⏳ 任务开始');

// 访问页面
const pageLoadedSuccessfully = await fetchWithTimeout(pageUrl);
if (!pageLoadedSuccessfully) {
console.error(`❌ 页面加载失败: ${pageUrl}`);
return Promise.reject(new Error('页面加载失败')); // 强制任务失败
}

// 访问图片
const imageLoadedSuccessfully = await fetchWithTimeout(expectedImageUrl);
if (!imageLoadedSuccessfully) {
console.error(`❌ 图片加载失败: ${expectedImageUrl}`);
return Promise.reject(new Error('图片加载失败')); // 强制任务失败
}

console.log(`✅ 页面和图片均加载成功`);
}
  1. 设置自动触发

    • 代码修改完成后,点击 “部署”。
    • 在项目设置中,找到 “触发器”。
    • 添加 cron 触发器(默认每 30 分钟触发一次)。
    • 添加完成后,确认定时任务生效。
  2. 查看运行状态

    • 在 “事件详细信息” 中,点击 “查看事件”,即可查看运行明细。

📢 最后:

  • ✅ 该方式依赖 keepalive 网页保活,仅在 keepalive 可用时生效。

  • serv00 代理节点 依赖外部脚本,稳定性较差。

  • 不建议作为主力节点使用,仅适用于备用或临时需求。

  • “完美保活方案”并不存在,文章会跟随脚本优化,持续更新优化教程

🔗 友情链接:

serv00 搭建代理节点 | 问题汇总 | 失效分析 | 保活方案