分类: 网络运维

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 。

Recent Posts

Docker 容器非 root 用户监听 80 端口

起因是基于 CentOS 的 …

2 年 之前

基于 Docker 定时打印文件

先说背景,喷墨打印机有个很大的…

3 年 之前

Java 运行时反射获取来自继承的泛型

背景 正常情况下 Java 的…

3 年 之前

Java 基于 ByteBuddy 重写系统当前时间

背景 一般单元测试时总会有些代…

3 年 之前

华硕 B450F-Gaming 主板 I211-AT 网卡驱动安装

事情起因是买了块华硕的 ROG…

3 年 之前

PHP 安装 Memcached 扩展

登录服务器挨步执行: # su…

4 年 之前