简介
Squid是一种开源代理服务器软件,常用于提供缓存和过滤功能的网络服务。它可以通过缓存经常访问的网页来提高访问速度,并且可以过滤一些不需要的内容,提高网络安全性。Squid代理可以应用于许多场合,例如企业内网、ISP、电子商务网站、教育机构和政府部门等。它支持多种协议,包括HTTP、HTTPS、FTP和gopher等,可以在不同的平台上运行,如Linux、Unix和Windows等。
举例:
假设这三台机器分别为:
- Squid代理服务器:IP地址为192.168.1.100
- Linux的Apache服务器:IP地址为192.168.1.101
- Windows服务器:IP地址为192.168.1.102
工作原理如下:
- 用户通过Windows服务器(192.168.1.102)发出HTTP请求。
- Squid代理服务器(192.168.1.100)接收到请求,根据配置信息判断是否需要缓存请求的内容,并将请求转发给Apache服务器(192.168.1.101)。
- Apache服务器(192.168.1.101)接收到请求后进行处理,生成HTTP响应,再将响应发送给Squid代理服务器(192.168.1.100)。
- Squid代理服务器(192.168.1.100)接收到响应后,根据配置信息决定是否对响应进行缓存,并将响应转发给Windows服务器(192.168.1.102)。
- Windows服务器(192.168.1.102)接收到响应后将其呈现给用户。
这样的部署可以提高网络访问速度,减轻服务器负载,并且可以对常用的网页内容进行缓存,以提高用户体验和节省网络流量。
其中Windows是通过squid代理的IP访问的Apache网站。
脚本:
#!/bin/bash
#function: squid服务部署
#author: zhubinbin
##############################
#####root判断#####
if
[ "$USER" != "root" ]
then
echo "错误:非root用户,权限不足!"
exit 0
fi
############防火墙与高级权限##########
systemctl stop firewalld && systemctl disable firewalld && echo "防火墙已经关闭"
sed -i 's/SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config && echo "关闭selinux"
##################环境安装######################
yum -y install gcc gcc-c++ &>/dev/null
####################安装#######################
wget -P /root http://www.squid-cache.org/Versions/v3/3.5/squid-3.5.23.tar.gz
if [ -e /root/squid-3.5.23.tar.gz ];then
echo "安装包下载完成"
else
echo "安装包下载失败"
exit 2
fi
###################编译安装###########################
tar xf /root/squid-3.5.23.tar.gz &>/dev/null
cd /root/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
if [ $? = 0 ];then
echo "编译成功"
else
echo "编译失败"
exit 2
fi
make && make install
if [ $? = 0 ];then
echo "编译安装成功"
else
echo "编译安装失败"
exit 2
fi
########################创建软连接############################
ln -s /usr/local/squid/sbin/* /usr/local/sbin/
##########################创建用户并文件授权####################
useradd -M -s /sbin/nologin squid
chown -R squid.squid /usr/local/squid/var/
#############################################################
sed -i 's/http_access deny all/http_access allow all/g' /etc/squid.conf
cat >> /etc/squid.conf << EOF
cache_effective_user squid
cache_effective_group squid
EOF
squid -k parse
squid -z
squid
netstat -ntap |grep 3128
###############################添加服务到service管理#############################
cat > /etc/init.d/squid << EOF
#!/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..."
$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..."
$0 start &> /dev/null
echo "正在启动 squid..."
;;
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
chkconfig --level 35 squid on
EOF
#############################防火墙配置##############################
iptables -F
iptables -F -t nat
setenforce 0
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
systemctl restart squid