这里写目录标题

  • 代理
    • 代理服务器工作原理
    • 代理分类
      • 正向代理
      • 反向代理
      • 透明代理
      • 参考资料
  • Squid
    • 概念
    • 安装
    • 配置说明
      • 配置鉴权
      • 配置文件
      • 配置关键字含义
    • 访问控制
      • 初始化
  • 问题
    • TCP_MISS/503
  • 参考资料
    • 代理池
    • 配置文件更新程序
    • squid 官方手册
    • 参考示例

代理

代理服务器工作原理

代理服务器工作原理:

1、客户端 A 向代理服务器发出访问 Internet 的请求 。
2、代理服务器接受请求后,首先与访问控制列表中的访问规则相匹配,如果满足规则,则在缓存中查找是否有需要的资源信息。
3、如果缓存中存在客户端 A 的请求信息,那么将此信息返回给客户端 A ; 如果没有代理服务器将代替客户端去向 Internet 请求指定的信息。
4、Internet 上的主机将请求的信息发送到代理服务器,代理服务器会将信息存入缓存中。
5、代理服务器将 Internet 上主机的返回信息传给客户端 A 。
6、当客户端 B 也请求相同的信息时。
7、代理服务器也会接受请求后,与访问控制列表中的规则相匹配。
8、如果满足规则,代理服务器将会把缓存中的信息直接传给客户端 B 。

代理分类

  • 正向代理(控制内网访问互联网)

  • 反向代理(控制外网访问内网)

  • 透明代理(不加密的正向代理)

正向代理

代理内部主机上网,共享上网,缓存,控制内网用户上网行为等功能(客户端需要设置代理服务器的IP和代理端口)

正向代理分析图:外网|modem|路由器(dhcp,snat共享上网,上网行为控制,限速等)||squid正向代理(共享上网,静态页面缓存加速,内网用户四七层上网行为控制,限速等)||   |----------------------|上网用户一           上网用户二
            公网||   br0 172.16.13.250squid 服务器 virbr1   192.168.100.1          |||  内网用户VM1                 eth0(virbr1)            192.168.100.128

反向代理

从外部网络访问内部服务器,与正向方向相反,主要用于网站架构的缓存加速或CDN

            client||反向代理 (缓存加速,七层切分,负载均衡,会话保持等)|| web

透明代理

和正向代理的功能完全一致(客户端不需要设置代理服务器的IP和代理端口,对用户是透明的)

参考资料

https://www.cnblogs.com/yanjieli/p/7507456.html

Squid

概念

Squid 是一款缓存代理服务器软件,广泛用于网站的负载均衡架构中,常见的缓存服务器还有varnish、ATS等。

正向代理服务器可满足内网仅有一台服务器可以上网,而要供内网所有机器上网的需求,也可以用于爬虫的代理访问。在实践中我将Squid作为爬虫代理服务器,实现了多 IP 切换的功能。

安装

yum install -y squid

配置说明

配置鉴权

yum install httpd# 然后执行如下命令进行生成 用户名和密码,这里的示例为生成一个账号:hello
# 执行该命令之后,根据提示输入设置密码
htpasswd -c /etc/squid/passwd hello

配置文件

(/etd/squid/squid.conf)

