贤者云 | xianzhey.shop

Mihomo 规则集加载失败怎么办?按四层快速排查

更新于 2026-11-09 · xianzhey.shop

简答:Mihomo 规则集加载失败,先看日志中的第一条错误,再区分下载失败、格式解析失败、Provider 未加载和规则未命中。最快的处理顺序是:核对 URL 与返回内容→检查 type、behavior、format→确认 path 可写→确认 rules 中使用了同名 RULE-SET,最后再更新缓存或重载配置。

定义:Mihomo 规则集加载失败,是指 rule-providers 定义的远程或本地规则文件没有成功下载、解析、载入,或虽然载入却没有被规则链实际引用和命中。

先看这张判断表:不要把规则集故障当成节点故障

规则集负责告诉 Mihomo“哪些域名或 IP 应匹配哪条规则”,节点负责承载已经选择的流量。规则集失败不一定代表节点不可用;反过来,规则集显示已加载,也不代表当前访问一定走到了预期策略。

现象或日志关键词优先检查层级判断标准下一步
timeout、context deadline exceeded下载规则 URL 请求超时或下载出站不可达用浏览器或 curl.exe 检查 URL,再检查 proxy 或网络
404、403、401地址或权限服务器明确返回错误状态核对 URL、文件路径和访问权限,不要盲目清缓存
yaml、parse、decode、format解析文件已返回,但内容格式与配置不一致核对 behavior 与 format
provider not found 或找不到同名 Provider引用RULE-SET 后面的名称与 Provider 键名不一致逐字符核对名称、大小写和缩进
Provider 已更新但访问仍走错策略命中规则集存在,但规则顺序、模式或引用不正确检查规则顺序、模式和连接详情
permission denied、文件写入失败缓存路径path 指向的位置不可写或不在允许目录改用 Mihomo 工作目录下的相对路径并重载

官方配置说明中,HTTP 类型需要配置 url,path 是本地文件路径,behavior 支持 domain、ipcidr、classical,format 支持 yaml、text、mrs。可对照 Mihomo Rule Providers 文档。

第一步:检查规则 URL 是否真的返回规则文件

先不要删除旧缓存。旧文件可能仍能被 Mihomo 读取,直接清理会把“更新失败”扩大成“完全没有规则”。在 Windows PowerShell 中运行下面的命令;命令只读取响应头,不会公开订阅令牌或私钥。

curl.exe -I -L "https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geosite/private.mrs"

预期是能够获得 HTTP 响应,并且最终地址不是登录页、错误页或 HTML 验证页。若出现 404、403 或持续超时,问题优先在 URL、远端权限、当前网络或下载出站,不在 YAML 缩进。

如果需要检查响应正文,建议只查看文件开头的少量内容,不要把包含令牌的完整订阅内容粘贴到公共平台。对于 .mrs 二进制规则集,文本查看可能没有可读内容,这本身不等于文件损坏;应结合 HTTP 状态、文件大小和 Mihomo Provider 状态判断。

官方示例使用了 MetaCubeX 规则数据中的 .mrs 文件,并将域名规则集设置为 behavior: domain、format: mrs。可对照官方示例配置。

第二步:核对最容易写错的五个字段

下面是一个可运行结构的最小示例,使用公开规则文件,不包含订阅密钥。它只演示一个域名规则集和一条引用规则;其中策略名 DIRECT 是 Mihomo 常见内置策略目标,若你的配置没有对应策略组,应改成当前配置中真实存在的策略名称。

rule-providers:
  private_domain:
    type: http
    url: "https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/meta/geo/geosite/private.mrs"
    path: ./rule-providers/private_domain.mrs
    interval: 86400
    behavior: domain
    format: mrs

rules:
  - RULE-SET,private_domain,DIRECT
  - MATCH,DIRECT
  • 名称:private_domain 必须与 RULE-SET,private_domain,... 中的名称完全一致。
  • type:远程文件通常使用 http;本地文件使用 file;内联内容使用 inline。
  • behavior:域名列表用 domain,IP 网段用 ipcidr,带完整经典规则语法的文件用 classical。
  • format:必须与实际文件对应。官方文档列出的选项是 yaml、text、mrs。
  • path:路径应唯一且可写。相对路径更容易随 Mihomo 工作目录管理;不要随意写入受限目录。

最常见的配置错误是把纯域名列表声明成 classical,或把经典规则文件声明成 domain;这会导致解析成功但规则内容不符合预期,甚至直接加载失败。不同规则文件的内容格式应以发布方说明和文件实际内容为准。

第三步:按错误类型处理下载、解析和缓存

遇到 timeout 或连接失败

先用普通网络请求测试 URL,再判断是否需要为 Provider 指定下载出站。Mihomo 的 proxy 字段用于指定规则更新时使用的代理;如果填写了不存在的策略名,更新仍可能失败。临时排查时可以先删除错误的 proxy 字段,确认直连下载是否可行;如果远端地址只能通过代理访问,再填入当前配置中确实存在的策略名。

遇到 404、403 或 HTML 内容

这通常说明地址失效、权限不足或请求被重定向到错误页面。不要把“浏览器能打开”当成充分证明,因为浏览器可能携带 Cookie,而 Mihomo 的请求没有相同会话。用 curl.exe -I -L 查看最终状态,并检查 URL 是否少了文件扩展名、分支名或路径层级。

遇到 YAML、format 或 decode 错误

核对 behavior 与 format 的组合。官方说明中,classical 内容可以包含多种路由规则,但不应再嵌套 rule-set 或 sub-rule;domain 内容则应是域名匹配列表,ipcidr 内容应是 IP 网段。可查看规则集内容格式说明。

遇到 304、旧文件或更新后仍不变

