web缓存—Squid代理服务

 内容预知

 1.squid的相关知识

 1.1 squid的概念

1.2 squid代理的工作机制 

其主要作用有:

1.3 Squid 代理的类型 

 1.4 squid代理服务器和SNAT|DNAT的区别

 2.Squid 服务的安装和运行

 2.1 安装Squid服务

 2.2 修改 Squid 的配置文件

2.3 Squid 的运行控制 

2.4 创建 Squid 服务脚本,进行系统服务管理 

 3. 构建传统代理服务器(正向代理)

 实验设计

实验需求

 实验组件部署

1 配置代理服务器

 2、web服务器安装apache

3、客户机的代理配置,访问web服务器

 4、查看 Squid 访问日志的新增记录中的缓存命中情况

 4. 透明代理

实验需求 

实验组件 

具体实验操作 

 (1)suqid服务器的配置

(2)Web服务器配置

 (3)客户机配置,修改网关地址,浏览器不使用代理

 5.ACL访问控制

5.1 配置的运用 

 5.2 ACL访问控制的运用

(1)运用

(2)访问测试 

 6. 反向代理

6.1 反向代理工作机制 

6.2 构建 Squid 反向代理服务器 

 (1)squid代理服务器的配置

(2)两台web服务器的配置

(3)客户机的域名映射配置,进行访问验证 


 1.squid的相关知识

 1.1 squid的概念

Squid服务器缓存频繁要求网页、媒体文件和其它加速回答时间并减少带宽堵塞的内容。

Squid代理服务器(Squid proxy server)一般和原始文件一起安装在单独服务器而不是网络服务器上。Squid通过追踪网络中的对象运用起作用。Squid最初担当中介,仅仅是把客户要求传递到服务器并存储要求对象的拷贝。如果同一个客户或同一批客户在要求还在Squid缓存(cache)时要求相同的对象,Squid就可以立刻服务,加速下载并保存带宽。

从90年代早期开始,互联网服务供应商运用了Squid代理服务器(Squid proxy server)来提供更快的下载速度、缩短延迟时间,尤其是在提供丰富媒体和流式视频方面。网站经营者将频繁地把Squid代理服务器作为内容加速器、频繁查看内容的缓存和网络服务器的容位负载。内容发布网络和媒体公司采用Squid代理服务器并在整个网络中部署它们来改善浏览者要求编程的体验,特别是在流行内容的负载平衡(load balancing)和处理访问高峰。

Squid是免费提供的开源软件,可在免费软件基金会GUN同通用公共许可证下使用。Squid最开始设计在基于Unix的系统上运行,但是也能在Windows机上运行。

1.2 squid代理的工作机制 

代替客户机向网站请求数据,从而可以隐藏用户的真实IP地址。

将获得的网页数据(静态 Web 元素)保存到缓存中并发送给客户机,以便下次请求相同的数据时快速响应。

其主要作用有:

  • 资源获取: 代替客户端实现从原始服务器的资源获取;
  • 加速访问: 代理服务器可能离原始服务器更近,从而起到一定的加速作用;
  • 缓存作用: 代理服务器保存从原始服务器所获取的资源,从而实现客户端快速的获取;
  • 隐藏真实地址: 代理服务器代替客户端去获取原始服务器资源,从而隐藏客户端真实信息。

最基本的作用:提高web访问速度,隐藏客户机的真实IP地址。

1.3 Squid 代理的类型 

传统代理: 适用于Internet 正向代理,需在客户机指定代理服务器的地址和端口。

透明代理: 客户机不需指定代理服务器的地址和端口,而是通过默认路由、防火墙策略将Web访问重定向给代理服务器处理。

反向代理: 如果 Squid 反向代理服务器中缓存了该请求的资源,则将该请求的资源直接返回给客户端;否则反向代理服务器将向后台的 WEB 服务器请求资源,然后将请求的应答返回给客户端,同时也将该应答缓存在本地,供下一个请求者使用。

 1.4 squid代理服务器和SNAT|DNAT的区别

单单看数据转发的作用,很容易把squid代理服务器和SNAT|DNAT混为一谈,认为二则没有太大的区别,但实际上二则从本质上还是有很大的区别