acl all src 0.0.0.0/0.0.0.0     #允许所有IP访问
acl manager proto http        #manager url协议为http
acl localhost src 127.0.0.1/255.255.255.255 #允午本机IP
acl to_localhost dst 127.0.0.1         #允午目的地址为本机IP
acl CONNECT method CONNECT     #请求方法以CONNECT#http_access allow all         #允许所有人使用该代理.#http_reply_access allow all         #允许所有客户端使用该代理acl Safe_ports port 80     # 允许安全更新的端口为80
acl Safe_ports port 443    #允许安全更新的端口为443
acl localnet src 10.195.249.225   #
acl localnet src 10.195.236.141   #http_access allow localnet      #
http_access deny !Safe_ports      #acl OverConnLimit maxconn 16    #限制每个IP最大允许16个连接,防止攻击http_access deny OverConnLimiticp_access deny all             #禁止从邻居服务器缓冲内发送和接收ICP请求.
miss_access allow all         #允许直接更新请求
ident_lookup_access deny all                 #禁止lookup检查DNS
http_port 8080 transparent                 #指定Squid监听浏览器客户请求的端口号。hierarchy_stoplist cgi-bin ?         #用来强制某些特定的对象不被缓存,主要是处于安全的目的。acl QUERY urlpath_regex cgi-bin \?cache deny QUERYcache_mem 1 GB     #这是一个优化选项,增加该内存值有利于缓存。应该注意的是:​           \#一般来说如果系统有内存,设置该值为(n/)3M。现在是3G 所以这里1Gfqdncache_size 1024    #FQDN 高速缓存大小maximum_object_size_in_memory 2 MB     #允许最大的文件载入内存memory_replacement_policy heap LFUDA  #动态使用最小的,移出内存cachecache_replacement_policy heap LFUDA     #动态使用最小的,移出硬盘cachecache_dir ufs /home/cache 5000 32 512 #高速缓存目录 ufs 类型 使用的缓冲值最大允午1000MB空间,\#32个一级目录,512个二级目录max_open_disk_fds 0                 #允许最大打开文件数量,0 无限制minimum_object_size 1 KB             #允午最小文件请求体大小maximum_object_size 20 MB         #允午最大文件请求体大小cache_swap_low 90              #最小允许使用swap 90%cache_swap_high 95              #最多允许使用swap 95%ipcache_size 2048                # IP 地址高速缓存大小 2M
ipcache_low 90                #最小允许ipcache使用swap 90%
ipcache_high 95                 #最大允许ipcache使用swap 90%access_log /var/log/squid/access.log squid     #定义日志存放记录
cache_log /var/log/squid/cache.log squid
cache_store_log none             #禁止store日志emulate_httpd_log on     #将使Squid仿照Web服务器的格式创建访问记录。如果希望使用​                \#Web访问记录分析程序,就需要设置这个参数。refresh_pattern . 0 20% 4320 override-expire override-lastmod reload-into-ims ignore-reload  #更新cache规则acl buggy_server url_regex ^http://.... http://      #只允许http的请求broken_posts allow buggy_serveracl apache rep_header Server ^Apache         #允许apache的编码broken_vary_encoding allow apacherequest_entities off                     #禁止非http的标分准请求,防止攻击
header_access header allow all             #允许所有的http报头
relaxed_header_parser on                 #不严格分析http报头.
client_lifetime 120 minute                 #最大客户连接时间 120分钟
cache_mgr sky@test.com             #指定当缓冲出现问题时向缓冲管理者发送告警信息的地址信息。
cache_effective_user squid             #这里以用户squid的身份Squid服务器
cache_effective_group squidicp_port 0            #指定Squid从邻居服务器缓冲内发送和接收ICP请求的端口号。
​           \#这里设置为0是因为这里配置Squid为内部Web服务器的加速器,
​           \#所以不需要使用邻居服务器的缓冲。0是禁用\# cache_peer 设置允许更新缓存的主机,因是本机所以127.0.0.1cache_peer 127.0.0.1 parent 80 0 no-query default multicast-responder no-netdb-exchange
cache_peer_domain 127.0.0.1
hostname_aliases 127.0.0.1error_directory /usr/share/squid/errors/Simplify_Chinese     #定义错误路径always_direct allow all         # cache丢失或不存在是允许所有请求直接转发到原始服务器
ignore_unknown_nameservers on     #开反DNS查询,当域名地址不相同时候,禁止访问
coredump_dir  /var/log/squid         #定义dump的目录
max_filedesc 2048        #最大打开的文件描述half_closed_clients off     #使Squid在当read不再返回数据时立即关闭客户端的连接。​                \#有时read不再返回数据是由于某些客户关闭TCP的发送数据
​                \#而仍然保持接收数据。而Squid分辨不出TCP半关闭和完全关闭。

squid在做爬虫代理时候,我们只需要做到一个squid代理,然后对其他代理做转发轮询,如何使用squid做代理并

自动转发轮询?

加上这行代码:

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

注意,当120.xx.xx.32 是相同 但是端口不同的时候,必须设置不同的name,否则会报错cache_peer 120.xx.xx.32 specified twice 这时候及得设置不同的name。

配置关键字含义

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

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

访问控制

