迁移配置目录时,代理集合依赖的不只是主配置里的 proxy-providers 文本,还包括 HomeDir 下的缓存文件、未写 path 时按 URL 生成的文件,以及可能的目录外安全路径。下面只说明如何在迁移中保留这些依赖,并给出失败后的处理顺序。
适用条件
适用于准备更换核心启动参数 -d 所指向的 HomeDir,或把整份配置连同集合缓存一起搬到新位置的场景。集合 type 仍须是 http、file 或 inline。http 依赖 url 与本地缓存文件;file 依赖 path 上已有文件;inline 的节点在 payload 里,随主配置迁移即可,没有独立缓存,但仍占用不可重复的 name。
官方对路径的限制在迁移后同样有效:path 可选、不可重复;不填写时使用 url 的 MD5 作为文件名。路径只允许在新的 HomeDir 中;若缓存必须留在原盘其他位置,需要在新环境设置 SAFE_PATHS,语法与 PATH 相同(Windows 分号,其他系统冒号)。只拷贝 yaml 主文件、不处理这些路径,集合依赖就不完整。
迁移时保留依赖的步骤
第一步,在旧环境列出全部集合的 name、type、url、path。name 必须唯一,建议不要和策略组名称重复,清单才能一对一对照。标出未写 path 的 http 条目,它们的磁盘文件名是 url 的 MD5,容易在搬家时被漏掉。
第二步,以旧 HomeDir 为根,收集所有显式 path 文件和上述 MD5 文件。文档示例路径形如 ./proxy_providers/provider1.yaml,相对路径相对 HomeDir 解析。迁移后若 -d 指向新目录,应把同一相对结构原样放进新 HomeDir,这样配置文本里的 path 不必改写。若新环境仍使用旧的绝对路径,则必须让该绝对路径落在新进程的 HomeDir 或 SAFE_PATHS 内,否则属于越界。
第三步,按类型处理“可再获取”与“不可再获取”。http 在 url 仍有效时,理论上可以在新目录重新下载,但保留旧缓存可以避免迁移窗口内没有节点;下载是否走代理看字段 proxy,更新周期看 interval(秒),体积限制看 size-limit(默认 0 不限制,单位字节)。file 没有远程回源,必须把原文件拷到新路径,否则就是依赖丢失。若使用了 age-secret-key 解密,密钥与加密文件要一并可用,核心不会主动把公钥发给服务器。
第四步,在新目录启动前复核:每条 path 仍唯一、都在允许目录内、name 未在迁移中合并冲突。判断依赖保留成功的依据是:每条 http/file 集合在新 HomeDir(或合法 SAFE_PATHS)里仍能对应到原来那份文件,而不是仅主配置能打开。
失败时下一步
新目录加载后集合为空或提示找不到文件,先核对新进程的 -d 是否就是你放入缓存的根,相对路径有没有多一层或少一层。接着查是否漏拷 MD5 文件名的缓存、是否两条集合在合并配置时写成了同一 path。路径合法但 http 无法刷新,再查 url、header、proxy、interval、size-limit。file 缺失只能从备份取回,不能指望更新间隔。http 或 file 解析失败时,文档允许用 payload 作为备用代理,可暂时提供节点,但不能替代把缓存文件迁到合法路径。