【squid缓存服务器】
文章目录
- 一、Squid的简介
- 二、Squid工作模式
- 传统模式
- 透明模式
- 反向代理模式
- 三、Squid软件介绍
- 搭建Squid传统模式
- 搭建Squid透明模式
- 搭建Squid反向代理模式
- 四、Squid ACL 介绍
一、Squid的简介
通俗的概述:squid是一种用来缓存网页浏览器数据的软件。接受来自人们需要下载的目标(object)的请求并适当的处理这些请求。也就是说,如果一个人逛微博突然想把这个图片保存下来,那么本地客户端会请求squid为他取得这个页面。squid随之连接到远程服务器并向这个页面发出请求。然后,squid将远程服务器返回到客户端机器的数据,复制一份到squid服务器的本地。当内网下一次有人需要这个相同的图片时, squid可以直接从自己的本地磁盘中读到它,
不再需要去公网访问远程服务器,而是直接本地缓存给它
。
定义:一个缓存服务器的守护进程
支持的代理协议:FTP、HTTP、SSL
如何存储?磁盘 > 分区 > 目录 > Object(缓存文件)
索引方式
Hash Tables 目录 每个 Digest 的索引信息
Digest Tables 索引 不同分区对应的 Object 大概说明
工作过程:
无缓存:①②③⑤⑥④
①客户机向www.atguigu,com请求资源(获取图片)
②squid向自己本地缓存中检索是否存在此图片缓存
③向squid返回没有检索到的结果
⑤由于没有检索到,因此由squid代理服务器去公网访问www.atguigu,com请求资源
⑥公网服务器返回图片资源给squid服务器,squid保存一份到本地
④再向内网客户机发送保存的图片缓存
有缓存:①②③④
①客户机向www.atguigu,com请求资源(获取图片)
②squid向自己本地缓存中检索是否存在此图片缓存
③将检索到的图片缓存发送给squid
④squid将检索到的图片缓存发送给内网客户机
二、Squid工作模式
传统模式
将本地客户端访问公网客户端的一些资源请求缓存在squid本地,当这个资源再次被本地客户端请求时,直接从squid服务器中获取,不再去访问公网客户端。
优点:提高了访问速度,减少了出口流量。
缺点:实施麻烦,需要每台客户端都指定固定IP+端口
透明模式
与传统模式功能相同,唯一不同的就是不再需要手工绑定IP+端口了,透明代理服务器阻断网络通信,并且过滤出访问外部的HTTP(80端口)流量。如果客户端的请求在本地有缓冲则将缓冲的数据直接发给用户,如果在本地没有缓冲则向远程web服务器发出请求,其余操作和标准的代理服务器完全相同。对于linux操作系统来说,透明代理使用Iptables或者Ipchains实现。因此不需要对浏览器作任何设置。
优点:客户端不再需要手工绑定IP+端口了
缺点:需要在防火墙上的端口做重定向,配置较为复杂
反向代理模式
正向代理:代理客户端
反向代理:代理服务器
代替内网WEB服务器接收公网数据。如果公网客户端请求的资源,在代理服务器上存在缓存,直接返给公网客户端。
三、Squid软件介绍
软件包: squid-3.1.STABLE21-6.el6
系统服务: squid
主程序: /usr/sbin/squid
配置目录: /etc/squid
主配置文件: /etc/squid/squid.conf
http_port 3128 指定端口为3128
access_log /var/log/squid/access.log squid 指定日志存放路径 和 日志的用户是谁
cache_mem 64MB 指定squid进程能调用的最大内存资源
cache_dir ufs /var/spool/squid 100 16 256 缓存目录 使用的文件系统为ufs 指定缓存目录路径 缓存目录能够使用的最大的存储资源10 MB 一级目录的最大个数 二级目录的最大个数
visible_hostname proxy.benet.com 可见名称,自己的缓存服务器名称叫什么
dns_testnames www.google.com www.163.com 定期检测自己是否存活所需要测试请求的网站
maximum_object_size 4096 kb 最大缓存对象的大小,如果访问的资源比所设的值大,则客户端只能在线访问,squid不会缓存到本地。反之,则缓存到本地
reply_body_max_size 10MB 允许访问的最大文件大小,如果超过,客户端直接接收不到。
默认监听端口: TCP 3128
默认访问日志: /var/log/squid/access.log
特别说明:Squid 在经过 3.0 版本后使用 C 语言进行重构,效率大大提升,Centos6 标配 Squid 3.0 以后版本
搭建Squid传统模式
环境准备:
client: 10.10.10.11(内网)
squid—server: 10.10.10.12(内网) 和 20.20.20.12(公网)
apache 20.20.20.13(公网)
内网客户端(10.10.10.11)
#客户端添加网关指向squid服务器
[root@localhost ~]$ echo "GATEWAY=10.10.10.12" >> /etc/sysconfig/network-scripts/ifcfg-ens33 #指定11的数据交给12
[root@localhost ~]$ systemctl restart network
网关服务器 (Squid 服务器10.10.10.12)
开启第二块网卡
root@localhost ~]$ mount -t iso9660 /dev/cdrom /mnt/cdrom #挂载本地yum源
[root@localhost ~]$ systemctl stop NetworkManager # 关闭网卡守护进程[root@localhost ~]$ vim /etc/sysconfig/network-scripts/ifcfg-ens34
DEVICE=ens34
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=20.20.20.12
NETMASK=255.255.255.0
[root@localhost ~]$ service network restart
[root@localhost ~]$ vim /etc/sysctl.conf
net.ipv4.ip_forward = 1 #开启路由转发,0改为1
[root@localhost ~]$ sysctl -p
安装squid服务
[root@localhost ~]$ yum -y install squid #安装 squid 服务
[root@localhost ~]$ vim /etc/squid/squid.conf
http_port 3128
[root@localhost ~]$ service squid start
或者
[root@localhost ~]$ systemctl start squid
外网 apache 服务器 (20.20.20.13)
[root@localhost ~]$ vim /etc/sysconfig/network-scripts/ifcfg-ens33
DEVICE=ens33
TYPE=Ethernet
UUID=b1f0c82e-6315-4827-91f7-8a5f8fa0b929
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=20.20.20.13
NETMASK=255.255.255.0
[root@localhost ~]$ systemctl restart network
[root@localhost ~]$ systemctl restart httpd
[root@localhost ~]$ echo "this is server1" >> /var/www/html/index.html
测试:
①如果直接输入20.20.20.13,肯定是访问失败的
②由于是传统模式,需要人工将squid服务器IP+端口输入浏览器
③再去访问20.20.20.13,则访问成功!!
④为了验证缓存服务器的存在,去外网apache服务器那里将httpd关闭
[root@localhost html]# systemctl stop httpd
[root@localhost html]# netstat -antp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 676/rpcbind
tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 1409/dnsmasq
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1026/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1025/cupsd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1257/master
tcp 0 0 127.0.0.1:6011 0.0.0.0:* LISTEN 23856/sshd: root@pt
tcp 0 0 20.20.20.13:22 20.20.20.140:1248 ESTABLISHED 23856/sshd: root@pt
tcp6 0 0 :::111 :::* LISTEN 676/rpcbind
tcp6 0 0 :::22 :::* LISTEN 1026/sshd
tcp6 0 0 ::1:631 :::* LISTEN 1025/cupsd
tcp6 0 0 ::1:25 :::* LISTEN 1257/master
tcp6 0 0 ::1:6011 :::* LISTEN 23856/sshd: root@pt
tcp6 0 0 20.20.20.13:80 20.20.20.12:35290 TIME_WAIT -
⑤此时再去10.10.10.11上通过浏览器访问20.20.20.13,发现还是可以访问
因此证明缓存存在!!!
搭建Squid透明模式
Client设置(10.10.10.11)
设置网关10.10.10.12,将Client的需要转发的数据全部传给10.10.10.12
#客户端添加网关指向squid服务器
[root@localhost ~]$ echo "GATEWAY=10.10.10.12" >> /etc/sysconfig/network-scripts/ifcfg-ens33
[root@localhost ~]$ systemctl restart network
Squid服务器设置(10.10.10.12、20.20.20.12)
配置第二块网卡(20.20.20.12)
[root@localhost ~]$ service NetworkManager stop # 关闭网卡守护进程
[root@localhost network-scripts]$ cp -a ifcfg-ens33 ifcfg-ens34
[root@localhost ~]$ vim /etc/sysconfig/network-scripts/ifcfg-ens34
DEVICE=ens34
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=20.20.20.12
NETMASK=255.255.255.0
[root@localhost ~]$ systemctl restart network
修改内核参数,开启路由转发功能(/etc/sysctl.conf)
[root@localhost ~]$ vim /etc/sysctl.conf
net.ipv4.ip_forward = 1 #开启路由转发,0改为1
[root@localhost ~]$ sysctl -p #重新加载配置文件,立即生效
安装squid服务
[root@localhost ~]$ yum -y install squid #安装 squid 服务
[root@localhost ~]$ vim /etc/squid/squid.conf
http_port 10.10.10.12:3128 transparent # transparent ip为网关内网IP,不能写范围10.10.10.0这种
visible_hostname www.test.com #指定主机名称#相比于传统代理,这里有变动
[root@localhost ~]$ systemctl reload squid.service #重新加载配置文件,这里不需要重启,原因是squid用的是ufs文件系统,重启会退格,导致重启时间长,建议reload。[root@localhost ~]$ service iptables start && chkconfig iptables on
[root@localhost ~]$ iptables -F && iptables -L
[root@localhost ~]$ iptables -t nat -A PREROUTING -i ens33 -s 10.10.10.0/24 -p tcp --dport 80 -j REDIRECT --to-ports 3128 # 添加路由规则
#往nat表上添加一条信息,当入站网卡是ens33(内网网卡),内网网段是,协议是tcp,目标端口是80的话,做一个端口重定向,重定向到3128[root@localhost ~]$ iptables -t nat -L #查看NAT表项
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
REDIRECT tcp -- 10.10.10.0/24 anywhere tcp dpt:http redir ports 3128
[root@localhost ~]$ service iptables save #保存NAT
apache服务器设置(20.20.20.13)
[root@localhost ~]$ vim /etc/sysconfig/network-scripts/ifcfg-ens33
DEVICE=ens33
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=20.20.20.13
NETMASK=255.255.255.0
[root@localhost ~]$ systemctl restart network
[root@localhost ~]$ systemctl start httpd
[root@localhost ~]$ echo "this is server2" >> /var/www/html/index.html#创建一个文件
[root@localhost ~]$ cd /var/www/html
[root@localhost ~]$ dd if=/dev/zero of=1.txt bs=1M count=256
#在squid服务器配置文件中加入,限制可访问的最大文件大小为500MB
[root@localhost ~]$ vim /etc/squid/squid.conf
reply_body_max_size 500 MB
[root@localhost ~]$ systemctl reload squid
测试:
客户端输入20.20.20.13,能正常访问
客户端输入20.20.20.13/1.txt下载,会报错
搭建Squid反向代理模式
环境准备:
apache1 10.10.10.11(内网)
apache1 10.10.10.12(内网)
squid: 10.10.10.13(内网) 和 20.20.20.13(公网)
server: 20.20.20.14(公网)
内网服务器(10.10.10.11、10.10.10.12)
两台apache服务器相同操作
[root@localhost ~]$ systemctl start httpd && systemctl enable httpd
[root@localhost ~]$ echo "this is server1" >> /var/www/html/index.html
#echo "this is server2" >> /var/www/html/index.html 10.10.10.12
#添加网关指向squid服务器
[root@localhost ~]$ echo "GATEWAY=10.10.10.13" >> /etc/sysconfig/network-scripts/ifcfg-ens33
[root@localhost ~]$ systemctl restart network
Squid 服务器(10.10.10.13、20.20.20.13)
配置第二块网卡(20.20.20.13)
```bash
[root@localhost ~]$ service NetworkManager stop # 关闭网卡守护进程
[root@localhost network-scripts]$ cp -a ifcfg-ens33 ifcfg-ens34
[root@localhost ~]$ vim /etc/sysconfig/network-scripts/ifcfg-ens34
DEVICE=ens34
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=20.20.20.13
NETMASK=255.255.255.0
[root@localhost ~]$ systemctl restart network
修改内核参数,开启路由转发功能(/etc/sysctl.conf)
[root@localhost ~]$ vim /etc/sysctl.conf
net.ipv4.ip_forward = 1 #开启路由转发,0改为1
[root@localhost ~]$ sysctl -p #重新加载配置文件,立即生效
安装squid服务
[root@localhost ~]$ yum -y install squid 安装 squid 服务
[root@localhost ~]$ vim /etc/squid/squid.conf
http_port 20.20.20.13:80 vhost #vhost反向代理的意思
#公网ip,# squid监听的端口,客户访问网站的端口,也可以只写端口,vhost不写也可以
visible_hostname www.test.com
#cache_peer 192.168.1.2(内网中网页服务器 IP) parent 80 0 (网络中是否还有其他代理) originserver round-robin (节点以轮询的方式)
cache_peer 10.10.10.11 parent 80 0 originserver round-robin
cache_peer 10.10.10.12 parent 80 0 originserver round-robin
[root@localhost ~]$ systemctl reload squid
公网客户端(20.20.20.14)
[root@localhost ~]$ vim /etc/sysconfig/network-scripts/ifcfg-ens33
DEVICE=ens33
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=20.20.20.14
NETMASK=255.255.255.0
GATEWAY=20.20.20.13
测试:客户端输入20.20.20.13会报错,不能访问,这是因为acl的设置,之前的可以访问,是因为刚好在10网段刚好在放行列表
因此,需要在/etc/squid/squid.conf里设置acl
[root@localhost ~]$ vim /etc/squid/squid.conf
#放行列表,添加20的网段
acl localnet src 20.20.20.0/24 # RFC1918 possible internal network
acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl localnet src fc00::/7 # RFC 4193 local private network range
acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines
[root@localhost ~]$ systemctl reload squid
四、Squid ACL 介绍
①书写ACL的格式:
acl 列表名称 列表类型 列表内容
acl localnet src 20.20.20.0/24
列表名称:由管理员自行指定,用来识别控制条件
列表类型:必须使用Squid预定义的值,对应不同类别的控制条件src: 源地址(即客户机IP地址)dst: 目标地址(即服务器IP地址)port: 目标端口srcdomain: 源名称(即客户机名称)dstdomain: 目标名称(即服务器名称)time: 一天中的时刻和一周内的一天url_regex: URL规则表达式匹配urlpath_regex: URL-path规则表达式匹配,略去协议和主机名proxy_auth: 通过外部程序进行用户验证maxconn: 单一IP的最大连接数
列表内容:具体控制的对象,不同的类型对应的内容也不一样,可以有多个值,用空格分隔
②ACL写好之后,还需要应用才能生效,否则ACL没用。
http_access allow 或 deny 列表名称
③如果 http_access deny all 未定义/被注释掉,并且自己定义了一个acl 范围,默认使用最后一条规则的反向操作,即下图:最后一个规则是http_access allow localhost,其实意义是deny的。
【squid缓存服务器】相关推荐
- 编程方式刷新Squid缓存服务器的五种方法
网站进行内容更新是常有的事情,当被缓存的资源更新时,前端Squid 缓存服务器内容也必须要相应的更新,否则用户就可能会看到过期的数据.当没有程序支持时就需要每次登录到服务器上执行刷新操作,在服务器数量 ...
- squid缓存服务器
squid缓存服务器 缓存概念 作为应用层的代理服务软件,squid主要提供缓存加速和应用层过滤控制功能 代理服务器 客户端向网站发送请求数据 (为了能承受更多的并发连接客户端访问先请求代理服务器听过 ...
- Squid缓存服务器和代理介绍
squid的简单介绍 squid的概念 squid是一种用来缓存Internet数据的软件.接受来自人们需要下载的目标(object)的请求并适当的处理这些请求.也就是说,如果一个人想下载一web界面 ...
- Squid缓存服务器原理与实战演练
Squid服务基础讲解 代理缓存机制: 代理的基本类型: 1. 传统代理:需要在客户端软件手动设置指定代理服务器 2. 透明代理:无需用户手动指定,通过路由.防火墙策略将访问重定向 Squid 反向代 ...
- squid缓存服务器 ACL访问控制 传统代理 透明代理 squid日志分析 反向代理
缓存代理概述 Squid提供了强大的代理控制机制,通过合理的设置ACL,并进行限制,可以针对源地址.目标地址.访问的URL路径.访问的时间等条件进行过滤. 作为应用层的代理服务器软件,Sqiod主要提 ...
- 搭建一个大型网站架构的实验环境(Squid缓存服务器篇)
Squid是一个高性能的代理缓冲服务器,也许你已经用过Windows平台下的WinGate,MS Proxy Server等功能类似的产品.Squid是一个应用级代理,在保证客户端主机和服务器主机网络 ...
- 配置本地缓存服务器(一)
配置本地缓存服务器(一) 绝大多数系统管理员都遇到过开发部门抱怨软件包下载慢,严重影响工作效率的问题.对此问题,系统管理员也很无奈,无论接入带宽是10M.100M还是1G光纤,都不能解决这个问题.原因 ...
- 利用Squid反向代理搭建CDN缓存服务器加快Web访问速度
案例: Web服务器:域名www.abc.com IP:192.168.21.129 电信单线路接入 访问用户:电信宽带用户.移动宽带用户 出现问题:电信用户打开www.abc.com正常,移动用户打 ...
- 代理缓存服务器squid
链接 :[Linux通过squid配置代理上网] https://help.aliyun.com/knowledge_detail/41342.html?spm=5176.7841507.2.4.nS ...
最新文章
- View绘制流程的入口
- STM32 逐次逼近寄存器型(SAR)模拟数字转换器(ADC)
- 如何查看linux系统是32位还是64位
- win10固态硬盘分区 整数_惠普HP笔记本Win10改Win7系统教程
- 【kafka】kafka 错误代码解释
- 单线程reactor
- 小程序 ---- (引入iconfont,自定义组件内不显示iconfont)
- howler 音频插件使用
- 红宝书第四版的一个错误?
- 小学生python编程教程-极度舒适的全套 Python 入门教程,小学生看了也能学会
- 网站SEO优化数据分析之跳出率+停留时间
- web端接入QQ第三方登陆获取本地QQ登陆信息流程
- window10运行不了1stopt_软件与win10不兼容怎么办?完美解决Win10与软件不兼容的问题...
- 集成OpenLDAP与Kerberos实现统一认证(三):基于SASL/GSSAPI深度集成
- [YOLO专题-11]:YOLO V5 - ultralytics/train基于自定义图片数据集重新训练网络, 完成自己的目标检测
- Unity 画折线图
- Blazor Web Assembly (WASM) 主题切换
- iOS QRcode识别及相册图片二维码读取识别
- 100之内含有7与7的倍数的数
- printf用法补录
热门文章
- docker ps出错
- 重读《由C#风潮想起的-给初学编程者的忠告》有感 (转载)
- deeplearning.ai课程作业:Recurrent Neural Networks- Course 5 Week3
- 佛山市南海技师学校计算机类,2019年佛山南海信息技术学校招生录取分数线
- 工程流体力学笔记暂记9(伯努利方程在工程中的应用)
- PCB软件对比分析(AD、Pads、Allegro)
- fread和fwrite
- cst和ansys_HFSS -CST-FEKO
- 【Python量化策略】SMA双均线策略
- 关于ios::sync_with_stdio(false);和cin.tie(0);cout.tie(0);