Shadowrocket 配置文件 .conf 结构详解:General、Rule、Host、URL Rewrite 分段作用

按段拆解 Shadowrocket 的 .conf 文件:General 管全局参数,Rule 管分流,Host 管域名映射,URL Rewrite 管地址重写,每段配示例片段。

本文速览

Shadowrocket(小火箭)的 .conf 是配置文本,不是线路套餐。本文适合已有可用连接、准备阅读或修改配置的用户:先分清四个分段的职责,再在配置副本中逐项修改,最后用 Global Routing 的 Config 姿态核对规则。示例只展示语法,域名与地址使用文档示例值,不能当成可用服务。

1. 先读分段标题,再看每一行的格式

方括号表示一个分段的开始。[General] 下面的设置归 General 管,直到遇见下一个分段标题为止。空行用于阅读分隔,不能代替分段标题。编辑时应保留英文关键字、半角逗号、等号和方括号,避免输入法把标点替换成全角字符。

四段不是四种代理协议,也不是按文件顺序执行的四道网络关卡。General 提供全局参数,Rule 选择请求的处理策略,Host 提供指定的域名映射,URL Rewrite 按表达式处理符合条件的 URL。真正强调“从上到下”的是 Rule 内部的匹配顺序,不能把这个规则机械套用到整个文件。

4 段
本文范围:General / Rule / Host / URL Rewrite
2 类分隔符
General 与 Host 常见等号;Rule 使用逗号
1 条兜底
最小示例将 FINAL 放在 Rule 末尾
[General]
dns-server = system

[Rule]
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT

[Host]
test.example.com = 192.0.2.10

[URL Rewrite]
^http://example\.com/(.*)$ https://example.com/$1 302

2. General:全局参数不等于分流规则

General 常见写法是 参数名 = 参数值。例如 dns-server = system 表示使用系统 DNS。这个设置决定解析相关行为,不表示“所有请求都直连”,也不表示“所有请求都代理”。请求采用什么策略,还要看当前 Global Routing 姿态与适用规则。

[General]
dns-server = system

修改 DNS 之前,先确定问题发生在哪一步:是域名解析失败,还是已经获得目标地址但连接失败。不要同时修改 DNS、规则和远端连接参数,否则即使结果变化,也无法判断是哪一项起作用。已有配置可能包含其他 General 参数;本文的一行示例不能作为覆盖整段的依据。

3. Rule:匹配范围、策略与顺序一起核对

Rule 的典型结构是 类型,匹配内容,策略。DOMAIN-SUFFIX,example.com,PROXY 匹配 example.com 以及它的子域名,然后采用 PROXY。这里的匹配内容不带 https://,不带路径,也不是完整 URL。只想匹配单个主机名时,使用 DOMAIN 更明确。

[Rule]
DOMAIN,api.example.com,DIRECT
DOMAIN-SUFFIX,example.com,PROXY
IP-CIDR,192.0.2.0/24,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY

这组示例中,api.example.com 先命中 DOMAIN,因此不会继续落入后面的 DOMAIN-SUFFIX。其余 example.com 子域名则可命中后缀规则。若把两行交换,较宽的后缀规则会先匹配,单域名例外就失去预期作用。FINAL 处理前面都未命中的请求,通常放在末尾。

按域名匹配

DOMAIN
完整域名匹配,例如 api.example.com。
DOMAIN-SUFFIX
匹配 example.com 及其子域名,不是任意字符串包含。
DOMAIN-KEYWORD
按域名中的关键字匹配,范围可能比预期更宽。

具体例外放在宽泛匹配之前;域名规则不填写 URL 路径。

按地址与兜底匹配

IP-CIDR
匹配地址网段;192.0.2.0/24 是本文的文档示例网段。
GEOIP
按目标 IP 的地理归属数据库匹配,结果取决于数据库记录。
FINAL
不填写匹配内容,直接写 FINAL,PROXY 等兜底策略。

no-resolve 用于避免为该 IP 规则额外触发域名解析,不代表关闭全部 DNS。

DIRECT 表示直连,PROXY 表示交给代理策略处理;策略名不是服务器地址。GEOIP 的结果依赖 IP 与数据库信息,不能保证某个中文网站必然命中 CN。若只是为一个已知域名设置例外,应优先考虑清晰的域名规则,而不是凭网页语言推断 GEOIP。

4. Host:固定解析地址,不负责选择策略

Host 用于建立指定域名到地址的映射,典型格式是 域名 = IP地址。它与 Rule 的“命中后用什么策略”是两件事。即使把一个域名映射到指定地址,也不意味着该请求自动采用 DIRECT;仍应结合当前路由姿态与规则检查处理结果。

[Host]
test.example.com = 192.0.2.10

这一行只描述 test.example.com 的映射,不会自动覆盖 example.com 的所有子域名。若某个站点依赖动态地址或分布式入口,固定地址可能在服务调整后失效,因此应记录添加原因,并准备移除映射后再核对一次。不要从旧配置中长期保留来历不明的 Host 条目。

