squid缓存代理

如何提高网站访问速度?

1)前端(优化)

2)提供网站带宽(1000M)、上行、下行对等,一般公司双线介入

3)缓存

浏览器缓存(浏览器会缓存常使用数据,缓存到客户端硬盘)

服务器缓存

网络优化:CDN技术

一、服务器缓存(代理)

1.分类

1)正向代理:部署在企业内部,实现企业内部客户端访问公网加速(ACL、缓存)

  传统代理:需在客户端指向正向代理服务器的IP及端口,方可正常使用

  透明代理:将正向代理服务器作为网关,客户端只需指明网关地址即可

2)反向代理:部署在企业内部,实现公网客户端访问内部服务器加速


2.缓存方式

1)硬盘:速度慢、缓存时间长

2)内存:速度快、重启后缓存丢失


二、Squid

  基于硬盘的缓存方式,支持正向及反向两种代理

1、代理的工作机制

1)Squid服务器中有缓存

  当客户机通过代理来请求Web页面时,指定的代理服务器会先检查自己的缓存,如果缓存中已经有客户机需要的页面,则直接将缓存中的页面内容反馈给客户机


2)Squid服务器中没有缓存

  如果缓存中没有客户机要访问的页面,则由代理服务器向Internet发送访问请求,当获得返回的Web页面以后,将网页数据保存到缓存中并发送给客户机


  HTTP代理的缓存加速对象主要是文字、图像等静态Web元素,使用缓存机制后,当客户机在不同的时候访问同一Web元素,或者不同的客户机访问相同的Web元素时,可以直接从代理服务器的缓存中获得结果。这样就大大减少了向Internet提交重复的Web请求的过程,提高了客户机的Web访问响应速度

  由于客户机的Web访问请求实际上是由代理服务器来代替完成的,从而可以隐藏用户的真实IP地址,起到一定的保护作用。另一方面,代理服务器担任着类似“经纪人”的角色,所以有机会针对要访问的目标、客户机的地址、访问的时间段等进行过滤控制


正向代理(传统代理)

  环境准备:两台,一台linu作为squid代理及网关(两块网卡,第一块vmnet1、第二块桥接),另一台windows客户端(vmnet1)


#部署gateway

1.IP配置

1)rm -rf /etc/udev/rules.d/70-persistent-net.rules

2)vim /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=static
IPADDR=192.168.1.1
NETMASK=255.255.255.0

3)reboot

4)cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth1

DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=dhcp

5)/etc/init.d/network restart


2.开启路由功能

1)vim /etc/sysctl.conf

  net.ipv4.ip_forward = 1

2)sysctl -p

3)iptables -t nat -I POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source 192.168.13.206


#部署squid

1.编译安装Squid

    配置Squid的编译选项时,将安装目录设为/usr/local/squid,其他具体选项根据实际需求来定,配置前可参考“./configure  --help”给出的说明

1)tar -zxvf squid-3.4.6.tar.gz -C /usr/src/

2)cd /usr/src/squid-3.4.6/

3)./configure --prefix=/usr/local/squid --sysconfdir=/etc/ --enable-linux-netfilter --enable-arp-acl --enable-linux-tproxy --enable-async-io=100 --enable-err-language="Simplify_Chinese" --enable-underscore --enable-poll


选项详解

--prefix=/usr/local/squid           #安装目录
--sysconfdir=/etc/                  #单独将配置文件修改到其他目录
--enable-arp-acl                    #可以在规则中设置直接通过客户端MAC进行管理,防止客户端使用IP欺骗
--enable-linux-netfilter              #使用内核过滤
--enable-linux-tproxy                #支持透明模式
--enable-async-io=值                  #异步I/O,提升存储性能
--enable-err-language="Simplify_Chinese" #错误信息的显示语言
--enable-underscore                    #允许URL中有下划线
--enable-poll                         #使用Poll()模式,提升性能
--enable-gnuregex                      #使用GNU正则表达式--enable-gnuregex

4)make && make install

5)echo "PATH=$PATH:/usr/local/squid/sbin" >>/etc/profile && source /etc/profile