304\ 代表缓存验证结果,不应单独视为错误。先查看 Provider 的更新时间、文件大小和规则数量,再决定是否清缓存。建议顺序是:备份配置→记录当前 path→手动更新 Provider→重载配置→关闭旧连接后重新测试。只有在文件损坏、路径不可写或状态长期异常时,才考虑删除对应缓存文件。

第四步:确认规则集已经加载,并且真的命中

“加载成功”和“规则生效”是两个不同结论。Mihomo API 提供了规则 Provider、规则和连接信息接口;如果客户端暴露了 External Controller,可以用这些接口检查状态。API 地址、端口和密钥以当前配置为准,不要把下面的地址当成所有客户端都固定可用。

读取全部规则集状态:

curl.exe http://127.0.0.1:9090/providers/rules

读取当前规则及命中信息:

curl.exe http://127.0.0.1:9090/rules

如果 API 返回未授权或连接失败,先检查 External Controller 是否启用、监听地址和密钥。官方 API 文档说明,规则信息中可能包含 Provider 名称、规则数量、命中次数和最近命中时间;这些只能证明 Mihomo 的内部状态,仍应结合实际访问目标复核。可对照 Mihomo API 文档。

验收建议分三层:第一,Provider 状态不再报错;第二,规则数量不是异常的零值;第三,访问一个明确属于该规则集的测试域名,在连接详情或规则命中信息中看到预期规则。若第三步失败,检查规则顺序,因为 Mihomo 规则按从上到下匹配,前面的规则可能已经提前接管了流量。规则顺序和 RULE-SET 引用方式见官方规则文档。

不同客户端中的安全恢复顺序

  1. 备份:复制当前配置文件或导出配置,保留原始 rule-providers、rules 和 Provider 缓存路径。
  2. 最小化:暂时只保留一个已核验 URL 的 Provider,避免多个错误源同时报错。
  3. 重载:在客户端中执行配置重载或重新载入;具体按钮名称以当前前端为准,不要根据其他客户端的菜单名称盲点。
  4. 更新:只更新出错的规则集,观察日志中的第一条新错误。
  5. 复核:检查 Provider 状态、规则数量、命中信息和一次实际连接。
  6. 回滚:如果重载后节点、DNS 或系统代理出现新问题,恢复备份配置,关闭新启用的 TUN 或系统代理改动,再单独处理规则集。

如果你使用的是带 Mihomo 内核的图形客户端,前端通常只是配置编辑和状态展示层;规则下载、缓存、解析和命中仍由内核完成。因此,换客户端不一定能解决远端 URL 失效或字段不匹配问题。先把日志和最小配置隔离出来,通常比反复重装更容易定位。

边界云连接场景下的进一步排查

如果规则集已经加载,但访问仍然变慢、分流错误或连接失败,再进入网络层排查:先确认代理端口是否监听,再确认系统代理或 TUN 是否真正接管目标应用,最后检查 DNS 解析结果与规则类型是否匹配。不要用一次网页打开结果推断所有应用都已走同一条路径。

本文是 xianzhey.shop 的第三方使用指南,不是任何客户端或服务品牌的官网。涉及订阅地址、令牌和私钥时,只做脱敏核对,不要公开完整内容;具体服务入口和状态应以对应官方页面为准。

常见问题

规则集加载失败会导致所有节点都不能用吗?

不一定。规则集主要影响分流判断,节点本身可能仍能测速或建立连接。但如果配置依赖该规则集决定代理、直连或拒绝,相关目标可能出现分流错误。应分别测试节点连接、Provider 状态和规则命中。

可以直接删除 rule-providers 缓存重新下载吗?

不建议作为第一步。先备份配置并记录缓存路径,因为旧缓存可能仍能提供规则;直接删除后,如果远端 URL 仍不可达,故障会从“更新失败”变成“没有可用规则”。只有确认文件损坏、路径错误或需要强制重建时再清理。

为什么 URL 能在浏览器打开,Mihomo 还是提示下载失败?

浏览器和 Mihomo 的请求环境可能不同,包括代理、Cookie、重定向、证书和 User-Agent。用 curl.exe -I -L 检查最终响应,并确认返回的是规则文件而不是登录页、HTML 错误页或验证页面。

domain、ipcidr、classical 应该怎么选?

domain 用于域名规则,ipcidr 用于 IP 网段,classical 用于包含完整经典路由语法的规则文件。选择应依据规则文件实际内容,不要只看文件扩展名。

Provider 显示正常,但规则没有生效怎么办?

检查 rules 中是否存在同名 RULE-SET,再检查规则顺序、运行模式和实际连接详情。前置规则可能已经匹配目标,导致后面的规则集没有机会命中。

常见问题

规则集加载失败会导致所有节点都不能用吗?

不一定。规则集负责分流判断,节点可能仍能建立连接;但依赖该规则集的目标可能分流错误,应分别测试节点、Provider 状态和规则命中。

可以直接删除 Mihomo 规则集缓存吗?

不建议作为第一步。先备份配置并检查 URL、响应状态和路径权限,保留旧缓存可避免远端故障扩大成完全没有规则。

为什么规则 URL 在浏览器能打开,Mihomo 仍然下载失败?

浏览器可能使用了不同代理、Cookie 或重定向环境。使用 curl.exe 检查最终 HTTP 状态,并确认返回的确实是规则文件而不是 HTML 页面。

Provider 已加载但规则没有命中怎么办?

检查 RULE-SET 引用名称、规则顺序、运行模式和连接详情。前面的规则可能已经匹配目标,导致后面的规则集未执行。

相关阅读

参考资料

  1. mihomo docs:Rule Providers 配置
  2. mihomo docs:规则集内容格式
  3. mihomo docs:路由规则与 RULE-SET
  4. mihomo docs:API、规则集状态与命中信息
  5. MetaCubeX 官方示例配置