squid的acl(access control list)访问控制(下面列举一些常见的控制)acl denyip src  192.168.100.128/32   --拒绝内网的192.168.100.128/32上网
http_access deny denyipacl denyip src 192.168.100.128-192.168.100.132/255.255.255.255
http_access deny denyipacl vip  arp  00:0C:29:79:0C:1A
http_access allow  vip acl  baddsturl2  dst   220.11.22.33  --不能访问这个外网IP的网站
http_access deny baddsturl2acl  baddsturl  dstdomain -i  www.163.com  --不能访问www.163.com和WWW.163.COM;-i参数定义大小写都匹配;  但是可以访问war.163.com或sports.163.com
http_access deny baddsturlacl  baddsturl  dstdom_regex -i  163  --这是把163以下的所有域名都禁止  ,但直接使用IP仍然是可以访问的
http_access deny   baddsturlacl  baddsturl  dstdom_regex "/etc/squid/baddsturl"  --如果网址太多,可以写成一个文件,然后在这个文件里一行一个网站写上你要禁止的
http_access deny baddsturlacl baddsturl3  url_regex  -i  baidu   --拒绝访问url里有baidu这个关键字的网站
http_access deny baddsturl3acl badfile  urlpath_regex -i \.mp3$ \.rmvb$ \.exe$ \.zip$ \.mp4$ \.avi$  \.rar$
http_access deny badfile    --禁止下载带有定义后缀名的文件acl badipclient2  src 192.168.100.0/255.255.255.0
acl worktime time  MTWHF 9:00-17:00
http_access deny badipclient2 worktime  --拒绝192.168.100.0网段工作时间不能上网acl badipclient3  src 192.168.100.128
acl conn5  maxconn  5
http_access deny badipclient3 conn5 --最大连接数为5

https://www.cnblogs.com/wangxiaoqiangs/p/5796597.html

初始化

修改完配置文件之后保存,然后输入以下命令进行初始化 squidsquid -z

问题

TCP_MISS/503

发现日志中有如下的内容

1587003941.248      0 172.25.0.1 TCP_MISS/503 4362 GET http://gtj.hangzhou.gov.cn/col/col1363087/index.html - HIER_NONE/- text/html
1587003942.505      0 172.25.0.1 TCP_MISS/503 4362 GET http://gtj.hangzhou.gov.cn/col/col1363087/index.html - HIER_NONE/- text/html
1587003943.779    301 172.25.0.1 TCP_MISS/200 388 GET http://httpbin.org/ip - HIER_DIRECT/34.230.193.231 application/json
1587003943.899      0 172.25.0.1 TCP_MISS/503 4357 GET http://gtj.hangzhou.gov.cn/col/col1363087/index.html - HIER_NONE/- text/html
1587003945.333      0 172.25.0.1 TCP_MISS/503 4362 GET http://gtj.hangzhou.gov.cn/col/col1363087/index.html - HIER_NONE/- text/html

查看到一个关键字TCP_MISS/503

谷歌之,找到这篇文章:https://forums.freebsd.org/threads/34184/

解决:

原来是IPv6不支持,按照里面的提示,在/etc/squid/squid.conf里面配置一个dns_v4_first on

再次尝试的时候可以了!

如果还是不行的话,直接修改系统的配置

修改 /etc/sysconfig/network:
设置 NETWORKING_IPV6=no

(最好reboot重启一次)

参考资料

http://cn.linux.vbird.org/linux_server/0420squid.php#server_default

代理池

https://github.com/AaronJny/open_proxy_pool

配置文件更新程序

https://github.com/xNathan/squid_proxy_pool

上述项目的文档说明

https://xnathan.com/2017/03/01/squid-anony-proxy/

https://xnathan.com/2017/02/28/squid-proxy/

https://xnathan.com/2017/03/02/squid-proxy-pool/

squid 官方手册

​ http://zyan.cc/book/squid/index.html

参考示例

https://rookiefly.cn/detail/192