6)useradd -M -s /sbin/nologin squid

7)chown -R squid:squid /usr/local/squid/var/


2.更改配置

1)vim /etc/squid.conf

 56 http_access allow all   #允许所有访问
 61 cache_effective_user squid   #指定运行用户
 62 cache_effective_group squid   #指定运行组
 63 visible_hostname xueluo.org   #指定当前主机名
 65 cache_dir ufs /usr/local/squid/var/cache/squid 100 16 256 #启用缓存
 68 #coredump_dir /usr/local/squid/var/cache/squid  #注释改行
2)squid -k parse #检测配置文件(/etc/squid.conf)是否有问题

3)squid -z  #创建缓存目录


3.启动服务

1)vim /etc/init.d/squid

#!/bin/bash
# chkconfig: 2345 90 25
# config: /etc/squid.conf
# pidfile: /usr/local/squid/var/run/squid.pid
# Description: Squid - Internet Object Cache

PID="/usr/local/squid/var/run/squid.pid"
CONF="/etc/squid.conf"
CMD="/usr/local/squid/sbin/squid"

case "$1" in
    start)
        netstat -utpln | grep squid &>/dev/null
        if [ $? -eq 0 ]
            then
                echo "Squid is running"
            else
            $CMD
        fi
        ;;
    stop)
        $CMD -k kill &>/dev/null
        rm -rf $PID &>/dev/null
        ;;
    status)
        [ -f $PID ] &>/dev/null
        if [ $? -eq 0 ]
            then
                netstat -utpln | 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 "用法:{ start | stop | restart | reload | check | status}"
        ;;
esac

2)chmod +x /etc/init.d/squid

3)chkconfig --add squid

4)/etc/init.d/squid start

5)netstat -utpln | grep 3128


4.验证

  IE-->代理服务器(192.168.1.1 3128) --> 119.75.213.61

1)tail -f /usr/local/squid/var/logs/access.log

正向代理(透明代理)

  环境准备:两台,一台linu作为squid代理及网关(两块网卡,第一块vmnet1、第二块桥接),另一台windows客户端(vmnet1)


#部署gateway

1.IP配置

1)rm -rf /etc/udev/rules.d/70-persistent-net.rules

2)vim /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=static
IPADDR=192.168.1.1
NETMASK=255.255.255.0

3)reboot

4)cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth1

DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=dhcp

5)/etc/init.d/network restart


2.开启路由功能

1)vim /etc/sysctl.conf

  net.ipv4.ip_forward = 1

2)sysctl -p

3)iptables -t nat -I POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source 192.168.13.206


#部署squid

1.编译安装Squid

    配置Squid的编译选项时,将安装目录设为/usr/local/squid,其他具体选项根据实际需求来定,配置前可参考“./configure  --help”给出的说明

1)tar -zxvf squid-3.4.6.tar.gz -C /usr/src/

2)cd /usr/src/squid-3.4.6/

3)./configure --prefix=/usr/local/squid --sysconfdir=/etc/ --enable-linux-netfilter --enable-arp-acl --enable-linux-tproxy --enable-async-io=100 --enable-err-language="Simplify_Chinese" --enable-underscore --enable-poll


选项详解

--prefix=/usr/local/squid           #安装目录
--sysconfdir=/etc/                  #单独将配置文件修改到其他目录
--enable-arp-acl                    #可以在规则中设置直接通过客户端MAC进行管理,防止客户端使用IP欺骗
--enable-linux-netfilter              #使用内核过滤
--enable-linux-tproxy                #支持透明模式
--enable-async-io=值                  #异步I/O,提升存储性能
--enable-err-language="Simplify_Chinese" #错误信息的显示语言
--enable-underscore                    #允许URL中有下划线
--enable-poll                         #使用Poll()模式,提升性能
--enable-gnuregex                      #使用GNU正则表达式--enable-gnuregex

4)make && make install

