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.

Ũhoro ũhĩtĩte