文章目录

  • 一、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缓存服务器】相关推荐

  1. 编程方式刷新Squid缓存服务器的五种方法

    网站进行内容更新是常有的事情,当被缓存的资源更新时,前端Squid 缓存服务器内容也必须要相应的更新,否则用户就可能会看到过期的数据.当没有程序支持时就需要每次登录到服务器上执行刷新操作,在服务器数量 ...

  2. squid缓存服务器

    squid缓存服务器 缓存概念 作为应用层的代理服务软件,squid主要提供缓存加速和应用层过滤控制功能 代理服务器 客户端向网站发送请求数据 (为了能承受更多的并发连接客户端访问先请求代理服务器听过 ...

  3. Squid缓存服务器和代理介绍

    squid的简单介绍 squid的概念 squid是一种用来缓存Internet数据的软件.接受来自人们需要下载的目标(object)的请求并适当的处理这些请求.也就是说,如果一个人想下载一web界面 ...

  4. Squid缓存服务器原理与实战演练

    Squid服务基础讲解 代理缓存机制: 代理的基本类型: 1. 传统代理:需要在客户端软件手动设置指定代理服务器 2. 透明代理:无需用户手动指定,通过路由.防火墙策略将访问重定向 Squid 反向代 ...

  5. squid缓存服务器 ACL访问控制 传统代理 透明代理 squid日志分析 反向代理

    缓存代理概述 Squid提供了强大的代理控制机制,通过合理的设置ACL,并进行限制,可以针对源地址.目标地址.访问的URL路径.访问的时间等条件进行过滤. 作为应用层的代理服务器软件,Sqiod主要提 ...

  6. 搭建一个大型网站架构的实验环境(Squid缓存服务器篇)

    Squid是一个高性能的代理缓冲服务器,也许你已经用过Windows平台下的WinGate,MS Proxy Server等功能类似的产品.Squid是一个应用级代理,在保证客户端主机和服务器主机网络 ...

  7. 配置本地缓存服务器(一)

    配置本地缓存服务器(一) 绝大多数系统管理员都遇到过开发部门抱怨软件包下载慢,严重影响工作效率的问题.对此问题,系统管理员也很无奈,无论接入带宽是10M.100M还是1G光纤,都不能解决这个问题.原因 ...

  8. 利用Squid反向代理搭建CDN缓存服务器加快Web访问速度

    案例: Web服务器:域名www.abc.com IP:192.168.21.129 电信单线路接入 访问用户:电信宽带用户.移动宽带用户 出现问题:电信用户打开www.abc.com正常,移动用户打 ...

  9. 代理缓存服务器squid

    链接 :[Linux通过squid配置代理上网] https://help.aliyun.com/knowledge_detail/41342.html?spm=5176.7841507.2.4.nS ...

最新文章

  1. View绘制流程的入口
  2. STM32 逐次逼近寄存器型(SAR)模拟数字转换器(ADC)
  3. 如何查看linux系统是32位还是64位
  4. win10固态硬盘分区 整数_惠普HP笔记本Win10改Win7系统教程
  5. 【kafka】kafka 错误代码解释
  6. 单线程reactor
  7. 小程序 ---- (引入iconfont,自定义组件内不显示iconfont)
  8. howler 音频插件使用
  9. 红宝书第四版的一个错误?
  10. 小学生python编程教程-极度舒适的全套 Python 入门教程,小学生看了也能学会
  11. 网站SEO优化数据分析之跳出率+停留时间
  12. web端接入QQ第三方登陆获取本地QQ登陆信息流程
  13. window10运行不了1stopt_软件与win10不兼容怎么办?完美解决Win10与软件不兼容的问题...
  14. 集成OpenLDAP与Kerberos实现统一认证(三):基于SASL/GSSAPI深度集成
  15. [YOLO专题-11]:YOLO V5 - ultralytics/train基于自定义图片数据集重新训练网络, 完成自己的目标检测
  16. Unity 画折线图
  17. Blazor Web Assembly (WASM) 主题切换
  18. iOS QRcode识别及相册图片二维码读取识别
  19. 100之内含有7与7的倍数的数
  20. printf用法补录

热门文章

  1. docker ps出错
  2. 重读《由C#风潮想起的-给初学编程者的忠告》有感 (转载)
  3. deeplearning.ai课程作业:Recurrent Neural Networks- Course 5 Week3
  4. 佛山市南海技师学校计算机类,2019年佛山南海信息技术学校招生录取分数线
  5. 工程流体力学笔记暂记9(伯努利方程在工程中的应用)
  6. PCB软件对比分析(AD、Pads、Allegro)
  7. fread和fwrite
  8. cst和ansys_HFSS -CST-FEKO
  9. 【Python量化策略】SMA双均线策略
  10. 关于ios::sync_with_stdio(false);和cin.tie(0);cout.tie(0);