Giter VIP home page Giter VIP logo

cloudflare-rewrite-subscribe's Introduction

使用 Cloudflare Workers + D1 搭建订阅 Rewrite 服务

第一步:创建数据库

  1. 进入 Workers & Pages → D1。
  2. 创建一个任意名称的数据库,例如 subscribe-rewrite

第二步:创建数据表

  1. 进入刚刚创建的数据库。

  2. 创建数据表。

  3. 进入控制台(console),执行以下 SQL 语句:

     CREATE TABLE groups (
        cipher TEXT,
        source TEXT,
        priority INTEGER DEFAULT '0',
        `index` INTEGER DEFAULT '0',
        action TEXT DEFAULT 'must add',
        value TEXT,
        proxies TEXT
    );
    
    CREATE TABLE proxies (
        cipher TEXT,
        source TEXT,
        priority INTEGER DEFAULT '0',
        `index` INTEGER DEFAULT '0',
        action TEXT DEFAULT 'must add',
        value TEXT
    );
    
    CREATE TABLE rules (
        cipher TEXT,
        source TEXT,
        priority INTEGER DEFAULT '0',
        `index` INTEGER DEFAULT '0',
        action TEXT DEFAULT 'must add',
        value TEXT
    );
    
    CREATE TABLE others (
        cipher TEXT,
        source TEXT,
        priority INTEGER DEFAULT '0',
        `index` INTEGER DEFAULT '0',
        action TEXT DEFAULT 'must add',
        field TEXT,
        value TEXT
    );

第三步:创建 Worker

  1. 创建一个 Worker。
  2. 复制 worker.js 中的代码,替换开头的const CIPHER_LIST = ["xxx1", "xxx2"] 中的密钥,替换xxx...部分,不填的话则不使用密钥。
    注意不要包含 "&" 和 "," 否则验证无法通过!!!
    建议添加了节点的务必填入密钥,否则别人访问你的服务也能使用你添加的节点!!!
  3. 将整个js内容,替换 Worker 的 JavaScript 代码并部署。

第四步:绑定数据库

  1. 进入 设置 → 变量 → D1 数据库绑定。
  2. 绑定刚刚创建的数据库,变量名为:DB

使用方法

通过 Worker 地址,ciphersourceconfig 参数拼接为订阅链接。例如:

  • https://example.workers.dev/?cipher=xxx&source=surge&config=https%3A%2F%2Fsub.example.com
  • https://example.workers.dev/?cipher=xxx1,xxx2,xxx3&source=clash&config=https%3A%2F%2Fsub.example.com

注意:订阅地址可能需要编码,如果cipher有多个密钥,以,分隔,且必须每个都有效才行!!!

执行顺序

Proxy -> Rule -> Group -> Others

数据库表结构说明

groups

用途:操作分组相关信息。

字段 类型 默认值 描述
cipher TEXT 支持的密钥
可多个,以,分隔,不填则都支持。
source TEXT 支持的来源
可以填写 surgeclash
如果不填则适用于所有来源。
priority INTEGER 0 排序字段,正序排列
优先级越低越先执行
0 表示最先执行。
index INTEGER 0 插入的索引位置
0 表示最末尾
1 表示第一位。
action TEXT 'must add' 操作类型
must add:必须添加,如果value不存在则会创建
add:添加,如果value不存在则忽略
set:设置,如果不存在会创建,将value的值设置为proxies中的值
remove:删除,
如果没有proxies值,会删除组名为value以及组内为value
如果存在proxies,则只会删除value组内的proxies
value TEXT 组名
可多个,以,分隔
*表示所有
-表示排除,需要排除的每个元素前都要加上-
例如:*, -🚀 节点选择 表示除了🚀 节点选择以外的所有组
proxies TEXT 相关代理信息,可以为节点名,或者组名
当为组名时,不存在不会创建,即使actionmust add
可多个,以,分隔
*表示所有
-表示排除,需要排除的每个元素前都要加上-

proxies

用途:操作节点相关信息。

字段 类型 默认值 描述
cipher TEXT 支持的密钥
可多个,以,分隔,不填则都支持。
source TEXT 支持的来源,可以填写 surgeclash,如果不填则适用于所有来源。
priority INTEGER 0 排序字段,正序排列,优先级越低越先执行,0 表示最先执行。
index INTEGER 0 插入的索引位置,0 表示最末尾,1 表示第一位。
action TEXT 'must add' 操作类型
must add:等同于add
add:添加,如果节点名存在,会忽略
set不支持
remove:删除,会同时将节点从所有组内移除
value TEXT add时,值为整个节点信息,可以为surge、clash格式的,会根据来源自动转换,不支持多条!
例如:
{name: **, server: abc.com, port: 1111...}
或者
香港 = vmess, abc.com, 43022, username=5180cd6f-1111

remove时,传入节点名称即可,可多个,以,分隔
*表示所有
-表示排除,需要排除的每个元素前都要加上-

rules

用途:操作规则相关信息。

