????????当客户机通过代理来请求Web页面时,指定的代理服务器会先检查自己的缓存,如果缓存中已经有客户机需要的页面,则直接将缓存中的页面内容反馈给客户机;如果缓存中没有客户机要访问的页面,则由代理服务器向Internet发送访问请求,获得返回的Web页面以后,将页面数据保存到缓存中并发送给客户机。
? ? ? ??配置Squid的编译选项时,将安装目录设为/usr/local/squid。
[root@localhost ~]# tar zxf squid-3.5.23.tar.gz
[root@localhost ~]# cd squid-3.5.23/
[root@localhost squid-3.5.23]# ./configure --prefix=/usr/local/squid --sysconfdir=/etc --enable-linux-netfilter --enable-async-io=240 --enable-default-err-language=Simplify_Chinese --disable-poll --enable-epoll --enable-gnuregex
[root@localhost squid-3.5.23]# make
[root@localhost squid-3.5.23]# make install
安装完后,创建链接文件、创建用户和组
[root@localhost ~]# ln -s /usr/local/squid/sbin/* /usr/local/sbin/
[root@localhost ~]# useradd -M -s /sbin/nologin squid
[root@localhost ~]# chown -R squid:squid /usr/local/squid/var/
????????通常情况下,配置文件中不包括cache_ffective_user与cache_effective_group配置项,需要手动添加,否则启动不成功。
1)检查配置文件语法是否正确
[root@localhost ~]# squid -k parse
2)启动、停止Squid
? ? ? ? 第一次启动Squid服务时,会自动初始化缓存目录。在没有可用的Squid脚本的情况下,也可以直接调用Squid程序来启动服务,这时需要先进行初始化。
[root@localhost ~]# squid -z //-z选项用来初始化缓存目录
[root@localhost ~]# squid //启动squid服务
????????确认Squid服务处于正常监听状态
[root@localhost ~]# netstat -anpt | grep squid
tcp6 0 0 :::3128 :::* LISTEN 52304/(squid-1)
?3)使用Squid服务脚本
????????为了使Squid服务的启动、停止、重载等操作更加方便,可以编写Squid服务脚本,并使用chkconfig和systemctl 工具来进行管理。
[root@localhost ~]# cat /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 is running"
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 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 | restart | reload | check | status}"
;;
esac
[root@localhost ~]# chmod +x /etc/init.d/squid
[root@localhost ~]# chkconfig --add squid
[root@localhost ~]# systemctl restart squid
1)修改squid.conf配置文件
[root@localhost ~]# vim /etc/squid.conf
reply_body_max_size 10 MB //允许下载的最大文件大小(10MB)
http_access allow all //放在http_access deny all之前
2)重载squid服务
[root@localhost ~]# systemctl restart squid
????????使用【ctrl+r】打开cmd工具,输入"control"打开控制面板,按照下面操作进行设置代理服务器的IP地址和端口号
[root@localhost ~]# tail -f /usr/local/squid/var/logs/access.log
1704184961.350 5173 192.168.136.11 TCP_TUNNEL/200 589 CONNECT h.trace.qq.com:443 - HIER_DIRECT/113.240.72.96 -
1704184974.554 21002 192.168.136.11 TAG_NONE/503 0 CONNECT arc.msn.com:443 - HIER_NONE/- -
1704184974.554 21002 192.168.136.11 TAG_NONE/503 0 CONNECT arc.msn.com:443 - HIER_NONE/- -
1704184974.556 21004 192.168.136.11 TAG_NONE/503 0 CONNECT arc.msn.com:443 - HIER_NONE/- -
1704184974.556 21004 192.168.136.11 TAG_NONE/503 0 CONNECT arc.msn.com:443 - HIER_NONE/- -
????????Squid服务的默认配置并不支持透明代理,因此需要调整相关设置
[root@localhost ~]# systemctl start firewalld
[root@localhost ~]# firewall-cmd --zone=external --add-interface=ens37 --permanent
[root@localhost ~]# firewall-cmd --zone=internal --add-interface=ens33 --permanent
[root@localhost ~]# firewall-cmd --zone=external --add-service=http --permanent
[root@localhost ~]# firewall-cmd --zone=external --add-service=https --permanent
[root@localhost ~]# firewall-cmd --zone=external --add-port=3128/tcp --permanent
[root@localhost ~]# firewall-cmd --direct --add-rule ipv4 nat PREROUTING 0 -i ens37 -p tcp --dport 80 -j REDIRECT --to-ports 3128
[root@localhost ~]# firewall-cmd --direct --add-rule ipv4 nat PREROUTING 0 -i ens37 -p tcp --dport 443 -j REDIRECT --to-ports 3128
[root@localhost ~]# firewall-cmd --runtime-to-permanent