多个 Squid 父代理是备选,而不是串行链
peer 列表给 Squid 提供选择。串行 A → B → C 路由需要每个转发实例各自选择下一跳。
两行 cache_peer 并不意味着“先走第一个代理,再走第二个”。它们定义的是 Squid 可以选择的 peer。轮询请求可以在父代理之间交替,而从不经过两者。
串行路由分布在各个实例上:
client → A → B → C → origin
- A 选择 B 作为它的下一跳。
- B 选择 C。
- C 打开到源的连接。
每个接收方都必须授权它的直接下游 peer。如果禁止跳过下一跳,每个实例还需要一条兼容的直接访问策略。
在支持这些指令的版本上,cache_peer 定义 peer,cache_peer_access 限制选择,never_direct 禁止所选流量的直接转发。仅定义 peer 并不会建立另外两条策略中的任何一条。
在每个跳点上核实判断。A 选择 B 的日志不能证明 B 选择了 C。本地缓存命中可以完全避免新的上游连接,因此某次请求没有父代理流量,并不足以证明链路中断。