Squid

Squid

什么是squid?

Squid是一个高性能的代理缓存服务器。它是这样实现其功能的,接受来自人们需要访问的目标(object)的请求并适当地处理这些请求。也就是说,如果一个人想访问一web页面,请求Squid为它取得这个页面。Squid随之连接到远程服务器,并向这个页面发出请求。然后,Squid聚集数据到客户端机器,而且同时复制一份。当下一次有人需要同一页面时,Squid可以简单地从磁盘中读到它,那样数据迅即就会传输到客户机上。当前的Squid可以处理HTTP,FTP,SSL、GOPHER和WAIS等协议。

Squid的工作类型

传统代理–正向代理

默认使用的方案
在这里插入图片描述

举例说明:如果一个公司不能上外网,大家都是使用内网工作。但是为了工作需要,公司为研发部门配置了一台能够上外网的电脑,这样大家为了上外网,就会争抢这台电脑。但是有的人就想方设法把自己的电脑也得鼓捣的能连接外网,就是通过能那台连接外网的的电脑,连接外网(伪装成通外网的电脑上网),这种场景就是传统代理 /正向代理。

实验演示
环境准备

客户端:192.168.4.116 网段1

正向代理服务器:192.168.4.113/192.168.100.113 网段1+网段2(两块网卡)

服务端:192.168.100.115 网段2

客户端
route add default gw 192.168.4.113  #设置默认网关
vim /etc/profile
export HTTP_PROXY=HTTP://192.168.4.113:3128  #增加代理
. /etc/profile  #刷新环境变量
yum -y install elinks  #安装浏览器
正向代理服务器
yum install -y squid  #安装squid
vim /etc/squid/squid.conf  #修改配置文件
http_port 3128
visible_hostname www.atguigu.com

service squid start  #开启squid

vim /etc/sysctl.conf 
net.ipv4.ip_forward = 1  #开启内核转发
服务端
yum install -y httpd  #咱Apache
service httpd start  #开启
echo "HelloWorld" > /var/www/html/index.html
测试
elinks 192.168.100.115  #客户端访问服务端
HelloWorld   #访问结果

透明代理

在这里插入图片描述

客户端根本不需要知道有代理服务器的存在,其实也属于传统代理的一种,不同的是传统代理需要在客户端设置代理的IP和PORT,透明代理则是当该请求包通过透明代理服务器时,被防火墙将该数据包重定向到代理服务器的绑定端口3128,代理服务器使用某一端口,向web服务器请求数据,收到数据后,返回给客户端,自己缓存一份。

实验演示
环境准备

客户端:192.168.4.116 网段1

正向代理服务器:192.168.4.113/192.168.100.113 网段1+网段2(两块网卡)

服务端:192.168.100.115 网段2

客户端
route add default gw 192.168.4.113  #设置默认网关
yum -y install elinks  #安装浏览器
代理服务器端
yum install -y squid  #安装squid
vim /etc/squid/squid.conf  #修改配置文件
http_port 192.168.4.113:3128 transparent
visible_hostname www.atguigu.com

service squid start  #开启squid

vim /etc/sysctl.conf 
net.ipv4.ip_forward = 1  #开启内核转发

service iptables start 
iptables -F #清除规则
iptables -t nat -A PREROUTING -i eth0 -s 192.168.4.0/24 -p tcp --dport 80 -j REDIRECT --to-ports 3128  #设置防火墙规则,使经过代理服务器访问服务器的地址重定向到代理服务器的3128端口
iptables -t nat -L #查看设置的规则
客户端
yum install -y httpd  #咱Apache
service httpd start  #开启
echo "HelloWorld" > /var/www/html/index.html
测试
elinks 192.168.100.115  #客户端访问服务端
HelloWorld   #访问结果

反向代理

在这里插入图片描述

反向代理是相对正向代理而言,是代理web服务器接受客户端的请求。客户端向web服务器发送请求,客户端本地的DNS服务器会将客户请求的域名,解析成Squid服务器IP,然后客户端发送,IP请求,请求到达反向代理服务器,反向代理服务器查询自己是否有客户请求的资源,如果有,直接发送给客户端,如果没有则通过内部DNS轮询的方式向真实服务器发送请求,得到客户端所需要的数据,然后发送给客户端,自己则保留一份。

支持同类型的服务器相互同步,只支持rr算法

实验展示
环境准备

客户端:192.168.4.116 网段1

反向代理服务器:192.168.4.113/192.168.100.113 网段1+网段2(两块网卡)

服务端:192.168.100.115 网段2

​ 192.168.100.112 网段2

