squid缓存服务:传统模式、透明模式、反向代理

什么是代理服务器?

代理服务器是介于客户端和Web服务器之间的另一台服务器,有了代理服务器之后,浏览器不是直接到Web服务器去取回网页,而是向代理服务器发出请求,信号会先送到代理服务器,由代理服务器来取回浏览器所需要的信息并传送给你的浏览器。大部分代理服务器都具有缓存的功能,有很大的存储空间,不断将新取得数据储存到本机的存储器上,如果浏览器所请求的数据在本机的存储器上已经存在而且是最新的,那么代理服务器就不用重新从Web服务器取数据,而直接将存储器上的数据传送给用户的浏览器,这样就能显著提高浏览速度和效率。更重要的是代理服务器是Internet链路级网关所提供的一种重要的安全功能。

Squid代理服务

Squid(Squid官方网站:http://www.squid-cache.org/)是Linux系统中最为流行的一款高性能代理服务软件,通常用作Web网站的前置缓存服务,能够代替用户向网站服务器请求页面数据并进行缓存。Squid服务程序会按照收到的用户请求向网站源服务器请求页面、图片等所需的数据,并将服务器返回的数据存储在运行Squid服务程序的服务器上。当有用户再请求相同的数据时,则可以直接将存储服务器本地的数据交付给用户,这样不仅减少了用户的等待时间,还缓解了网站服务器的负载压力。

优点

Squid有广泛的用途,从作为Web服务器的前置缓存服务器缓存相关请求来提高Web服务器的速度,到为一组人共享网络资源而缓存Internet、域名系统和其他网络搜索,到通过过滤流量帮助网络安全,到局域网通过代理上网。Squid的发展历史相当悠久,功能也相当完善。Squid不仅可用在Linux系统上,还可以用在Windows、AIX、Digital UNIX、FreeBSD、HP-UX、Irix、NetBSD、Nextstep、SCO和Solaris等系统上。Squid与Linux下其他的代理软件相比,下载安装简单、配置简单灵活、支持HTTP、FTP、SSL等缓存和多种协议,效率高、功能丰富等特点
可以基于访问控制列表(ACL)和访问权限列表(ARL)执行内容过滤与权限管理功能,还可以基于多种条件禁止用户访问存在威胁或不适宜的网站资源,因此可以保护企业内网的安全,提升用户的网络体验,帮助节省网络带宽。

缺点

由于缓存代理服务不但会消耗服务器较多的CPU计算性能、内存以及硬盘等硬件资源,同时还需要较大的网络带宽来保障数据的传输效率,由此会造成较大的网络带宽开销。因此国内很多IDC或CDN服务提供商会将缓存代理节点服务器放置在二三线城市以降低运营成本。

正向代理模式

使用Squid服务程序为用户提供缓存代理服务时,具有正向代理模式和反向代理模式之分。所谓正向代理模式,是指让用户通过Squid服务程序获取网站页面等资源,以及基于访问控制列表(ACL)功能对用户访问网站行为进行限制,在具体的服务方式上又分为传统代理模式与透明代理模式

传统模式

代理服务器被用于缓存远程主机上的数据到本地代理服务器。当被缓存的数据被第二次访问的时候,客户端将直接从本地代理服务器获取请求数据而不再向原远程主机请求数据。但是要想实现这种方式,必须在每一个本地客户端上明确指明代理服务器的IP地址、端口号。
客户端访问时,每次都把请求送给代理服务器处理,代理服务器根据请求确定是否连接到远程主机获取数据。如果在本地缓存有目标文件,则直接将文件传给用户即可。如果没有的话则先取回文件,先在本地保存一份缓存,然后将文件发给本地客户端

环境准备:
squid代理服务器:192.168.188.135
web1服务器:192.168.188.136
web2服务器:192.168.188.137

1,编译安装 squid代理服务器

(1)解压squid软件包,下载编译环境,configure配置

这里是用samba方式挂载使用压缩包,也可用其他方式上传压缩包进行解压
# tar zxvf squid-3.4.6.tar.gz -C /opt/
# yum install gcc gcc-c++ -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	

在这里插入图片描述
(2)编译安装,并优化squid

# 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/    
--var目录中有一个run目录跑运行文件pid

# vim /etc/squid.conf	
http_access allow all				--添加allow一行
 #http_access  deny all				--把deny一行注释掉
在 http_port 3128下行添加两行:
cache_effective_user squid      	--添加 指定程序用户
cache_effective_group squid  		--添加 指定账号基本组

在这里插入图片描述
在这里插入图片描述
3、启动服务

# squid -k parse  	--检查配置文件语法
# squid -z      	--初始化缓存目录
# squid 			--启动服务
# netstat -ntap | grep 3128

在这里插入图片描述
4、优化启动脚本

# 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 stop
# netstat -ntap | grep 3128
# service squid start
# netstat -ntap | grep 3128

在这里插入图片描述
squid 安装配置完成

2、修改配置文件,分配缓存空间
# vim /etc/squid.conf
在http_port 3128
.....
cache_effective_group squid 
下行插入:
cache_mem 64 MB
reply_body_max_size 10 MB
maximum_object_size 4096 KB

在这里插入图片描述

3、配置iptables访问规则
# iptables -L 	   		 查看转发表规则
# iptables -F	   		 清空转发表规则

# iptables -t nat -L     查看nat转换表规则
# iptables -t nat -F     清空nat转换表规则
# setenforce 0
# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT  允许3128端口进行访问

# iptables -L 
# service squid reload    重载squid服务

在这里插入图片描述

4、web服务器配置
# systemctl stop firewalld
# setenforce 0
# yum install httpd -y
# systemctl start httpd
# netstat -ntap | grep httpd
# cd /var/www/html/
# vim index.html
写入:
<h1>this is KY02</h1>
5、客户机 测试

客户机使用的是谷歌浏览器,设置代理
Google 打开–点开右上角–设置–高级–系统–打开您计算机的代理设置–代理–使用代理服务器(打开)–写入 squid代理服务器地址 端口3128 --点 保存。
在这里插入图片描述
在这里插入图片描述
客户机正常访问web服务器IP192.168.188.137,多刷新几次,web服务器查看 访问日志access.log ,显示是squid代理服务器地址192.168.188.135 来访问的
在这里插入图片描述

透明模式

透明代理服务功能完全相同,但是代理操作对客户端是透明的(即不需指明代理服务器的IP和端口)。透明代理服务器阻断网络通信,并且过滤出访问远程主机的通信。如果客户端的请求在本地有缓存则将缓存的数据直接发给用户,如果在本地没有缓存则向远程主机发出请求,其余操作和标准的代理服务器完全相同。

1,编译安装 squid代理服务器

编译过程,按照上面传统模式的进行操作。

2、squid代理 配置IP地址

配置双网卡,外网ens33连接web, 内网ens36 连接客户端 ,ens66充当内网网关,一个NAT模式 一个仅主机模式

# cd /etc/sysconfig/network-scripts
# cp -p ifcfg-ens33 ifcfg-ens36
# vim ifcfg-ens36
dhcp 改为 static
ens33 改为 ens36
UUID一行删掉
添加:
IPADDR=192.168.100.1
NETMASK=255.255.255.0

# systemctl restart network

在这里插入图片描述

3、squid代理 开启路由功能
# vim /etc/sysctl.conf
末行添加:net.ipv4.ip_forward=1

# sysctl -p   加载,使生效

在这里插入图片描述

4、web服务器配置
# yum install httpd -y
# systemctl stop firewalld
# setenforce 0
# systemctl start httpd
# cd /var/www/html/
# vim index.html
写入:
<h1>this is KY02</h1>
# ping 192.168.195.128  	能通
# ping 192.168.100.1	    能通

配置静态路由
# route add -net 192.168.100.0/24 gw 192.168.188.135
5、squid代理: 修改配置文件
# vim /etc/squid.conf
把http_port 3128 改为:
http_port 192.168.100.1:3128 transparent    设置透明模式	     

# service squid stop
# service squid start

在这里插入图片描述

6、设置ipstables规则
# iptables -F	
# iptables -t nat -F

设置ipstables规则
# iptables -t nat -I PREROUTING -i ens36 -s 192.168.100.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
# iptables -t nat -I PREROUTING -i ens36 -s 192.168.100.0/24 -p tcp --dport 443 -j REDIRECT --to 3128

192.168.100.0段IP 访问80端口或443端口 从定向到3128端口,也就是访问web 的从定向到squid代理服务

# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT   允许3128端口进行访问
# netstat -ntap | grep 3128

在这里插入图片描述

7、客户端配置,并测试

实验环境,为了和网关互通,客户端 选仅主机模式 ,配置静态IP 192.168.100.10 子网 网关192.168.100.1 ,并重启网络服务。
在这里插入图片描述
客户端 直接访问 web服务192.168.188.137 ,对刷新几次
在这里插入图片描述
从web服务 查看日志文件 cat access_log 可以看到 显示squid代理服务器来访问的

# cd /var/log/httpd
# cat access_log	     可以看到squid代理服务器IP来访问的

在这里插入图片描述

反向代理模式

反向代理服务器可以降低原始服务器的负载。反向代理服务器位于本地服务器和Internet之间。如果Internet用户请求的数据在代理服务器上有缓存,代理服务器直接将缓存内容发送给用户。如果没有缓存则先向本地服务器发出请求,取回数据,本地缓存后再发送给用户。反向代理服务器对外表现为一个Web服务器,外部网络就可以简单把反向代理服务器当做一个标准的Web服务器而不需要特定的配置。不同之处在于,这个服务器没有保存任何网页的真实数据,所有的静态网页或者CGI程序,都保存在内部的Web服务器上。因此对反向代理服务器的攻击并不会使得网页信息遭到破坏,这样就增强了Web服务器的安全性。

1,编译安装 squid代理服务器

编译过程,按照上面传统模式的进行操作。

2、squid代理 配置IP地址

配置双网卡,外网ens33连接web, 内网ens36 连接客户端 ,ens66充当内网网关,一个NAT模式 一个仅主机模式

# cd /etc/sysconfig/network-scripts
# cp -p ifcfg-ens33 ifcfg-ens36
# vim ifcfg-ens36
dhcp 改为 static
ens33 改为 ens36
UUID一行删掉
添加:
IPADDR=192.168.100.1
NETMASK=255.255.255.0

# systemctl restart network

在这里插入图片描述

3、配置iptables访问规则
# systemctl start firewalld
# iptables -L
# iptables -F
# iptables -t nat -F
# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT

在这里插入图片描述

4、修改配置文件,设置反向代理
# vim /etc/squid.conf
/http_port 查找
改为:http_port 192.168.188.135:80 accel vhost vport
添加:
cache_peer 192.168.188.136 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web1
cache_peer 192.168.188.137 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web2
cache_peer_domain web1 web2 www.yun.com

当访问自己的80端口时,定义到虚拟主机和虚拟端口
建立重定向 到两个web节点服务器 :192.168.188.136 、192.168.188.137
如果访问www.yun.com  就会匹配web1 web2,等于访问这两个节点。

解释:
no-query  originserver  round-robin   max_conn=30
禁止查询    指定真实服务器    轮询         最大访问量

# service squid restart
# netstat -ntap | grep 80
192.168.188.135:80    开启了

在这里插入图片描述
在这里插入图片描述

5、web服务器配置

web1:

# hostnamectl set-hostname web1
# su
# systemctl stop firewalld
# setenforce 0
# yum install httpd -y
# systemctl start httpd
# cd /var/www/html
# vim index.html
<h1> this is KY01</h1>
# route add -net 192.168.100.0/24 gw 192.168.188.135

web2:

# hostnamectl set-hostname web2
# su
# systemctl stop firewalld
# setenforce 0
# yum install httpd -y
# cd /var/www/html
# vim index.html
<h1> this is KY02</h1>
# systemctl start httpd
配置静态路由
# route add -net 192.168.100.0/24 gw 192.168.188.135
6、客户机配置

直接访问 192.168.188.136 web1服务器, 显示 this is KY01
直接访问 192.168.188.137 web2服务器, 显示 this is KY02
在这里插入图片描述
在这里插入图片描述

(1)更改hosts文件
计算机–右击–管理–本地用户和组–用户–Administation右击属性–账号已禁用,√去掉。–Administation右击–设置密码–123 --确定

然后切换用户 ,Administation用户登录 输入123密码
更改hosts文件
点击计算机–C盘–Windows–System32–drivers–etc–hosts—打开 末行添加 192.168.195.128 www.yun.com
在这里插入图片描述
在这里插入图片描述
(2)设置代理:

在这里插入图片描述

7、测试

直接访问www.yun.com,显示 this is KY01
多刷新几次,又显示 this is KY02
采用的是轮询的方式

在这里插入图片描述
在这里插入图片描述

适用场景

正向代理模式一般用于企业局域网之中,让企业用户统一地通过Squid服务访问互联网资源,这样不仅可以在一定程度上减少公网带宽的开销,而且还能对用户访问的网站内容进行监管限制,一旦内网用户访问的网站内容与禁止规则相匹配,就会自动屏蔽网站。
反向代理模式一般是为大中型网站提供缓存服务的,它把网站中的静态资源保存在国内多个节点机房中,当有用户发起静态资源的访问请求时,可以就近为用户分配节点并传输资源,因此在大中型网站中得到了普遍应用。

发布了56 篇原创文章 · 获赞 6 · 访问量 1856

猜你喜欢

转载自blog.csdn.net/weixin_45691464/article/details/105005383