Squid是Linux系统中最常用的一款开源代理服务软件,可以很好地实现HTTP和FTP,以及DNS基础、SSL等应用的缓存代理,功能非常强大。

缓存代理概述

作为应用层的代理服务软件,Squid主要提供缓存加速、应用层过滤控制的功能。

1.代理的工作机制

当客户机通过代理来请求Web页面时,指定的代理服务器会先检查自己的缓存,如果缓存中已经有客户机需要的页面,则直接将缓存中的页面内容返回给客户机;如果缓存中没有客户机要访问的页面,则由代理服务器向Internet发送访问请求,获得返回的Web页面以后,将网页数据保存到缓存中并发送给客户机,如图: HTTP代理的缓存加速对象主要是文字、图像等静态Web元素。使用缓存机制后,当客户机在不同的时候访问同一Web元素,或者不同的客户机访问相同的Web元素时,可以直接从代理服务器的缓存中获得结果。这样就大大减少了向Internet提交重复的Web请求的过程,提高了客户机的Web访问响应速度。

由于客户机的Web访问请求实际上是由代理服务器来代替完成的,从而可以实现的功能有:

  1. 隐藏客户端的真实IP;
  2. 通过缓存,提高上网速度;
  3. 控制上网行为。

#### 2.代理服务器的类型

根据实现方式不同,代理服务器可分为:

**传统代理:**也就是普通的代理服务,首先必须在客户机的浏览器、QQ聊天工具、下载软件等程序中手动设置代理服务器的地址和端口,然后才能使用代理来访问网络。通过域名访问网页,域名解析请求也会发送到指定的代理服务器。

**透明代理:**提供与传统的相同的功能和服务,其区别在于客户机不需要指定代理服务器的地址和端口,而是通过默认路由、防火墙策略将Web访问重定向,实际仍然交给代理服务器来处理,重定向的过程对于客户机来说是“透明”的,用户根本不知道自己在使用代理服务,所以称为“透明代理”。使用透明代理时,网页浏览器访问网站时的域名解析请求将优先发送到DNS服务器。

实际应用中,**传统代理多适用于Internet环境,**如为QQ程序使用代理可以隐藏本机真实IP地址、为下载工具使用多个代理可以规避服务器的并发连接限制;**而透明代理多适用于局域网环境,**如在Linux网关中启用透明代理后,局域网主机无须进行额外设置就可以享受更好的上网速度。

### Squid安装及基本配置

#### 1.编译安装Squid

Squid软件包的网盘下载链接:https://pan.baidu.com/s/1wQZMU4hBA1CixPIS2r0gtg 
提取码:tyrl 

[root@localhost ~]# tar zxf squid-3.5.23.tar.gz -C /usr/src [root@localhost ~]# cd /usr/src/squid-3.5.23/ [root@localhost squid-3.5.23]#./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

>```
各配置项含义:
--prefix:指定安装目录
--sysconfdir=/etc  单独将配置文件修改到其他目录、
--enable-arp-acl   可以在规划中设置直接通过客户端MAC进行管理,防止客户端使用ip欺骗
--enable-linux-netfiler 使用内核过滤
--enable-linux-tproxy  支持透明代理
--enable-async-io=值  //异步i/o提升存储性能,相当于--enable-pthreads
--enable-err-language"=Simplify_Chinese" //错误信息的显示语言
--enable-underscore   允许url中有下划线
--enable-poll         使用poll()模式,提升性能
--enable-gnuregex     使用gnu正则表达式
[root@localhost squid-3.5.23]# make && make install

安装完成后,创建链接文件、创建专属用户和组:

[root@localhost squid-3.5.23]# ln -s /usr/local/squid/sbin/* /usr/local/sbin
[root@localhost squid-3.5.23]# useradd -M -s /sbin/nologin squid
[root@localhost squid-3.5.23]# chown -R squid:squid /usr/local/squid/var

2.编辑Squid服务的配置文件

[root@localhost squid-3.5.23]# vim /etc/squid.conf
                      ………………                            //省略部分内容
cache_effective_user squid                           //指定squid程序用户, 需要手工添加
cache_effective_group squid                        //程序基本组账户,需要手工添加
visible_hostname www.benet.com          //手工添加主机名,,需要手工添加
cache_dir ufs /usr/local/squid/var/cache/squid 100 16 256 
//设置缓存目录的大小,一级子目录和二级子目录的个数(默认有此项,去点前面的#)
[root@localhost ~]# hostname www.benet.com
[root@localhost ~]# bash
[root@www ~]# 
//配置文件中的主机名一定是本机的主机名

3.Squid的运行控制

1)检查配置文件语法是否正确

[root@www ~]#  squid -k parse

2)启动、停止Squid服务 第一次启动Squid服务时,会自动初始化缓存目录。

[root@www ~]#  squid -z                                   //-z选项用来初始化缓存目录
[root@www ~]#  ls /usr/local/squid/var/cache/squid/
00  01  02  03  04  05  06  07  08  09  0A  0B  0C  0D  0E  0F
//查看Squid的缓存目录
[root@www ~]#  squid                                       //启动Squid服务
[root@www ~]#  netstat -anpt | grep squid       //查看服务监听状态
tcp6       0      0 :::3128                 :::*                    LISTEN      45471/(squid-1)
[root@www ~]#  squid -k reconfigure
//重启Squid服务(必须是使用服务本身的启动命令启动服务,而且服务必须是已经启动的)
[root@www ~]#  kill 45471                               //通过杀服务进程号的方式停止Squid服务

3)编写Squid服务脚本 自行编写Squid服务脚本,使其变为系统服务。(当然不是必须的)!

[root@www ~]#  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 -anpt | grep squid &> /dev/null
        if
                [ $? -eq 0 ]
        then
                echo "squid已经启动!!!"
        else
                echo "正在启动squid..."
        $CMD
        fi
;;
stop)
        $CMD -k kill &> /dev/null
        rm -rf $PID &> /dev/null
;;
status)
        [ -f $PID ] &> /dev/null
        if
                [ $? -eq 0 ]
        then
                netstat -anpt | grep squid
        else
                echo "squid没有启动!!!"
        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 | restart | reload | check| status}"
;;
esac

[root@www ~]#  chmod +x /etc/init.d/squid 
[root@www ~]#  chkconfig  --add squid
[root@www ~]#  systemctl restart squid

Squid服务安装及基本部署大致就这些,以后遇到问题,也会更新的!