阅读故障转移策略组的候选顺序,不能只确认某个节点名是否出现在配置里,而要按官方代理组字段还原「最终成员列表」从前往后的次序。type 为必须项,策略组类型决定如何使用这份列表;proxies 用于引入出站代理或其他策略组。顺序读错时,故障转移会落在错误的候选上。
适用条件:先分清列表从哪组装
阅读顺序前,先确认成员来源。仅使用 proxies 时,书写次序是起点。使用 use 时引入代理集合,但健康检查不会检查这些通过 use 引入的代理,因此「谁在名单里」和「谁会被测」必须分开读。include-all 为 true 时,引入所有出站代理以及代理集合,顺序将按照名称排序;引入不包含策略组,若还需要其他策略组,仍可在 proxies 写入。include-all-proxies 引入所有出站代理并按名称排序;include-all-providers 引入所有代理集合并按名称排序,且会使常规的引入代理集合写法失效。
若存在 filter、exclude-filter、exclude-type,最终候选不是原始名单。filter 筛选满足关键词或正则表达式的节点,可用反引号区分多个正则,且仅作用于引入代理集合以及引入所有出站代理。exclude-filter 排除匹配项。exclude-type 不支持正则,通过 | 分割,根据节点类型排除,仅排除引入的出站代理,无视大小写。判断依据是:能指出成员来自 proxies、use 还是 include-all 系列,并能指出过滤后仍按书写序还是改按名称序。
具体操作:从上到下读出第几个候选
-
读
name与type,确认这是目标组而不是被嵌套的子组。名称含特殊符号时,文档要求使用引号包裹。 -
读
proxies的书写顺序,区分每一项是出站还是其他策略组。嵌套组表示候选可能再进入另一组的选择结果。 -
若开启 include-all 系列,把「按名称排序」叠到顺序解释上,不能再假设手工排列就是最终顺序。
-
应用过滤与排除,删去不会成为候选的项。若得到空列表,读
empty-fallback:当组为空时的回退 proxy,默认为COMPATIBLE;这里不支持填写代理组,只支持填写 proxy 名称。 -
读
default-selected:默认选择的节点;该项为空或节点名不存在时,默认选择组中第一个节点。它影响初始选中,阅读故障转移候选时仍要保留完整列表次序,不能把默认项当成唯一候选。 -
健康检查不改书写顺序,但改「当前谁算可用」。
url、interval、timeout、expected-status、max-failed-times决定可用性,从而决定故障转移会停在列表中的哪一个可用候选。记住检查范围不含use引入的集合代理。
判断依据:能复述成员按何种规则排序、过滤后第几个是谁、空组回退到哪个 proxy、默认选中是谁。
失败时下一步
实际选中的候选与阅读结果不一致时,按组装规则回查:先看 include-all 是否已把顺序改成按名称排序;再看过滤条件是否删掉了以为排在前面的节点;然后看空组是否已落到 empty-fallback,且未误填代理组名;接着看健康检查是否把前面的候选判为不可用从而跳到后续项;最后看 default-selected 是否因名称不存在而落到组中第一个节点。仍对不上时,只对照上述通用字段,不要改用文档未给出的界面名称来解释顺序。