缓存加速----Squid传统代理&透明代理

前言

一:Squid代理服务概述

1.1:概述

  • Squid是一个高性能的代理缓存服务器,Squid支持FTP、gopher、HTTPS和HTTP协议。和一般的代理缓存软件不同,Squid用一个单独的、非模块化的、I/O驱动的进程来处理所有的客户端请求。

1.2:工作机制

  • mark

  • 缓存网页对象,减少重复请求

  • 它是这样实现其功能的,接受来自人们需要下载的目标(object)的请求并适当地处理这些请求

  • 也就是说,如果一个人想下载一web页面,他请求Squid为他取得这个页面。Squid随之连接到远程服务器(比如:http://squid.nlanr.net/)并向这个页面发出请求

  • 然后,Squid显式地聚集数据到客户端机器,而且同时复制一份。当下一次有人需要同一页面时,Squid可以简单地从磁盘中读到它,那样数据迅即就会传输到客户机上。

1.3:Squid基本类型

  • 传统代理
    • 普通的代理服务,适用于Internet,需明确指定服务端
  • 透明代理
    • 客户机不需要指定代理服务器的地址和端口,是通过默认路由,防火墙将web重定向给代理
  • 使用代理可以提高web的访问速度,同时可以隐藏客户机的真实IP地址,从而起到一定的保护作用
  • 另一方面,squid也可以针对要访问的目标、客户机的地址、访问的时间段进行过滤控制。

二:环境

  • VMware软件
  • 一台centos7虚拟机作为squid服务器,IP地址为:192.168.100.140
  • 一台centos7虚拟机作为web服务器,IP地址为:192.168.100.150
  • 一台win10虚拟机作为client测试机,IP地址为:192.168.100.10

三:传统代理试验过程

  • Squid服务器配置

    1.解压squid软件包
    monut.cifs //192.168.1.150/qq-Download /mnt
    cd /mnt
    tar xzvf squid-3.4.6.tar.gz -C /opt
    2.安装相关软件包
    yum install gcc gcc-c++ make -y
    3.配置服务模块,编译安装
    cd /opt/suqid-3.4.6/
    ./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 \
    --enable-poll \
    --enable-gnuregex
     
    make && make install
    4.创建软链接,优化服务控制方式
    ln -s /usr/local/squid/sbin/squid /usr/local/sbin/
    5.创建squid用户
    useradd -M -s /sbin/nologin squid
    6.修改squid中的var的属性
    chowm -R squid.squid /usr/local/squid/var/
    7.编辑squid的配置文件
    vim /etc/squid.conf
     
     55 # And finally deny all other access to this proxy
     56 http_access allow all
     57 http_access deny all        //允许所有用户访问
     58 
     59 # Squid normally listens to port 3128
     60 http_port 3128   
     61 cache_mem 64 MB  //指定缓存功能所使用的内存空间大小
     62 reply_body_max_size 10 MB    //允许用户下载的最大文件大小
     63 maximum_object_size 4096 KB    //允许保存到缓存空间的最大对象大小
     64 cache_effective_user squid    //添加指定程序用户
     65 cache_effective_group squid    //添加指定账户基本组
     66 
     67 # Uncomment and adjust the following to add a disk cache directory.
     68 #cache_dir ufs /usr/local/squid/var/cache/squid 100 16 256
     
    8.编辑防火墙规则
    iptables -F    //清除所有规则
    iptables -I INPUT -p tcp --dport 3128 -j ACCEPT //允许目标端口3128做转发
     
    9.检查语法并且开启服务
    squid -k parse    //检查配置文件语法
    squid -z          //初始化缓存目录
    squid             //启动服务
    [root@squid ~]# netstat -natp | grep squid
    tcp6       0      0 :::3128                 :::*                    LISTEN      36414/(squid-1)     
    [root@squid ~]# 
     
    10.编辑脚本,优化服务控制方式(service 工具)
    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...."
            echo "成功启动"
            $CMD
            fi
            ;;
    stop)
            $CMD -k kill &> /dev/null
            rm -rf $PID &> /dev/null
            ;;
    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..."
               echo "关闭成功"
              $0 start &> /dev/null
               echo "正在启动 squid..."
               echo "启动成功"
              ;;
    reload)
              $CMD -k reconfigure
              ;;
    check)
              $CMD -k parse
            ;;
            *)
                echo "用法:$0{start|stop|status|reload|check|restart}"
            ;;
    esac
     
    chmod +x /etc/init.d/squid   //添加服务执行权限 
    chkconfig --add squid    //添加到service的服务列表
    chkconfig --level 35 squid on    //开机自启
    [root@localhost ~]# service squid restart
    正在关闭 squid...
    关闭成功
    正在启动 squid...
    启动成功
    [root@localhost ~]#
    
  • Web服务器配置

    [root@apache ~]# yum install httpd -y
    [root@apache ~]# systemctl stop firewalld.service 
    [root@apache ~]# setenforce 0
    [root@apache ~]# systemctl start httpd.service 
    [root@apache ~]# netstat -natp | grep 80
    
  • 客户机Win10的配置

    配置地址192.168.100.10 网关192.168.100.2

    mark

  • 浏览器访问Web服务器测试

    mark

    这里看不出来,到底是代理访问的Apache还是客户端访问的,我们要看Apache的日志

    [root@apache ~]# cat /var/log/httpd/access_log
    

    mark

    日志显示是代理来访问的Web服务器

    那么问题来了,客户机要选择代理,若是客户不会操作的,由此,产生Squid透明模式,下文介绍如何搭建

