前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >大点干!早点散----------深入剖析缓存加速--squid传统代理和透明代理

大点干!早点散----------深入剖析缓存加速--squid传统代理和透明代理

作者头像
不吃小白菜
发布2020-09-08 09:58:15
4280
发布2020-09-08 09:58:15
举报

文章目录

  • 一、squid的概念
  • 二、工作流程
  • 三、squid基本类型
    • 1、正向代理
      • (1)标准的代理缓冲服务器
      • (2)透明代理缓冲服务器
    • 2、反向代理
      • (1)反向代理缓冲器
    • 3、正向代理与反向代理的区别
      • (1)概念
      • (2)用途
      • (3) 安全性
  • 四、实验配置
    • 1、标准的代理缓冲服务器配置
      • (1)实验环境
      • (2)在squid服务器上部署squid服务
      • (3)修改squid配置文件,优化启动项
      • (4)添加服务到service管理
      • (5)配置传统代理服务
      • (6)在web服务器上安装http服务
      • (7)在client客户端测试web网页
      • (8)设置squid代理
      • (9)验证
    • 2、透明代理缓冲服务器配置
      • (1)实验环境
      • (2)实验拓扑图如下
      • (3)网卡配置
      • (4)squid服务器配置
      • (5)再次使用client客户端访问web端

一、squid的概念

squid是一种用来缓存Internet数据的软件。接受来自人们需要下载的目标(object)的请求并适当的处理这些请求。也就是说,如果一个人想下载一web界面,他请求squid为他取得这个页面。squid随之连接到远程服务器并向这个页面发出请求。然后,squid显式地聚集数据到客户端机器,而且同时复制一份。当下一次有人需要同一页面时, squid可以简单的从磁盘中读到它,那样数据会立即传输到客户机上。

squid代理的作用 通过缓存的方式为用户提供Web访问加速 对用户的Web访问进行过滤控制

二、工作流程

当代理服务器中有客户端需要的数据时:

a. 客户端向代理服务器发送数据请求;

b. 代理服务器检查自己的数据缓存;

c. 代理服务器在缓存中找到了用户想要的数据,取出数据;

d. 代理服务器将从缓存中取得的数据返回给客户端。

当代理服务器中没有客户端需要的数据时:

客户端向代理服务器发送数据请求;

代理服务器检查自己的数据缓存;

代理服务器在缓存中没有找到用户想要的数据;

代理服务器向Internet 上的远端服务器发送数据请求;

远端服务器响应,返回相应的数据;

代理服务器取得远端服务器的数据,返回给客户端,并保留一份到自己的数据缓存中。

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

三、squid基本类型

1、正向代理

(1)标准的代理缓冲服务器

一个标准的代理缓冲服务被用于缓存静态的网页到本地网络上的一台主机上(即代理服务器)。当被缓存的页面被第二次访问的时候,浏览器将直接从本地代理服务器那里获取请求数据而不再向原web站点请求数据。这样就节省了宝贵的网络带宽,而且提高了访问速度。但是,要想实现这种方式,必须在每一个内部主机的浏览器上明确指名代理服务器的IP地址和端口号。客户端上网时,每次都把请求发送给代理服务器处理,代理服务器根据请求确定是否连接到远程web服务器获取数据。如果在本地缓冲区有目标文件,则直接将文件传给用户即可。如果没有的话则先取回文件,先在本地保存一份缓冲,然后将文件发送给客户端浏览器。

(2)透明代理缓冲服务器

透明代理缓冲服务器和标准代理服务器的功能完全相同。但是,代理操作对客户端的浏览器是透明的(即不需指明代理服务器的IP和端口)。透明代理服务器阻断网络通信,并且过滤出访问外部的HTTP(80端口)流量。如果客户端的请求在本地有缓冲则将缓冲的数据直接发给用户,如果在本地没有缓冲则向远程web服务器发出请求,其余操作和标准的代理服务器完全相同。对于linux操作系统来说,透明代理使用Iptables或者Ipchains实现。因此不需要对浏览器作任何设置,所以,透明代理对于ISP(Internet服务器提供商)特别有用。