客户端
route add default gw 192.168.4.113  #设置默认网关
yum -y install elinks  #安装浏览器
反向代理服务器端
yum install -y squid
vim /etc/samba/smb.conf
acl localnet src 192.168.100.0/24	#acl访问控制列表,localnet:控制列表的名称,src:允许访问的源地址:192.168.100.0/24  
http_port 192.168.4.113:80 vhost  #指定本机的公网IP和PORT vhost:虚拟主机
cache_dir ufs /var/spool/squid 100 16 256  #将注释打开
visible_hostname www.atguigu.com  #本机的hostname
cache_peer 192.168.100.115 parent 80 0 originserver round-robin  #真实服务器
cache_peer 192.168.100.112 parent 80 0 originserver round-robin  #真实服务器
#需要注意的是:真实服务器只支持rr轮询,
服务端
节点1:192.168.100.115
yum install -y httpd
service heepd start 
echo "192.168.100.115-1" > /var/www/html/1.html
echo "192.168.100.115-2" > /var/www/html/2.html
节点2:192.168.100.112
yum install -y httpd
service heepd start 
echo "192.168.100.112-1" > /var/www/html/1.html
echo "192.168.100.112-2" > /var/www/html/2.html
客户端测试
curl 192.168.4.113/1.html
192.168.100.115-1
curl 192.168.4.113/1.html
192.168.100.112-2

Squid软件信息

软件包:squid-3.xxxx

系统服务:squid

主程序:/usr/sbin/squid

主配置文件:/etc/squid/squid.conf

默认端口:TCP 3128

默认访问日志:/var/log/squid/access.log

配置文件

vim /etc/squid/squid.conf
#端口使用方式
http_port 3128  # 监听端口
http_port 本机公网ip:真实服务器端口 vhost  #CDN缓存服务器的时候使用

access_log /var/log/squid/access.log squid  # 访问日志及日志属主
cache_mem 64 MB  # squid进程能够使用的最大内存大小
cache_dir ufs /var/spool/squid 100 16 256  # cache_dir:缓存目录,ufs:Unix File Systemc使用的文件系统,/var/spool/squid:缓存路径,100:squid使用的最大值,16:一级目录的数量(最多),256:二级目录的数量(最多),加快索引速度--hash tables  digest tables
visible_hostname proxy.benet.com  # 指定当前可用的主机名
dns_testnames www.google.com www.163.com  # 自我检测(能否上网)
cache_peer 192.168.100.115 parent 80 0 originserver round-robin  #做CDN缓存服务器时指定的真实服务器,192.168.100.115(真实服务器IP),parent(上游服务器),80(真实服务器端口),0(代表周围有没有squid服务器,有写端口自己去寻找,没有写0),originserver(代表一个子节点),round-robin(rr轮询,没有其他算法)
maximum_object_size 4096 KB  # 允许缓存资源的最大值
reply_body_max_size  10 MB  # 允许请求的资源的最大值

ACL(Access Control List)访问控制列表

顾名思义,就是控制访问对象的,控制访问的类别也是非常多的,具体如下表所示:

src源地址、网段,IP地址范围192.168.4.0/24 192.168.5.115
dst目标地址、网段,主机名server
port目标端口21 443 80
dstdomain目标域
time访问时间,星期一到星期天分别为:M T W H F A S
maxconn最大并发连接
url_regex目标URL地址www.baidu.com
Urlpath_regex整个目标URL路径http://www.baidu.com/1.jpeg

格式:acl 列表名称 列表类型 列表内容

acl localnet src 10.0.0.0/8  #localnet:这条权限的名称,src:源地址控制,10.0.0.0/8:控制的网段,也就是说访问地址是10.网段的才能够进行访问
acl Safe_ports port 80  #Safe_port:这条权限的名称,port:对目标端口访问的限制,80:只允许80被访问,也就是说,只能访问本机的80端口

针对已定义的acl列表进行放行/拒绝

格式:http_access allow/deny 列表名称(定义的ACL规则的名称)

acl ll src 192.168.100.0/24  #定义一条acl权限
http_access allow ll  #放行定义的名称为ll的这条规则
http_access deny all  #这条规则一定要在所有的http_access规则的最后,否则定义的http_access规则不生效

注意:1.如果只定义了acl访问的权限,不加http_access是否放行,默认拒绝

​ 2. 在加http_access放行规则,一定要写在“http_access deny all”这条规则的上方,否则不生效。

​ 3.当“http_access deny all”这条规则被注释掉时并且定义了acl范围却不做http_access的规则,或者定义的规则找不到范围,那么当前acl范围,会以最后一行的http_access做反向操作,即如果设置的是allow,则访问拒绝;如果设置的是deny,则允许访问。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值