区分 Host 与 Rule 的修改目标

需要指定解析地址
  • 在 Host 中填写完整域名与确定的目标地址。
  • 确认地址确实属于自己要访问的服务。
  • 先删除本文文档示例地址,再进行真实访问。
需要改变处理策略
  • 在 Rule 中添加 DOMAIN 或 DOMAIN-SUFFIX。
  • 选择 DIRECT、PROXY 或已定义的有效策略。
  • 把特定例外放在宽泛规则和 FINAL 前面。

解析目标与路由策略分别核对;不要用 Host 替代分流规则。

5. URL Rewrite:按 URL 匹配,不是按域名分流

URL Rewrite 使用表达式描述要匹配的地址,再指定替换结果或相应动作。下面展示一条 HTTP 到 HTTPS 的 302 重定向:正则表达式中的 \. 表示字面上的点,(.*) 捕获路径内容,替换地址中的 $1 引用第一个捕获组。

[URL Rewrite]
^http://example\.com/(.*)$ https://example.com/$1 302

这个示例匹配的是以 HTTP 开头的 URL,不应把它理解为可以直接读取所有 HTTPS 路径。HTTPS 的路径位于加密内容中,涉及路径的处理存在额外前提;仅添加 URL Rewrite 段不会自动满足这些前提。本文不需要改动证书相关设置,也不建议为验证这条 HTTP 示例扩展修改范围。

6. 保存后选择 Config,再验证单项修改

编辑文件与让文件生效是两个步骤。在 Config 中保存修改后,还要确认当前选中的是这份配置。验证 Rule 时,回到 Home → Global Routing 选择 Config;如果仍处于 Proxy 或 Direct,不能根据访问结果判断刚修改的分流规则是否正确。

  1. 保留原稿

    在 Config 中找到当前使用的本地配置,先保留副本或备份原文。记录当前文件名,不直接覆盖唯一可用配置。

  2. 单项修改

    打开目标配置的编辑入口,只调整一个分段中的一个目标项目。例如先添加 DOMAIN,api.example.com,DIRECT,不要同时修改 Host 和 DNS。

  3. 保存并选用

    保存后返回 Config,确认目标配置处于选用状态。再进入 Home → Global Routing → Config,核对本次测试确实使用规则分流。

  4. 新建请求

    重新发起目标请求,避免仅观察已经建立的长连接。记录请求域名、预期策略和实际结果;必要时重新连接后再测。

  5. 还原对照

    移除刚添加的一行,再对相同目标进行一次核对。如果差异与预期不符,返回检查匹配顺序与当前配置,不继续叠加修改。

Config

推荐

按所选配置中的规则处理请求。命中 DIRECT 还是 PROXY,取决于规则内容与顺序,并非固定“其余直连”。

适合:本文的 Rule 修改验证与日常规则分流。

Proxy

以代理姿态处理请求,不按 Rule 逐项选择分流策略。可作为排查代理连接是否可用的对照,但不用于证明规则命中。

适合:在已有服务前提下,将连接问题与规则问题分开检查。

Direct

以直连姿态处理请求,不能用这个姿态的结果判断 PROXY 规则是否正确。

适合:核对同一目标在直连条件下的表现。

Global Routing 中的 Scene 涉及场景设置,不应与 Config 的规则验证混在一起。Settings → On Demand 管理按需连接条件,也不是 Rule 编辑入口。若连接会随网络条件自动变化,测试前应先核对这些独立设置,避免把连接状态变化误判为 .conf 语法错误。

7. 配置未生效时,按现象缩小范围

“文件能保存”只能说明编辑操作完成,不能证明每一条规则都符合意图。检查时先确认文件和姿态,再核对目标、顺序与语法。下面的检查项不依赖更换服务,适合在现有可用连接下逐一执行。

现象先检查什么核对动作
添加 Rule 后没有变化当前文件与 Global Routing确认 Config 选中文件,并在 Home → Global Routing 选择 Config。
特定域名例外不生效规则先后顺序把 DOMAIN 例外放在更宽的 DOMAIN-SUFFIX 前面,FINAL 保留在末尾。
只有一个域名无法访问Host 中的固定映射移除该域名的旧映射后重测,不同时更换 DNS。
URL Rewrite 没有变化协议、主机名与表达式检查请求是 HTTP 还是 HTTPS,以及点号转义和路径是否匹配。
文件保存后出现解析问题分段标题与半角标点检查方括号、逗号、等号,回退最近一次修改后重新打开配置。

用户已有的订阅通常用于维护连接信息,不能把“更新订阅”直接等同于“当前本地 .conf 已经更新”。若配置本身来自远程来源,还要区分远程原稿与本地副本;后续更新可能改变原有内容。保留本地修改记录,比反复导入同一份文件更容易追溯问题。

App Store 下载