一行引用顶几百条规则
一条一条写规则很快就撑不住。广告域名、国内网站、某个流媒体连同它的 CDN,任何一类展开都是几百行,全塞进 rules 段,得到的是一份没人读得下去也维护不了的配置。
规则集把同一类规则打包成一个文件,配置里只留一行引用。清单变了就换文件,rules 段一动不动。
规则集有自己的更新节奏
更新订阅不会顺手更新它,每个 provider 都有各自的 interval。
定义一个规则集要填的四样东西
- 1
来源、behavior、路径、间隔
rule-providers 底下每个条目都要给四样东西。type 是 http(远程清单)还是 file(本地文件);url 或路径决定文件从哪来、缓存存到哪;interval 是隔多久重新拉一次,单位是秒。而 behavior 只有 domain、ipcidr、classical 三个值可选。
- 2
behavior 必须和文件内容对得上
文件里全是纯域名就写 domain,全是 CIDR 网段就写 ipcidr,只有每行都带完整规则前缀(像 DOMAIN-SUFFIX、PROCESS-NAME)的才算 classical。写错的话,规则集要么直接加载失败,要么加载成功却一条都匹配不上。这一行是整段最常出错的地方。
- 3
引用同样按从上到下的顺序
在 rules 段写 RULE-SET、规则集名字、策略组。规则集不会因为它是一个文件就有特殊优先级,它就在你写的那个位置和普通规则一起被检查,命中第一条就停。
加载变慢和加载失败的分界
保存、重新加载配置,再打开「规则」页。每个规则集旁边都应该有条数。条数是 0 就说明文件没拉到或者解析失败,去「日志」页搜 provider 的名字,原因基本都在那儿。
- 远程规则集开机时要有网才拉得到,网络没通就会报配置加载失败,真正的原因只是少一个文件
- interval 别设太短,一天拉一次对绝大多数公开清单都够用
- 一次挂十几个大集合,首次加载会明显变慢,内存也跟着涨
常见问题
规则集一直更新失败,从哪查起?
看日志那一行,别只看界面上的错误提示。出现 403 或 404 说明地址没了或者对方拒绝这个请求,换一个同样清单的来源。出现超时说明这个地址在你当前的网络下访问不了,把下载走代理,或者干脆改成本地文件。顺手确认 path 指向的目录存在而且能写入。
behavior 填错了会看到什么?
两种。吵的那种是规则页里这个集合显示 0 条,日志里有解析错误。安静的那种更麻烦:条数看着正常,却一条都没命中,你以为已经分流的流量其实全掉到最后那条兜底规则上了。挑一个集合里有的域名连一下,再到「连接」页看 Chains 那一列。