当客户机通过代理来请求Web页面时,指定的代理服务器会先检查自己的缓存,如果缓存中已经有客户机需要访问的页面,则直接将缓存中的页面内容反馈给客户机;如果缓存中没有客户机需要访问的页面,则由代理服务器向Internet发送访问请求,当获得返回的Web页面以后,将网页数据保存到缓存中并发送给客户机,如图所示。
根据实现的方式不同,代理服务可分为传统代理和透明代理两种常见的代理服务。
在实际应用中,传统代理多见于Internet环境,如为QQ程序使用代理可以隐藏本机真实IP地址,为下载工具使用多个代理可以规避服务器的并发连接限制。而透明代理多见于局域网环境,如在Linux网关中启用透明代理后,局域网主机无需进行额外的设置就可以享受更好的上网速度。
tar zxvf squid-3.4.6.tar.gz -C /opt/
yum install gcc gcc-c++ make -y
cd /opt/squid-3.4.6
./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
make && make install
ln -s /usr/local/squid/sbin/* /usr/local/sbin/ //创建软连接
useradd -M -s /sbin/nologin squid //创建管理用户
chown -R squid.squid /usr/local/squid/var/
vim /etc/squid.conf
......
http_access allow all
http_access deny all
......
cache_effective_user squid #添加 指定程序用户
cache_effective_group squid #添加 指定账号基本组
squid -z //初始化缓存目录
cd /etc/init.d/
vim squid
#!/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 squid //给脚本加权限
chkconfig --add squid //添加为系统服务
chkconfig --level 35 squid on //开机自启动
service squid start
yum install -y httpd
systemctl stop firewalld.service
setenforce 0
systemctl start httpd
vim /etc/squid.conf
......
http_access allow all
http_access deny all
......
http_port 3128
cache_mem 64 MB //指定缓存功能所使用的内存空间大小,便于保持访问较频繁的WEB对象,容量最好为4的倍数,单位为MB,建议设为物理内存的1/4
reply_body_max_size 10 MB //允许用户下载的最大文件大小,以字节为单位。默认设置0表示不进行限制
maximum_object_size 4096 KB //允许保存到缓存空间的最大对象大小,以KB为单位,超过大小限制的文件将不被缓存,而是直接转发给用户
iptables -F
setenforce 0
iptables -I INPUT -p tcp --dport 3218 -j ACCEPT
service squid restart
客户端先不设置代理直接访问web服务器,查看web服务器的日志文件可知,是客户端的IP地址进行访问的
cd /etc/httpd/logs //日志存放位置
vim access_log
客户端设置代理
浏览器中Internet选项---》连接----》局域网设置----ip:squid服务器地址 端口:3128
再进行访问之后查看web服务器日志文件可知是由代理服务器访问的web服务器
echo "1" > /proc/sys/net/ipv4/ip_forward //开启路由转发
iptables -F
iptables -t nat -F
setenforce 0
vim /etc/squid.conf
......
http_port 192.168.100.1:3128 transparent //只在其中一个IP地址上提供服务
service squid restart
iptables -t nat -I PREROUTING -i ens33 -s 192.168.10.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
iptables -t nat -I PREROUTING -i ens33 -s 192.168.10.0/24 -p tcp --dport 443 -j REDIRECT --to 3128
iptables -I INPUT -p tcp --dport 3218 -j ACCEPT //若做了传统代理刷完这句话,则不用再刷,若直接做的透明代理,则要刷这句话
浏览器取消之前设置的Internet选项,清理缓存,访问web服务器
查看web服务器日志,可看到是由代理服务器的外网口网关IP进行的访问
转载于:https://blog.51cto.com/13641879/2149518