Squid如何基于请求URL域名选择不同cache_peer父代理
可以实现,你可以通过Squid的ACL规则 + cache_peer绑定配置完成按目标主机名选择父代理的需求,具体配置方案如下:
完整配置步骤
1. 定义父代理节点
首先在Squid配置文件(通常为/etc/squid/squid.conf)中添加你需要用到的父代理配置:
# proxy1配置:父代理类型、HTTP端口3128(按需修改为实际端口)、禁用ICP查询适配固定转发场景 cache_peer proxy1.host parent 3128 0 no-query no-digest # proxy2配置 cache_peer proxy2.host parent 3128 0 no-query no-digest
如果父代理需要身份认证,在对应行末尾添加login=你的账号:你的密码参数即可;如果需要通过HTTPS协议连接父代理,额外添加ssl参数。
2. 定义匹配目标域名的ACL规则
新增ACL规则匹配你需要分流的域名,dstdomain前加.代表通配该域名的所有子域名(含根域名本身),完全符合*.example.com的匹配需求:
# 匹配所有*.example1.com的请求 acl target_example1 dstdomain .example1.com # 匹配所有*.example2.com、*.example3.com的请求 acl target_example23 dstdomain .example2.com .example3.com
3. 绑定ACL规则与对应父代理
通过cache_peer_domain指令完成分流绑定:
# 匹配example1规则的请求走proxy1 cache_peer_domain proxy1.host target_example1 # 匹配example2/3规则的请求走proxy2 cache_peer_domain proxy2.host target_example23
如果除上述域名外,其他请求需要直接访问公网不经过父代理,添加如下兜底规则:
always_direct allow !target_example1 !target_example23
如果其他请求需要走默认父代理,补充对应的ACL和绑定规则即可。
4. 配置生效
配置完成后先执行squid -k parse校验语法是否存在错误,无报错后执行squid -k reconfigure加载新配置即可生效。
注意事项
- Squid 3.5及以上版本无需额外配置SSL Bump,即可正常识别HTTPS请求的SNI主机名,上述规则对HTTP、HTTPS请求同时生效
- 如果需要更复杂的分流逻辑(比如按源IP、URL路径匹配),替换上述ACL的
dstdomain为对应匹配类型即可
内容的提问来源于stack exchange,提问作者xtremebytes
相关产品推荐
相关产品推荐

