假设某个合作方域名必须走指定的上游代理,而其他被允许的请求使用普通父代理。在 Squid 7 中,命名 peer 与 cache_peer_access 表达这条策略:

cache_peer partner-proxy.example parent 3128 0 no-query name=partner_parent
cache_peer general-proxy.example parent 3128 0 no-query name=general_parent

acl partner_domain dstdomain .partner.example

cache_peer_access partner_parent allow partner_domain
cache_peer_access partner_parent deny all

cache_peer_access general_parent deny partner_domain
cache_peer_access general_parent allow all

never_direct allow all

这是为现有的、带访问控制的转发代理准备的路由片段。如果独立的公网目标测试可以使用无需认证的公共父代理,请从 HTTP 代理列表中为那些未配置父代理凭据的地址挑选候选。合作方所需的正式生产路径仍是单独的访问安排。名称让每个父代理对其访问规则拥有明确身份。

对于匹配的目标,只有 partner_parent 保持可用。对于其他目标,只有 general_parent 保持可用。对每个独立 peer 而言,第一条匹配的规则决定该 peer 是否可用。

cache_peer_access 只是筛选候选,并不会把所有 peer 排成回退链。如果留下多个可用项,Squid 的 peer 选择算法会在其中挑选。

本示例中 never_direct 一行使父代理的使用成为强制。若所需的父代理不可用,不会以直连作为替代。请保留 http_access 中现有的客户端与目标权限;这些规则决定在选上游之前哪些请求被放行。

该配置使用有文档记载的 Squid 7 接口。参考资料标明 cache_peer_access 在 Squid 8 中不可用,因此在维护此设置时应使用与所部署版本对应的文档。

相关文章