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服务时u,会自动初始化缓存目录。
[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服务安装及基本部署大致就这些,以后遇到问题,也会更新的!