数据挖掘 / 电脑网络 · 2024年02月12号 0

Squid 配置多代理动态自动转发

引言

经常会有些需求依赖大量 IP 代理,当然可以在程序中显式进行代理池的管理测速等操作,但还有一种更合理的做法是将代理池合并成一个唯一入口,这就依赖今天的主角 squid 了。

Squid 是一个高性能的代理缓存服务器,支持 FTP、gopher、HTTPS 和 HTTP 协议。和一般的代理缓存软件不同,它用一个单独的、非模块化的、I/O驱动的进程来处理所有的客户端请求。

所以我们要做的就是配置好squid,把上层应用代理指向 127.0.0.1:3128 即可。
每次更新代理,只需要动态更新 squid 配置文件并重启。

安装部署

首先安装 squid:

yum install squid

然后创建一个squid配置模板:

cd /etc/squid
mv squid.conf.default squid.conf

每次拿到代理之后把代理设置成当前squid的 parent,在 squid.conf 里添加:

cache_peer 120.xx.xx.32 parent 80 0 no-query weighted-round-robin weight=2 connect-fail-limit=2 allow-miss max-conn=5 name=proxy-90

这一行的语法是这样的 cache_peer Web服务器地址 服务器类型 http端口 icp端口 [可选项], 可选项包括:

  1. proxy-only:指明从peer得到的数据在本地不进行缓存,缺省地,squid是要缓存这部分数据的;
  2. weight=n:用于你有多个peer的情况,这时如果多于一个以上的peer拥有你请求的数据时,squid通过计算每个peer的ICP响应时间来 决定其weight的值,然后squid向其中拥有最大weight的peer发出ICP请求。也即weight值越大,其优先级越高。当然你也可以手工 指定其weight值;
  3. no-query:不向该peer发送ICP请求。如果该peer不可用时,可以使用该选项;
  4. Default:有点象路由表中的缺省路由,该peer将被用作最后的尝试手段。当你只有一个父代理服务器并且其不支持ICP协议时,可以使用default和no-query选项让所有请求都发送到该父代理服务器;
  5. login=user:password:当你的父代理服务器要求用户认证时可以使用该选项来进行认证。

更新完成后保存重启squid,就会发现 squid 已经正常可用了。

All Done!

剩下的工作就是定时抓取代理然后更新重启 squid 了,ip 抓取可以采用 pyspier 。