2、反向代理

(1)反向代理缓冲器

反向代理是和前两种代理完全不同的一种代理服务。使用它可以降低原始WEB服务器的负载。反向代理服务器承担了对原始WEB服务器的静态页面的请求,防止原始服务器过载。它位于WEB服务器和Internet之间,处理所有对WEB服务器的请求,组织了WEB服务器和Internet的直接通信。如果互联网用户请求的页面在代理服务器上有缓冲的话,代理服务器直接将缓冲内容发送给用户。如果没有缓冲则先向WEB服务器发出请求,取回数据,本地缓存后再发给用户。这种方式通过降低了WEB服务器的请求数从而降低了WEB服务器的负载。

3、正向代理与反向代理的区别

(1)概念

正向代理:对于原始服务器而言,就是客户端的代言人 反向代理:对于客户端而言,就像是原始服务器 正向代理:

通俗的来讲

比如X花店代A,B,C,D,E五位男生向Candy女生送匿名的生日鲜花,这里的X花店就是5位顾客的代理,花店代理的是客户,隐藏的是客户。这就是我们常说的代理。

正向代理 隐藏了真实的请求客户端。服务端不知道真实的客户端是谁,客户端请求的服务都被代理服务器代替来请求

反向代理

拨打10086客服电话,接线员可能有很多个,调度器会智能的分配一个接线员与你通话。这里的调度器就是一个代理,只不过他代理的是接线员,客户端不能确定真正与自己通话的人,隐藏与保护的是目标对象。

反向代理隐藏了真实的服务端,当我们请求 ww.baidu.com 的时候,就像拨打10086一样,背后可能有成千上万台服务器为我们服务,但具体是哪一台,你不知道,也不需要知道,你只需要知道反向代理服务器是谁就好了,ww.baidu.com 就是我们的反向代理服务器,反向代理服务器会帮我们把请求转发到真实的服务器那里去。Nginx就是性能非常好的反向代理服务器,用来做负载均衡。

(2)用途

正向代理的典型用途是为在防火墙内的局域网客户端提供访问Internet的途径。正向代理还可以使用缓冲特性减少网络使用率。 反向代理还可以为后端的多台服务器提供负载平衡,或为后端较慢的服务器提供缓冲服务。另外,反向代理还可以启用高级URL策略和管理技术,从而使处于不同web服务器系统的web页面同时存在于同一个URL空间下。

(3) 安全性

正向代理允许客户端通过它访问任意网站并且隐藏客户端自身,因此你必须采取安全措施以确保仅为经过授权的客户端提供服务。 反向代理对外都是透明的,访问者并不知道自己访问的是一个代理。

四、实验配置

1、标准的代理缓冲服务器配置

(1)实验环境

VMware软件 一台centos7虚拟机作为squid服务器,IP地址为:192.168.110.133 一台centos7虚拟机作为web服务器,IP地址为:192.168.110.132 一台win10虚拟机作为client测试机,IP地址为:192.168.110.20

(2)在squid服务器上部署squid服务

代码语言:javascript
复制
[root@squid company]# tar zxvf squid-3.4.6.tar.gz -C /opt
[root@squid company]# cd /opt/squid-3.4.6/
[root@squid squid-3.4.6]# yum install gcc gcc-c++ -y
[root@squid squid-3.4.6]# ./configure \
--prefix=/usr/local/squid \ '//安装路径'
--sysconfdir=/etc \   '//配置文件目录'
--enable-arp-acl \   '//支持acl访问控制列表'
--enable-linux-netfilter \   '//支持网络筛选'
--enable-linux-tproxy \  '//支持透明'
--enable-async-io=100 \  '//io优化'
--enable-err-language="Simplify_Chinese" \   '//报错显示简体中文'
--enable-underscore \        '支持下划线'
--enable-poll \	'//关闭默认使用poll模式,开启epoll模式提提升性能'
--enable-gnuregex   '//支持正则表达'
[root@squid squid-3.4.6]# make && make install	'//编译安装'
[root@squid squid-3.4.6]# ln -s /usr/local/squid/sbin/* /usr/local/sbin/	'//创建命令软连接,方便系统识别'
[root@squid squid-3.4.6]# useradd -M -s /sbin/nologin squid	'//创建系统用户'
[root@squid squid-3.4.6]# chown -R squid.squid /usr/local/squid/var/	'//设置目录的属主和属组'