字段 类型 默认值 描述
cipher TEXT 支持的密钥
可多个,以,分隔,不填则都支持。
source TEXT 支持的来源,可以填写 surgeclash,如果不填则适用于所有来源。
priority INTEGER 0 排序字段,正序排列,优先级越低越先执行,0 表示最先执行。
index INTEGER 0 插入的索引位置,0 表示最末尾,1 表示第一位。
action TEXT 'must add' 操作类型
must add:等同于add
add:添加,如果value存在则忽略
set不支持
remove:删除
value TEXT 值,例如:DOMAIN,example.com,🚀 节点选择

others

用途:操作其他类型的信息。

字段 类型 默认值 描述
cipher TEXT 支持的密钥
可多个,以,分隔,不填则都支持。
source TEXT 支持的来源,可以填写 surgeclash,如果不填则适用于所有来源。
priority INTEGER 0 排序字段,正序排列,优先级越低越先执行,0 表示最先执行。
index INTEGER 0 插入的索引位置,0 表示最末尾,1 表示第一位。
action TEXT 'must add' 操作类型
must add:必须添加,如果field不存在则会创建
add:添加,如果field不存在则忽略
set:设置,如果不存在会创建,将值设置为value
remove:删除,
如果没有value值,则会删除最后一级的field字段
field TEXT 要操作的字段,如果有多级层级关系,用逗号分隔每一级。
value TEXT 值,不支持多个值,会将整个value当成一个元素去判断是否重复等操作

使用示例


示例 1: 创建💬 OpenAi组,并将除了美国1以外的所有节点添加进去

groups表中将节点加入到组内,must add 模式下,💬 OpenAi不存在也会自动创建

source priority index action value proxies cipher
0 1 must add 💬 OpenAi *,-美国1

示例 2: 从💬 OpenAi中,并删除除了美国1,美国2以外的所有节点

groups表中,*此次表示所有节点,-表示排除美国1,美国2节点,如果proxies没有值,将会删除💬 OpenAi这个组

source priority index action value proxies cipher
0 1 remove 💬 OpenAi *,-美国1,-美国2

示例 3: 添加节点并加入到 🚀 节点选择

proxies表中添加节点信息

source priority index action value cipher
0 1 must add {name: **a, server: abc.com, port: 1111...}
1 2 must add 美国a = vmess, abc.com, 43022, username=5180cd6f-1111

groups表中将节点加入到组内,must add 模式下,🚀 节点选择不存在也会自动创建

source priority index action value proxies cipher
0 1 must add 🚀 节点选择 **a, 美国a

示例 4: 添加节点到新建的组📡 私有节点中,并将这个组加入到 🚀 节点选择 组中

proxies表中添加节点信息

source priority index action value cipher
0 1 must add {name: **a, server: abc.com, port: 1111...}
1 2 must add 美国a = vmess, abc.com, 43022, username=5180cd6f-1111

groups表中创建组并添加到 🚀 节点选择

source priority index action value proxies cipher
1 0 must add 📡 私有节点 **a, 美国a
2 1 must add 🚀 节点选择 📡 私有节点

示例 5: 在所有的组中,加入节点**a和组📡 私有节点

groups表,此时*则表示所有的组,也可以使用-来排除某个组

source priority index action value proxies cipher
2 1 must add * **a,📡 私有节点

示例 6: 删除节点美国1

proxies表中添加节点信息,会删除当前节点,并且也会从所有组里面删除当前节点

source priority index action value cipher
0 1 remove 美国1

示例 7: 指定generativelanguage.googleapis.com域名走 📡 私有节点

rules表添加规则

source priority index action value cipher
0 1 must add DOMAIN,generativelanguage.googleapis.com,📡 私有节点

如果不存在当前组,则在groups表中创建当前组,*则表示添加所有的节点到当前组内

source priority index action value proxies cipher
0 1 must add 📡 私有节点 *

示例 8: 在 Surge 配置中,添加跳过代理

others表中,此时会先找到分组General,其次找到skip-proxy字段,将value添加到index的位置,0则加到末尾

source priority index action field value cipher
surge 0 0 must add General,skip-proxy *.dev.com, *.test.com

示例 9: 在 Surge 配置中,替换MITM的主机名

others表中,此时会先找到分组MITM,其次找到hostname字段,将hostname的值设置为*:0

source priority index action field value cipher
surge 0 0 set MITM,hostname *:0

示例 10: 在 Clash 配置中,替换日志级别

others表中,此时会先找到log-level,将log-level的值设置为warn

source priority index action field value cipher
clash 0 0 set log-level warn

示例 11: 在 Clash 配置中,删除allow-lan字段

others表中,此时会先找到allow-lan,删除当前字段

source priority index action field value cipher
clash 0 0 remove allow-lan

常见问题(FAQ)

1. 报错: An error occurred: Cannot read properties of undefined (reading 'map')

  • 解决方案: 订阅地址需要编码。

2. Invalid cipher

  • 解决方案: 检查密钥是否正确,或者密钥中是否含有 &,,这可能导致验证失败。

3. Surge 从 URL 安装配置后没有反应

  • 解决方案: 新建一个空配置,然后在网页上打开你部署后的订阅地址,将内容复制到配置中。之后可以直接更新配置。

4. 节点转换后无法正常使用

  • 解决方案: 建议指定 source,并填入对应格式的节点信息。

cloudflare-rewrite-subscribe's People

Contributors

djx30103 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.