Shadowrocket 可以按应用分流吗?指定 App 的实现方式

一句话回答:可以按应用区分走向,常见做法是按该应用使用的域名写规则,或在支持的系统上用进程级规则;前者兼容性最好,后者依赖系统能力。

要点速览
  • 最稳妥的做法是按域名写规则:找出该应用实际访问的域名,为其单独指定走向。
  • 进程级分流依赖系统接口,在部分平台与系统版本上不可用。
  • 很多应用会访问多个域名,只写一条主域名往往不够,需要用日志观察实际请求。
  • 按应用分流后,同一设备上的其他应用不受影响,这是它相对全局模式的优势。

只有一两个应用需要代理时,全局模式太重,逐条域名规则又太绕。按应用分流是折中方案,但要注意它的实现前提。

两种实现路径

按域名写规则是通用方案:任何应用最终都要访问域名,把它的域名整理出来单独指定走向即可,兼容性最好,也不依赖系统接口。

按进程写规则是进阶方案:直接对发出请求的程序做判断,配置更直观,但依赖系统提供的网络扩展能力,在部分平台与版本上无法使用。

两种按应用分流方式对比
方式依赖条件兼容性维护成本
按域名规则需整理应用域名全平台可用域名变动时需更新
按进程规则系统网络扩展支持部分平台可用低,写一次即可

怎么找出应用实际访问的域名

打开客户端的连接记录或请求日志,运行目标应用并执行一次典型操作,日志里出现的域名就是它实际访问的地址。

把出现频率最高的几个域名记录下来,优先为它们写规则;个别低频域名可以先观察,确实需要时再补。

  • 注意区分主域名与 CDN 域名,两者通常都需要覆盖。
  • 统计类、推送类域名可按需求决定是否一并处理。
  • 整理完成后保存一份清单,便于日后复查与迁移。

常见误区

误区一是以为只写主域名就够了:现代应用普遍把资源分散在多个域名上,只写主域名会出现部分功能不可用。

误区二是把应用规则放在地区规则之后:宽泛规则先命中会让应用规则形同虚设,应用规则应放在靠前位置。

获取规则分流客户端

按应用分流的高频疑问

为什么设置了应用规则还是走直连?

多数情况是被前面的宽泛规则抢先命中,或该应用访问的是未覆盖的 CDN 域名。把应用规则上移并补齐域名后重试。

按应用分流会影响其他应用吗?

不会。规则只对命中的应用或域名生效,其他应用继续按原有策略处理,这也是它比全局模式更适合长期使用的原因。

同一应用能一部分走代理一部分直连吗?

可以。只要把该应用的域名拆开分别指定策略即可,例如把资源下载域名设为直连、把接口域名设为代理。