主要区别SNAT和DNAT代理服务器模式
网络层次网络层应用层
工作流程局域网用户访问外网走snat模式,同一个数据包,改变数据包头部的来源地址,再把数据包发到internet。不改变数据包头信息,把数据包代理给internet的服务器,基于应用层的过滤。
作用内网用户上外网(SNAT)和内网服务发布到公网(DNAT)缓存页面,加速访问,ACL资源访问控制

 代理服务器遵循应用层的协议有:http、ftp、pop、smtp、p2p等

反向代理:

internet用户访问局域网服务器Squid做反向代理服务器,把用户的请求转发到后方的真实的服务器,可以做到负载均衡的效果,同时缓冲用户经常访问的页面提高访问速度

 2.Squid 服务的安装和运行

 2.1 安装Squid服务

 #安装环境依赖包
yum -y install gcc gcc-c++ make 
 #解压squid安装包
tar zxvf squid-3.5.28.tar.gz -C /opt/ 
 #切换到源码包目录,设置安装路径和安装模块
cd /opt/squid-3.5.28 

./configure --prefix=/usr/local/squid \
--sysconfdir=/etc \
--enable-arp-acl \
--enable-linux-netfilter \
--enable-linux-tproxy \
--enable-async-io=100 \
--enable-err-language="Simplify_Chinese" \
--enable-underscore \
--disable-poll \
--enable-epoll \
--enable-gnuregex
###################注释###############################
./configure --prefix=/usr/local/squid\      #指定安装目录路径
--sysconfdir=/etc \                         #指定配置文件路径
--enable-arp-acl \                          #MAC地址管控,防止客户端使用IP欺骗
--enable-linux-netfilter \                  #使用内核过滤
--enable-linux-tproxy \                     #支持透明模式
--enable-async-io=100 \                     #异步IO,提升存储性能。先写入缓存,再写入硬盘
--enable-err-language="Simplify_Chinese" \  #错误信息的显示语言
--enable-underscore \                       #允许URL中有下划线
--disable-poll \                            #关闭默认使用 poll 模式
--enable-epoll \        #开启epoll模式提升性能,epoll模式可以支持IO多路复制,异步非阻塞
--enable-gnuregex                           #使用GNU正则表达式
 ​
 ​
make -j2 && make install     #开2核编译安装
 ​
