嘟嘟社区

[经验] (思路)Sing-Box 自建节点客户端配置转换成订阅链接


本帖最后由 Happig_Muse 于 2024-8-25 18:55 编辑

只是个人思路,各位有意见也可以发表。发不了链接,用 h-t-t-p-s 代替(包括代码部分)

Sing-Box 自建节点的客户端配置是 json 文件,每次修改完配置,手机端都需要手动修改,很麻烦。而网络上的在线订阅转换网站,都是对 V2rayN 和 Clash For Windows 的 URL 链接进行转换,并没有对 json 文件进行转换。

手机端要使用远程订阅的话,可以将 json 文件部署到自己的 VPS 中或者 Github,输入指定网址进行订阅。我的思路是在 Github 创建一个私有库,将节点配置 json 文件放入,用 CloudFlare Pages 进行同步,Pages 会自动分配一个域名,通过这个域名输入指定路径显示对应 json 文件内容。下面简单的给出步骤:

  • 在 Github 点击右上角个人头像选择 "Your Repositories",然后创建新库,记得勾选 Private(私人)
  • 来到 h-t-t-p-s://github.com/settings/tokens 创建 Github Token,填写 Note(Token 名称),权限记得勾选 repo
  • VSCode 克隆刚刚创建的仓库:按下组合键 "ctrl + shift + p",输入 "clone" 回车,输入仓库的 git 链接(由于是私有库,链接有特定格式:h-t-t-p-s://tokens-name:[email protected]/YOUR-USERNAME/YOUR-REPOSITORY.git)
  • 在 VSCode 新建 json 文件,将节点配置放入。然后新建 _worker.js 文件:
    1. let tokens = {
    2.   ‘uuid1’: ‘Fake.json’,
    3.   ‘uuid2’: ‘ALL_Fake.json’,
    4.   ‘uuid3’: ‘Hy2_Fake.json’
    5. };        // 建议随机生成一串 uuid 替换前面的键,后面的值对应你的配置文件,之后输入正确的网址才会显示对应文件内容(例如,我的 Pages 域名是 test.config.com,那么我在浏览器输入 h-t-t-p-s://test.config.com/uuid2 就会对应显示文件 ALL_Fake.json 的内容)
    6. let githubUsername = ‘Github_username’; // 替换为你的 GitHub 用户名
    7. let repoName = ‘REPOSITORY_name’; // 替换为你的 GitHub 仓库名
    8. let githubToken = ‘Token’; // 替换为你的 GitHub Token
    9. export default {
    10.   async fetch(request) {
    11.     const url = new URL(request.url);
    12.     const token = url.pathname.substring(1);
    13.     if (tokens[token]) {
    14.       const fileName = tokens[token];
    15.       const githubUrl = `h-t-t-p-s://raw.githubusercontent.com/${githubUsername}/${repoName}/main/${fileName}`;
    16.       try {
    17.         const response = await fetch(githubUrl, {
    18.           headers: {
    19.             ‘Authorization’: `Bearer ${githubToken}`,
    20.           },
    21.         });
    22.         if (response.ok) {
    23.           const content = await response.text();
    24.           return new Response(content, {
    25.             headers: { ‘Content-Type’: ‘application/json’ },
    26.           });
    27.         }
    28.       } catch (error) {
    29.         // 如果需要可以添加日志记录或调试信息,但不显示给用户
    30.       }
    31.     }
    32.     return new Response(‘密码错误,应输入纯字母的 md5 加密和光栅加密!’, {
    33.       status: 404,
    34.       headers: { ‘Content-Type’: ‘text/plain’ },
    35.     });
    36.   },
    37. };

    复制代码

  • 编辑好后,在 VSCode 左侧点击 "源码管理",全部提交(记得写 git commit),然后推送
  • 在 CloudFlare 左侧点击 "Worker/Pages",新建一个 Pages,连接你的 Github 仓库即可
  • 之后 Pages 会分配一个域名,根据 _worker.js 的配置,输入对应网址就会显示对应的节点配置,手机端 singbox 填上这个网址就行了
订阅不是事,负载均衡故障转移才是真正的麻烦