基于 Squid 实现爬虫代理服务相关推荐

  1. 如何搭建一个爬虫代理服务?

    微信搜索关注「水滴与银弹」公众号,第一时间获取优质技术干货.7年资深后端研发,用简单的方式把技术讲清楚. 由于之前一直在做爬虫采集相关的开发,这个过程那肯定少不了跟「代理 IP」打交道,这篇文章就来记 ...

  2. 基于golang的爬虫demo,爬取微博用户的粉丝和关注者信息

    基于golang的爬虫demo,爬取微博用户的粉丝和关注者信息 注意:仅供学习交流,任何非法使用与作者无关! 目录 基于golang的爬虫demo,爬取微博用户的粉丝和关注者信息 一.背景与取材 二. ...

  3. 基于 Node.js 爬虫的数据 API,搭建一套属于自己的 API 数据

    SpliderApi https://github.com/ecitlm/Spl... 基于nodejs 的爬虫 API接口项目,包括前端开发日报.知乎日报.前端top框架排行.妹纸福利.搞笑视频/ ...

  4. Squid代理服务器(透明代理服务配置、日志分析、反向代理、日志分析、ACL访问控制)

    目录 一.Squid 服务基础 (1)代理的工作机制 (2)代理的基本类型 二.安装 Squid 服务 (1)编译安装 Squid (2)修改 Squid 的配置文件 (3)Squid 的运行控制 ( ...

  5. 基于selenium的爬虫

    ~~~~~~~~~~ 爬虫在路上~~~~~~ 该爬虫用来实现指定关键词 以及特定时间区间的搜狗微信搜索_订阅号及文章内容的爬取.如果没有记错的话,未登录情况下,只能翻10页,想要更多,则需要基于sel ...

  6. 基于python网络爬虫的个性化音乐播放器

    前言 当前很多人在闲暇时喜欢听音乐,那么基于这种现象,我也是肝了几个小时完成了基于python的个性化音乐播放器,现在分享给你们. 开发组件 python3.5 以上版本就行 tkinter (pyt ...

  7. 基于Python Scrapy爬虫改进KNN算法的网站分类系统

    目 录 摘 要 I Abstract II 第 1 章 绪 论 1 1.1课题的研究背景和意义 1 1.1.1目前网站分类的研究情况 1 1.1.2现有解决方案的优点与不足 1 1.1.3基于特征熵值 ...

  8. 基于NodeJs的爬虫

    参考博客:手把手教你做爬虫-基于NodeJs 第一个nodejs爬虫:爬取豆瓣电影图片 引入模块 1.node 必须安装 2.http模块.fs模块都是内置的包,不需要额外添加 cheerio包,re ...

  9. 基于Scrapy分布式爬虫的开发与设计

    个人博客请访问http://blog.xhzyxed.cn 这个项目也是初窥python爬虫的一个项目,也是我的毕业设计,当时选题的时候,发现大多数人选择的都是网站类,实在是普通不过了,都是一些简单的 ...

最新文章

  1. java吵醒线程_一文搞懂 Java 线程中断
  2. mysql etc rc.local_CentOS 7 开机启动自定义配置文件:/etc/rc.local 不执行解决办法 | IT运维网...
  3. Yii的hasOne hasMany
  4. 苏州软件测试11k工资要什么水平,3个月从机械转行软件测试,他的入职薪资是11K...
  5. 智能录音笔完成全系列布局,科大讯飞还发了一款转写翻译智能耳机
  6. php读取/写入mssql乱码!(续...重要)
  7. if else if与if if语句的区别
  8. /etc/config/wireless解析
  9. DTcms-【知识点】-知识点缴获
  10. Excel函数IF的多条件通配使用方法
  11. 如何通过Android日历api插入日程(事件)和提醒(通知)
  12. 计算机寸出,电脑显示器长31cm宽23cm是多少寸?
  13. DC010的精华分享【首发速看】
  14. 【VINS论文翻译】VINS-Mono: A Robust and Versatile Monocular Visual-Inertial State Estimator
  15. 虎牙银豆竞猜每天竞猜种豆次数、每次种豆总额以及开盘次数、每次开盘金额详细说明
  16. java毕业生设计学校食堂订餐管理计算机源码+系统+mysql+调试部署+lw
  17. mysql %u_mysql 常用
  18. miRNA-Meta分析简介与实战
  19. python图像拼接_python numpy 和 opencv 图像拼接
  20. Unity文字冒险游戏项目实战

热门文章

  1. python递归,匿名函数
  2. 计算机软件资产代码,IT资产命名规则-2015
  3. E.Neko and Flashback
  4. 绝望爱の歌---最终兵器彼女
  5. 头歌 共享单车大数据项目数据分析
  6. 学生云服务器哪个好?阿里云,腾讯云,华为云,有适合学生党云服务器推荐吗?
  7. 一、量子信息基本概念
  8. 盘点10款超好用的数据可视化工具
  9. MongoDB面试问题
  10. 最好用的 20 款数据可视化工具