(3)修改squid配置文件,优化启动项

代码语言:javascript
复制
[root@squid squid-3.4.6]# vim /etc/squid.conf 
http_access allow all   '//56行添加此项,表示允许所有IP访问'
#http_access deny all 	'//注释掉原有的'

# Squid normally listens to port 3128
http_port 3128
cache_effective_user squid   '//添加指定用户squid'
cache_effective_group squid 	'//添加指定组 squid'
[root@squid squid-3.4.6]# squid -k parse	'//检查语法,没问题可Ctrl + C组合键取消'
[root@squid squid-3.4.6]# squid -z	'//初始化缓存目录'
[root@squid squid-3.4.6]# squid	'//启动服务'
[root@squid squid-3.4.6]# netstat -ntap |grep 3128	'//检测是否启动成功'

(4)添加服务到service管理

代码语言:javascript
复制
[root@squid squid-3.4.6]# cd /etc/init.d/	
[root@squid init.d]# vim squid	'//创建service启动squid脚本'
#!/bin/bash
#chkconfig: 2345 90 25
PID="/usr/local/squid/var/run/squid.pid"   '//PID文件进程号'
CONF="/etc/squid.conf"   '//主配置文件'
CMD="/usr/local/squid/sbin/squid"   '//启动命令'

case "$1" in
start)
                netstat -ntap | grep squid &> /dev/null
                if [ $? -eq 0 ]
                then 
                 echo "squid is running"
                 else
                 echo "正在启动 squid...." 
                 $CMD
                fi
                ;;
stop)
                $CMD -k kill &> /dev/null  '//关闭squid'
                rm -rf $PID &> /dev/null   '//删除PID文件'
                ;;
status)
                [ -f $PID ] &> /dev/null
                 if [ $? -eq 0 ]
                                then
                                 netstat -ntap | 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|reload|status|check|restart}"
                ;;
esac
[root@squid init.d]# chmod +x squid 	'//增加权限'
[root@squid init.d]# chkconfig --add squid	'//添加到service'
[root@squid init.d]# chkconfig --level 35 squid on	'//设置35级别开机自启动'

(5)配置传统代理服务

代码语言:javascript
复制
[root@squid init.d]# vim /etc/squid.conf
http_port 3128
cache_effective_user squid
cache_effective_group squid
cache_mem 64 MB	'//自定义缓存空间大小,容量最好为4的倍数'
reply_body_max_size 10 MB	'//允许下载最大文件大小,以字节为单位,默认设置0表示不进行限制'
maximum_object_size 4096 KB	'//允许保存到缓存空间的最大对象的大小,以KB为单位,超过限制不会缓存,直接转到web端'
[root@squid init.d]# iptables -F	'//清空防火墙表内容'
[root@squid init.d]# iptables -L	'//查看防火墙表内容'
[root@squid init.d]# setenforce 0	'//关闭防火墙增强型功能'
[root@squid init.d]# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT	'//新增规则,允许3128端口'
[root@squid init.d]# service squid reload	'//重载服务'

(6)在web服务器上安装http服务

代码语言:javascript
复制
[root@web ~]# yum install httpd -y	'//安装httpd服务'
[root@web ~]# systemctl stop firewalld.service 	'//关闭防火墙'
[root@web ~]# setenforce 0
[root@web ~]# systemctl start httpd.service 	'//开启httpd服务'