ln -s /usr/local/squid/sbin/* /usr/local/sbin/   #优化路径,使系统直接能够识别squid命令
useradd -M -s /sbin/nologin squid             #创建squid用户,不创建家目录,不可登录系统
chown -R squid:squid  /usr/local/squid/var/   #修改属主属组,此目录用于存放缓存文件

 

 2.2 修改 Squid 的配置文件

vim /etc/squid.conf


 --56行--插入
 http_access allow all    #放在 http_access deny all 之前,允许任意客户机使用代理服务,控制规则自上而下匹配
 http_access deny all
 http_port 3128           #用来指定代理服务监听的地址和端口(默认的端口号为 3128)
 --61行--插入
 cache_effective_user squid      #添加,指定程序用户,用来设置初始化、运行时缓存的账号,否则启动
 cache_effective_group squid     #添加,指定账号基本组
 coredump_dir /usr/local/squid/var/cache/squid     #指定缓存文件目录。默认有这一行,一般不做修

2.3 Squid 的运行控制 

 #检查配置文件语法是否正确
squid -k parse
 ​
 #启动 Squid,第一次启动 Squid 服务时,会自动初始化缓存目录
squid -z        #-z 选项用来初始化缓存目录
squid           #启动 squid 服务
 ​
netstat -anpt | grep "squid"    #查看是否启动成功

 

2.4 创建 Squid 服务脚本,进行系统服务管理 

 vim /etc/init.d/squid
 #!/bin/bash
 #chkconfig: 2345 90 25
 ​
 PID="/usr/local/squid/var/run/squid.pid"
 CONF="/etc/squid.conf"
 CMD="/usr/local/squid/sbin/squid"
 ​
 case "$1" in
    start)
      netstat -natp | grep squid &> /dev/null
      if [ $? -eq 0 ]
      then
        echo "squid is running"
      else
        echo "正在启动 squid..."
        $CMD
      fi
    ;;
    stop)
      $CMD -k kill &> /dev/null
      rm -rf $PID &> /dev/null      #kill命令杀死进程,不会删除PID文件,需要手动删除PID文件,不然下次启动会有问题
    ;;
    status)
      [ -f $PID ] &> /dev/null
         if [ $? -eq 0 ]
           then
             netstat -natp | grep squid
           else
             echo "squid is not running"
         fi
    ;;
    restart)
       $0 stop &> /dev/null
       echo "正在关闭 squid..."
       $0 start &> /dev/null
       echo "正在启动 squid..."
    ;;
    reload)
       $CMD -k reconfigure
    ;;
    check)
       $CMD -k parse
    ;;
    *)
       echo "用法:$0 {start|stop|status|reload|check|restart}"
    ;;
 esac
 ​
 #2345是默认自启动的运行级别,如是-代表任何运行级别都不自启动;90是启动优先级,25是停止优先级,优先级范围是0-100,数字越大,优先级越低。
 ​
 ​
chmod +x /etc/init.d/squid      #为脚本增加执行权限
chkconfig --add squid           #加入系统服务管理
chkconfig --list squid          #查看在哪些运行级别下自动启动

 3. 构建传统代理服务器(正向代理)

 实验设计

实验需求

搭建一个squid服务能够代替客户机进行对web服务器的资源缓存(该模式需要客户机手动添加代理服务器)

 实验组件部署

Squid代理服务器:192.168.73.110/24

web服务器:192.168.73.111/24

客户机:192.168.73.112/24

1 配置代理服务器

vim /etc/squid.conf
......
http_access allow all
http_access deny all
http_port 3128
cache_effective_user squid
cache_effective_group squid
 --63行--插入
cache_mem 1024 MB               
 #指定缓存功能所使用的内存空间大小,便于保持访问较频繁的WEB对象,容量最好为4的倍数,单位为MB,建议设为物理内存的1/4
reply_body_max_size 100 MB          
 #允许用户下载的最大文件大小,以字节为单位,当下载超过指定大小的Web对象时,浏览器的报错页面中会出现“请求或访问太大”的提示。默认设置0表示不进行限制,若不限制需要将此行注释掉。
maximum_object_size 100 MB          
 #允许保存到缓存空间的最大对象大小,以KB为单位,超过大小限制的文件将不被缓存,而是直接转发给用户。使用不多的大文件,则直接由web服务器响应,减少占用缓存服务器的空间
 ​
service squid restart   #重启squid服务
 ​
 #生产环境中还需要修改防火墙规则
iptables -F
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT    #允许tcp协议3128端口的流量通过
 ​

 2、web服务器安装apache

systemctl stop firewalld
setenforce 0
yum install -y httpd
systemctl start httpd
echo "<h1> this is a test1</h1>" > /var/www/html/index.html
 ​

3、客户机的代理配置,访问web服务器

 
 打开浏览器,工具-->Internet选项-->连接-->局域网设置-->开启代理服务器
 (地址:Squid服务器IP地址,端口:3128) 

 

 

 4、查看 Squid 访问日志的新增记录中的缓存命中情况

tail -f /usr/local/squid/var/logs/access.log
TCP_MISS/200      #表示未命中缓存       
TCP_MEM_HIT/200   #表示命中缓存
 ​

 

 5、查看 Web 访问日志的新增记录
tail -f /var/log/httpd/access_log
 在浏览器输入Web服务器IP地址访问,查看Web服务器访问日志,显示的是由代理服务器替客户机在访问。地址不是真实的客户端地址,而是代理服务器地址。

 

 4. 透明代理

实验需求 

透明代理的要求:

  • 要求代理服务器是网关服务器。
  • 网关服务器至少双网卡,开启路由转发功能。
  • 防火墙iptables/firewalld 设置重定向规则。

无需用户手动设置,代理服务器,当用户第二次开始访问与第一次相同的资源时,资源服务由代理服务器提供 

实验组件 

 squid代理服务器: ens33:192.168.73.110     ens36:12.0.0.254

web服务器:12.0.0.12/24

客户机:192.168.73.112

 

具体实验操作 

 (1)suqid服务器的配置

vim /etc/squid.conf       #编辑配置文件
 ......
 http_access allow all
 http_access deny all
 #--60行--修改添加提供内网服务的IP地址,和支持透明代理选项 transparent
 http_port 192.168.73.110:3128 transparent  
 #填写对接客户端网段的网卡地址,即内网卡地址。监听自己内网网卡的地址,并支持透明代理选项 transparent
 ​
systemctl restart squid    #重启squid服务
 ​
 #开启路由转发,实现本机中不同网段的地址转发
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
sysctl -p
 ​
 #修改防火墙规则,设置重定向规则
iptables -F
iptables -t nat -F
 #用于转发http协议。80端口重定向到3128端口,由代理服务器进行请求
iptables -t nat -A PREROUTING -i ens33 -s 192.168.73.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
 #用于转发https协议。443端口重定向到3128端口,由代理服务器进行请求
 iptables -t nat -A PREROUTING -i ens33 -s 192.168.73.0/24 -p tcp --dport 443 -j REDIRECT --to 3128
 #接受tcp协议的3128端口传入的数据
iptables -A INPUT -p tcp --dport 3128 -j ACCEPT  
 ​
 

 

 

 

(2)Web服务器配置

 

systemctl stop firewalld
setenforce 0
yum install -y httpd
systemctl start httpd
echo "this is test" > /var/www/html/index.html
 ​

 

 
(3)客户机配置,修改网关地址,浏览器不使用代理

 
 网关地址修改为代理服务器的内网网卡地址:192.168.73.110
 ​
 关闭客户机的浏览器之前设置的代理服务器的功能后,访问 http://12.0.0.12
 ​
 ​
 #查看 Squid 访问日志的新增记录
 tail -f /usr/local/squid/var/logs/access.log
 ​
#查看 Web 访问日志的新增记录,显示的是由代理服务器的外网口代替客户机在访问

tail -f /var/log/httpd/access_log

 

 5.ACL访问控制

在配置文件 squid.conf 中,ACL 访问控制通过以下两个步骤来实现:

(1)使用 acl 配置项定义需要控制的条件;

(2)通过 http_access 配置项对已定义的列表做“允许”或“拒绝”访问的控制。

定义访问列表的格式: 

 acl 列表名称 列表类型 列表内容 …

5.1 配置的运用 

1、编辑配置文件,定义控制访问列表
vim /etc/squid.conf
 ......
 acl localhost src 192.168.73.112/32              #客户机源地址为 192.168.73.112
 acl MYLAN src 192.168.73.0/24 12.0.0.0/24    #客户机网段
 acl destinationhost dst 12.0.0.12/32        #目标地址为 12.0.0.12
 acl MC20 maxconn 20                             #最大并发连接 20
 acl PORT port 21                                #目标端口 21
 acl DMBLOCK dstdomain .qq.com                   #目标域,匹配域内所有站点
 acl BURL url_regex -i ^rtsp:// ^emule://    #以 rtsp://、emule:// 开头的目标 URL地址,-i表示忽略大小写。匹配正则表达式
 acl PURL urlpath_regex -i .mp3$ .mp4$ .rmvb$     #以 .mp3、.mp4、.rmvb 结尾的目标 URL 路径
 acl WORKTIME time MTWHF 08:30-17:30              #时间为周一至周五 8:30~17:30,“MTWHF”为周一至周五的英文首字母
 ​
 http_access deny(或allow) destinationhost  #注意,如果是拒绝列表,需要放在http_access allow all前面
 ​
 ​
 2、重启服务
systemctl restart squid
 ​
 ​
 3、使用客户机192.168.73.112进行访问
 浏览器访问Web服务器 http://12.0.0.12,显示被访问被拒绝。
 ​
 ​
 ​
 ----------------- # 启动对象列表管理 #--------------
 #如果需要管理的地址很多,可以将多个地址先写在一个文件里
 ​
 #启动对象列表管理
 mkdir /etc/squid
 vim /etc/squid/dest.list    #写一个地址管理列表
 192.168.72.50
 192.168.1.0/24
 ​
 #编辑配置文件
 vim /etc/squid.conf        
 ......
 acl destinationhost dst "/etc/squid/dest.list"  #调用指定文件中的列表内容
 ......
 http_access deny(或allow) destinationhost  #注意,如果是拒绝列表,需要放在http_access allow all前面

 5.2 ACL访问控制的运用

(1)运用

 1、编辑配置文件,定义控制访问列表
 vim /etc/squid.conf
 ......
  25 acl CONNECT method CONNECT
  26 acl myhost src 192.168.73.112/32   #定义列表名称为myhost,源址为192.168.73.112
  27
  28 http_access deny myhost           #拒绝myhost列表中的地址进行访问
  #注意,拒绝列表需要放在http_access allow all前面
 ​
 ​
重启squid服务
systemctl restart squid
 ​
 ​

 

(2)访问测试 

使用客户机192.168.73.112进行访问
 浏览器访问Web服务器 http://12.0.0.12,显示被访问被拒绝。

 

 

其他地址访问:

 

 6. 反向代理

6.1 反向代理工作机制 

如果 Squid 反向代理服务器中缓存了该请求的资源,则将该请求的资源直接返回给客户端;否则反向代理服务器将向后台的 Web 服务器请求资源,然后将请求的应答返回给客户端,同时也将该应答缓存在本地,供下一个请求者使用。

静态内容/可缓存内容,如果已写入缓存,由缓存服务器提供。动态内容,由代理服务器转发给web服务器进行请求。

工作机制:

  • 缓存网页对象,减少重复请求。
  • 将互联网请求轮训或按权重分配到内网Web服务器。
  • 代理用户请求,避免用户直接访问Web服务器,提高安全。

6.2 构建 Squid 反向代理服务器 

squid服务器:192.168.73.110/24 

web1服务器:192.168.73.111/24

web2服务器:192.168.73.112/24

客户机:192.168.73.113/24

 (1)squid代理服务器的配置

 vim /etc/squid.conf
 ......
 #--60行--修改,插入以下几行
 http_port 192.168.73.110:80 accel vhost vport
 cache_peer 192.168.73.111 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web1
 cache_peer 192.168.73.112 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web2
 cache_peer_domain web1 web2 www.yang.com
 #表示对www.yang.com的请求,由squid向192.168.73.111和192.168.73.112的80端口发出请求
 ​
 ---------------- 虚线内是注释 ----------------------------------------------------------------------------------------
 http_port 80 accel vhost vport 
 ##squid从一个缓存变成了一个Web服务器反向代理加速模式,这个时候squid在80端口监听请求,同时和web server的请求端口(vhost vport)绑定,这个时候请求到了squid,squid是不用转发请求的,而是直接要么从缓存中拿数据、要么向绑定的端口直接请求数据。
 accel :反向代理加速模式。
 vhost :支持域名或主机名来表示代理节点。
 vport :支持IP和端口来表示代理节点。
 ​
 parent :代表为父节点,上下关系,非平级关系。
 80 :代理内部web服务器的80端口。
 0 :没有使用icp(电信运营商),表示就一台squid服务器。
 no-query :不做查询操作,直接获取数据。
 originserver :指定是源服务器。
 round-robin :指定 squid 通过轮询方式将请求分发到其中一台父节点。
 max_conn :指定最大连接数。
 weight : 指定权重。
 name :设置别名。
 ----------------------------------------------------------------------------------------------------------
 ​
 ​
 #清空之前透明模式配置的 iptables 规则
iptables -F
iptables -t nat -F
 ​
 ​
 netstat -natp | grep :80   #检查一下80端口是否被占用,如果被占用,需要关闭httpd
systemctl stop httpd       #防止 httpd 服务使用的 80 端口号和 squid 反向代理配置的监听端口冲突
 systemctl restart squid    #重启squid服务

 

 

(2)两台web服务器的配置

 systemctl stop firewalld
 setenforce 0
 yum install -y httpd
 systemctl start httpd
 ​
 #web1:
 echo "this is test1" > /var/www/html/index.html
 #web2:
 echo "this is test2" > /var/www/html/index.html
 echo "this web2 test" > /var/www/html/test.html


(3)客户机的域名映射配置,进行访问验证 

windows系统,修改 C:\Windows\System32\drivers\etc\hosts 文件
 192.168.73.110 www.yang.com
 ​
 Linux系统,修改/etc/hosts文件,添加映射关系
 echo "192.168.73.110 www.yang.com" >>/etc/hosts  #squid服务器地址
 ​
 浏览器不开启代理访问 
 http://www.yang.com
 http://www.yang.com/test.html

 

 

 

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值