四:透明代理实验过程

  • 网络拓扑图

    mark

  • 实验环境

    类别IP地址系统软件包
    squid服务器ens33:192.168.100.140/24;ens36:192.168.10.1/24centos7squid-3.4.6.tar.gz
    web服务器192.168.100.150centos7
    客户机192.168.10.10win10
  • 配置squid服务器

    1.配置网卡
    ens33为NAT模式
    ens36为仅主机模式
    cd /etc/sysconfig/network-scripts/
    cp -p ifcfg-ens33 ifcfg-ens36
    vim ifcfg-ens36
    TYPE="Ethernet"
    PROXY_METHOD="none"
    BROWSER_ONLY="no"
    BOOTPROTO="none"
    DEFROUTE="yes"
    IPV4_FAILURE_FATAL="no"
    IPV6INIT="yes"
    IPV6_AUTOCONF="yes"
    IPV6_DEFROUTE="yes"
    IPV6_FAILURE_FATAL="no"
    IPV6_ADDR_GEN_MODE="stable-privacy"
    NAME="ens36"
    DEVICE="ens36"
    ONBOOT="yes"
    IPADDR="192.168.10.1"       '这个地址是客户机的网关'
    PREFIX="24"
    IPV6_PRIVACY="no"
    ~                  
    service network restart 
     
    [root@squid network-scripts]# ifconfig
    ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.100.140  netmask 255.255.255.0  broadcast 192.168.100.255
            inet6 fe80::7264:7578:de4e:190  prefixlen 64  scopeid 0x20<link>
            ether 00:0c:29:17:9c:75  txqueuelen 1000  (Ethernet)
            RX packets 96630  bytes 110402508 (105.2 MiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 94922  bytes 172796714 (164.7 MiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    ens36: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.10.1  netmask 255.255.255.0  broadcast 192.168.10.255
    ......
     
    [root@squid ~]# 
     
    2.配置路由转发功能
    vim /etc/sysctl.conf
    net.ipv4.ip_forward=1
    sysctl -p  '使其生效'
     
    3.配置squid文件
    vim /etc/squid.conf
     59 # Squid normally listens to port 3128
     60 http_port 192.168.10.1:3128 transparent      配置网卡网关地址及端口
     
    service squid restart
    4.添加防火墙规则
    iptables -F    //清空规则
    iptables -t nat -F
    iptables -t nat -I PREROUTING -i ens36 -s 192.168.10.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
    iptables -t nat -I PREROUTING -i ens36 -s 192.168.10.0/24 -p tcp --dport 443 -j REDIRECT --to 3128
    iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
    
  • 配置web服务器

    yum install httpd -y
    route add -net 192.168.10.0/24 gw 192.168.100.140     //添加静态路由   下一跳
    systemctl stop firewalld.service 
    setenforce 0
    
  • 配置客户端,虚拟机处于仅主机模式

    mark

    mark

  • 验证服务配置

    mark

    查看Web服务日志

    mark

    注意: 在web服务器中,添加到路由表的静态路由有时间限制

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值