经常会有些需求依赖大量 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端口 [可选项]
, 可选项包括:
更新完成后保存重启squid,就会发现 squid 已经正常可用了。
剩下的工作就是定时抓取代理然后更新重启 squid 了,ip 抓取可以采用 pyspier 。