(7)在client客户端测试web网页

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
[root@web ~]# cat /var/log/httpd/access_log 	'//通过查看访问日志,发现来访者的IP地址为client客户端的IP地址192.168.110.20'

(8)设置squid代理

在win10上开启squid代理并设置端口

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

(9)验证

再次访问apache

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

此时查看日志文件 发现访问的ip地址变成squid服务器的ip地址

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

2、透明代理缓冲服务器配置

(1)实验环境

结合上个实验 VMware软件 一台centos7虚拟机作为squid服务器,IP地址为:192.168.110.133 双网卡 192.168.100.1 一台centos7虚拟机作为web服务器,IP地址为:192.168.110.132 一台win10虚拟机作为client测试机,IP地址为:192.168.100.20

(2)实验拓扑图如下

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

(3)网卡配置

代码语言:javascript
复制
[root@squid init.d]# cd /etc/sysconfig/network-scripts/
[root@squid network-scripts]# cp -p ifcfg-ens33 ifcfg-ens36
	...省略内容
BOOTPROTO=static	'//dhcp改为static'
    ...省略内容
NAME=ens36	'//改为36'
    '//删除原本ens33的UUID'
DEVICE=ens36'//改为36'
ONBOOT=yes
IPADDR=192.168.100.1	'//添加IP地址'
NETMASK=255.255.255.0	'//添加子网掩码'
[root@squid network-scripts]# systemctl restart network	'//重启网卡服务'
[root@squid network-scripts]# ifconfig	'//查看网卡是否修改成功'

(4)squid服务器配置

代码语言:javascript
复制
[root@squid network-scripts]# vim /etc/sysctl.conf 	'//开启路由转发功能'
net.ipv4.ip_forward=1	'//末行添加,注意#号'
[root@squid network-scripts]# sysctl -p	'//加载sysctl.conf'
net.ipv4.ip_forward = 1
'//接下来设置squid的透明代理'
[root@squid network-scripts]# vim /etc/squid.conf
http_port 192.168.100.1:3128 transparent	'//仅修改此行,开启透明代理即可'
cache_effective_user squid
cache_effective_group squid
    '//防火墙规则设置'
[root@squid network-scripts]# iptables -F	'//情况表内容'
[root@squid network-scripts]# iptables -t nat -F	'//情况nat表内容'
[root@squid network-scripts]# iptables -t nat -I PREROUTING -i ens36 -s 192.168.100.0/24 -p tcp --dport 80 -j REDIRECT --to 3128	'//定义规则入口ens36网卡,http协议80端口重定向到3128端口'
[root@squid network-scripts]# iptables -t nat -I PREROUTING -i ens36 -s 192.168.100.0/24 -p tcp --dport 443 -j REDIRECT --to 3128	'//定义规则入口ens36网卡,https协议443端口重定向到3128端口'
[root@squid network-scripts]# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT	'//新增规则,允许3128端口'

(5)再次使用client客户端访问web端

[root@web ~]# cat /var/log/httpd/access_log

在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-09-06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、squid的概念
  • 二、工作流程
  • 三、squid基本类型
    • 1、正向代理
      • (1)标准的代理缓冲服务器
      • (2)透明代理缓冲服务器
    • 2、反向代理
      • (1)反向代理缓冲器
    • 3、正向代理与反向代理的区别
      • (1)概念
      • (2)用途
      • (3) 安全性
  • 四、实验配置
    • 1、标准的代理缓冲服务器配置
      • (1)实验环境
      • (2)在squid服务器上部署squid服务
      • (3)修改squid配置文件,优化启动项
      • (4)添加服务到service管理
      • (5)配置传统代理服务
      • (6)在web服务器上安装http服务
      • (7)在client客户端测试web网页
      • (8)设置squid代理
      • (9)验证
    • 2、透明代理缓冲服务器配置
      • (1)实验环境
      • (2)实验拓扑图如下
      • (3)网卡配置
      • (4)squid服务器配置
      • (5)再次使用client客户端访问web端
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档