Multiple Squid Parents Are Alternatives, Not a Serial Chain
A peer list gives Squid choices. A serial A-to-B-to-C route needs the next hop selected at each forwarding instance.
Two cache_peer lines do not mean “visit the first proxy, then the second.” They define peers Squid can select. Round-robin requests can alternate between parents without ever passing through both.
A serial route is distributed across the instances:
client → A → B → C → origin
- A selects B as its next hop.
- B selects C.
- C opens the origin connection.
Each receiver must authorize its immediate downstream peer. Each instance also needs a compatible direct-access policy if skipping its next hop is forbidden.
On versions supporting them, cache_peer defines a peer, cache_peer_access limits selection and never_direct prohibits direct forwarding for selected traffic. Peer definition alone does not establish either of the other policies.
Verify the decision at each hop. A's log selecting B cannot prove that B selected C. A local cache hit can avoid a new upstream connection altogether, so no parent traffic for one request is not sufficient evidence of a broken chain.