5)ln -s /usr/local/squid/sbin/* /usr/local/sbin/

6)useradd -M -s /sbin/nologin squid

7)chown -R squid:squid /usr/local/squid/var/


2.更改配置

1)vim /etc/squid.conf

 56 http_access allow all   #允许所有访问
 60 http_port 192.168.1.1:3128 transparent
 61 cache_effective_user squid   #指定运行用户
 62 cache_effective_group squid   #指定运行组
 63 visible_hostname xueluo.org   #指定当前主机名
 65 cache_dir ufs /usr/local/squid/var/cache/squid 100 16 256 #启用缓存
 68 #coredump_dir /usr/local/squid/var/cache/squid  #注释改行


2)iptables -t nat -I PREROUTING -i eth0 -s 192.168.1.0/24 -p tcp --dport 80 -j REDIRECT --to 3128

3)squid -k parse #检测配置文件(/etc/squid.conf)是否有问题

4)squid -z  #创建缓存目录

3.启动服务

1)vim /etc/init.d/squid

#!/bin/bash
# chkconfig: 2345 90 25
# config: /etc/squid.conf
# pidfile: /usr/local/squid/var/run/squid.pid
# Description: Squid - Internet Object Cache

PID="/usr/local/squid/var/run/squid.pid"
CONF="/etc/squid.conf"
CMD="/usr/local/squid/sbin/squid"

case "$1" in
    start)
        netstat -utpln | grep squid &>/dev/null
        if [ $? -eq 0 ]
            then
                echo "Squid is running"
            else
            $CMD
        fi
        ;;
    stop)
        $CMD -k kill &>/dev/null
        rm -rf $PID &>/dev/null
        ;;
    status)
        [ -f $PID ] &>/dev/null
        if [ $? -eq 0 ]
            then
                netstat -utpln | 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 "用法:{ start | stop | restart | reload | check | status}"
        ;;
esac

2)chmod +x /etc/init.d/squid

3)chkconfig --add squid

4)/etc/init.d/squid start

5)netstat -utpln | grep 3128

4.测试

  IE --> 119.75.213.61

1)tail -f /usr/local/squid/var/logs/access.log

三、Squid的ACL

    Squid提供了强大的代理控制机制,通过合理设置ACL(Access  Control  List,访问控制列表)并进行限制,可以针对源地址、目标地址、访问的URL路径、访问的时间等各种条件进行过滤

    在配置文件squid.conf中,ACL访问控制通过以下两个步骤来实现:其一,使用acl配置项定义需要控制的条件;其二,通过http_access配置项对已定义的列表做“允许”或“拒绝”访问的控制

1.定义访问控制列表

    每一行acl配置可以定义一条访问控制列表,格式如下所示

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

    其中,“列表名称”由管理员自行指定,用来识别控制条件;“控制类型”必须使用Squid预定义的值,对应着不同类别的控制条件;“列表内容”是要控制的具体对象,不同类型的列表所对应的内容也不一样,可以有多个值(以空格分割,为“或”的关系)

    通过上述格式可以发现,定义访问控制列表时,关键在于选择“列表类型”并设置具体的条件对象。Squid预定义类型有很多种,常用的包括源地址、目标地址、访问时间、访问端口等


列表类型 列表内容示例   含义/用途

src  192.168.1.168
  192.1681.0/24
  192.168.1.0-192.168.3.0/24 源IP地址、网段、IP地址范围

dst  216.163.137.3
  61.135.167.0/24
  www.playboy.com   目标IP地址、网段、主机名

port  80
  443
  8080    目标端口


dstdomain .qq.com
  .msn.com   目标域,匹配域内所有站点

time  MTWHF  8:30-17:30
  12:00-13:00
  AS    字母表示一星期天中各天的缩写
  M--Monday
  T--Tuesday
  W--Wednesday
  H--Thursday
  F--Friday
  A--Saturday
  S--Sunday

maxconn  20    每个客户机的并发连接数

url_regex url_regex -i ^rtsp://
  url_regex -i ^emule://  目标资源的URL地址,-i表示忽略大小写

urlpath_regex urlpath_regex -i \.mp3$  目标资源的整个URL路径,-i表示忽略大小写

Blog:http://blog.51cto.com/painting

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值