Squid 缓存代理(一)---原理及搭建(传统代理、透明代理)

news2024/11/22 20:27:08

前言

Squid 是 Linux 系 统 中 最 常 用 的 一 款 开 源 代 理 服 务 软 件 ( 官 方 网 站 为 http://www.squid-cache.org),可以很好地实现 HTTP 和 FTP,以及 DNS 查询、SSL 等应用的缓存代理。缓存代理作为应用层的代理服务软件,Squid 主要提供缓存加速、应用层过滤控制的功能。

Squid理服务器应用

Squid 主要提供缓存加速、应用层过滤控制的功能。

代理的工作机制

  1. 代替客户机向网站请求数据,从而可以隐藏用户的真实IP地址

  2. 将获得的网页数据(静态Web元素)保存到缓存中并发送给客户机,以便下次请求相同的数据时快速响应。

代理服务器的概念及其作用

  • 代理服务器是一个位于客户端的原始(资源)服务器之间的服务器,为了从原始服务器取得内容,客户端向代理服务器发送一个请求并指定目标原始服务器,然后代理服务器向原始服务器转交请求并将获得的内容返回给客户端。

  • 缓存代理对于Web至关重要,尤其对于大型高负载Web站点。缓存可作为性能优化的一个重要手段,可以极大减轻后端服务器的负载。通常对于静态资源,即较少经常更新的资源,入图片,css或js等进行缓存,从而在每次刷新浏览器的时候,不用重新请求,而是从缓存里面读取,这样就可以减轻服务器的压力

其主要作用有

资源获取:代替客户端实现从原始服务器的资源获取;

加速访问:代理服务器可能离原始服务器更近,从而起到一定的加速作用;

缓存作用:代理服务器保存从原始服务器所获取的资源,从而实现客户端快速的获取;

隐藏真实地址:代理服务器代替客户端去获取原始服务器资源,从而隐藏客户端真实信息。

常用软件:Squid / nginx / varnish / cdn

内容分发网络CDN简述

CDN的全称是Content Delivery Network,即内容分发网络。其目的是通过在现有的Internet中增加一层新的CACHE(缓存)层,将网站的内容发布到最接近用户的网络”边缘“的节点,使用户可以就近取得所需的内容(就近原则),提高用户访问网站的响应速度。从技术上全面解决由于网络带宽小、用户访问量大、网点分布不均等原因,提高用户访问网站的响应速度。

简单的说,CDN的工作原理就是将您源站的资源缓存到位于全球各地的CDN节点上,用户请求资源时,就近返回节点上缓存的资源,而不需要每个用户的请求都回您的源站获取,避免网络拥塞缓解源站压力,保证用户访问资源的速度和体验

CDN的优势很明显:
(1)CDN节点解决了跨运营商和跨地域访问的问题,访问延时大大降低;
(2)大部分请求在CDN边缘节点完成,CDN起到了分流作用,减轻了源站的负载。
在这里插入图片描述

Squid代理的类型

传统代理:适用于Internet正向代理,需在 客户端指定代理服务器的地址和端口

透明代理:客户机不需指定代理服务器的地址和端口,而是通过默认路由、防火墙策略将Web访问重定向给代理服务器处理。

反向代理:如果Squid反向代理服务器中缓存了该请求的资源,则将该请求的资源直接返回给客户端:否则反向代理服务器将向后台的WEB服务器请求资源,然后将请求的应答返回给客户端,同时也将应答缓存在本地,供下一个请求者使用。

安装Squid服务

原理图示意
在这里插入图片描述

#环境
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
1.*编译安装 Squid
yum -y install gcc gcc-c++ make
tar zxvf squid-3.5.28.tar.gz -C /opt/
cd /opt/squid-3.5.28

./configure --prefix=/usr/local/squid \				#指定安装目录路径
--sysconfdir=/etc \									#指定配置文件路径
--enable-arp-acl \									#MAC地址管控,防止客户端使用IP欺骗
--enable-linux-netfilter \							#使用内核过滤
--enable-linux-tproxy \								#支持透明模式
--enable-async-io=100 \								#异步IO,提升存储性能
--enable-err-language="Simplify_Chinese" \			#错误信息的显示语言
--enable-underscore \								#允许URL中有下划线
--disable-poll \									#关闭默认使用 poll 模式
--enable-epoll \									#开启epoll模式提升性能
--enable-gnuregex									#使用GNU正则表达式

------------------------------------------------------------------------------
./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 \
--disable-poll \
--enable-epoll \
--enable-gnuregex

make && make install

ln -s /usr/local/squid/sbin/* /usr/local/sbin/
ln -s /usr/local/squid/bin/* /usr/local/bin/

useradd -M -s /sbin/nologin squid

chown -R squid:squid /usr/local/squid/var/		#此目录用于存放缓存文件
2.*修改 Squid 的配置文件
vim /etc/squid.conf
......
--56行--插入
http_access allow all				#放在 http_access deny all 之前,允许任意客户机使用代理服务,控制规则自上而下匹配
http_access deny all
http_port 3128						#用来指定代理服务监听的地址和端口(默认的端口号为 3128)
--61行--插入
cache_effective_user squid			#添加,指定程序用户,用来设置初始化、运行时缓存的账号,否则启动不成功
cache_effective_group squid			#添加,指定账号基本组

coredump_dir /usr/local/squid/var/cache/squid		#指定缓存文件目录
3.*Squid 的运行控制
#检查配置文件语法是否正确
squid -k parse

#启动 Squid,第一次启动 Squid 服务时,会自动初始化缓存目录
squid -z 					#-z 选项用来初始化缓存目录
squid						#启动 squid 服务

netstat -anpt | grep "squid"

在这里插入图片描述

4.*创建 Squid 服务脚本
vim /etc/init.d/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

#2345是默认自启动级别,如是-代表任何级别都不自启动;90是启动优先级,25是停止优先级,优先级范围是0-100,数字越大,优先级越低。
chmod +x /etc/init.d/squid
chkconfig --add squid
chkconfig --level 35 squid on

在这里插入图片描述

构建传统代理服务器

vim /etc/squid.conf
......
http_access allow all
http_access deny all
http_port 3128
cache_effective_user squid
cache_effective_group squid
--63行--插入
cache_mem 64 MB				#指定缓存功能所使用的内存空间大小,便于保持访问较频繁的WEB对象,容量最好为4的倍数,单位为MB,一般设为物理内存的1/3
cache_swap_high 95			#cache目录使用量大于95%时,开始清理旧的cache
cache_swap_low 90			#cache目录清理到90%时停止

reply_body_max_size 100 MB			#允许用户下载的最大文件大小,以字节为单位,当下载超过指定大小的Web对象时,浏览器的报错页面中会出现“请求或访问太大”的提示默认设置0表示不进行限制
maximum_object_size 512000 KB		#设置squid磁盘缓存最大文件,以KB为单位,超过的文件不保存到硬盘,而是直接转发给用户
maximum_object_size_in_memory 512 KB	#设置squid内存缓存最大文件,超过的文件不保存到内存
minimum_object_size 0 KB			设置squid磁盘缓存最小文件


service squid restart
systemctl restart squid

#生产环境中还需要修改防火墙规则
iptables -F
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT

#客户机的代理配置
打开浏览器,工具-->Internet选项-->连接-->局域网设置-->开启代理服务器(地址:Squid服务器IP地址,端口:3128)

#查看 Squid 访问日志的新增记录中的缓存命中情况
tail -f /usr/local/squid/var/logs/access.log
        TCP_MEM_HIT/200

#查看 Web 访问日志的新增记录
tail -f /var/log/httpd/access_log
在浏览器输入Web服务器IP地址访问,查看Web服务器访问日志,显示的是由代理服务器替客户机在访问。

客户端:192.168.60.16
Squid服务器:192.168.60.8
web服务器:192.168.60.111
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

搭建透明代理

在这里插入图片描述
客户端1:192.168.60.16
客户端2:192.168.60.44
squid服务器内网网关:192.168.60.8
squid服务器外网网关:12.0.0.8
外网web服务器:12.0.0.100

Squid服务器配置
vim /etc/squid.conf
......
http_access allow all
http_access deny all
--60行--修改添加提供内网服务的IP地址,和支持透明代理选项 transparent
http_port 192.168.60.8:3128 transparent


systemctl restart squid

#开启路由转发,实现本机中不同网段的地址转发
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
sysctl -p

#修改防火墙规则
iptables -F
iptables -t nat -F
iptables -t nat -I PREROUTING -i ens33 -s 192.168.60.0/24 -p tcp --dport 80 -j REDIRECT --to-ports 3128	#用于转发http协议
iptables -t nat -I PREROUTING -i ens33 -s 192.168.60.0/24 -p tcp --dport 443 -j REDIRECT --to 3128	#用于转发https协议
iptables -I INPUT -p tcp --dport 3128 -j ACCEPT

Web服务器配置
yum install -y httpd
systemctl start httpd


关闭客户机的浏览器之前设置的代理服务器的功能后访问 http://12.0.0.12

#查看 Squid 访问日志的新增记录
tail -f /usr/local/squid/var/logs/access.log


#查看 Web 访问日志的新增记录,显示的是由代理服务器的外网口代替客户机在访问
tail -f /var/log/httpd/access_log

ACL访问控制

在配置文件 squid.conf 中,ACL 访问控制通过以下两个步骤来实现:
(1)使用 acl 配置项定义需要控制的条件;
(2)通过 http_access 配置项对已定义的列表做“允许”或“拒绝”访问的控制。
1.定义访问控制列表
格式:
acl 列表名称 列表类型 列表内容 …

vim /etc/squid.conf
......
acl localhost src 192.168.60.10/32 					#源地址为 192.168.60.10
acl MYLAN src 192.168.60.0/24 192.168.1.0/24		#客户机网段
acl destinationhost dst 192.168.60.15/32			#目标地址为 192.168.60.15
acl MC20 maxconn 20									#最大并发连接 20
acl PORT port 21									#目标端口 21
acl DMBLOCK dstdomain .qq.com						#目标域,匹配域内所有站点
acl BURL url_regex -i ^rtsp:// ^emule://			#以 rtsp://、emule:// 开头的目标 URL地址,-i表示忽略大小写
acl PURL urlpath_regex -i \.mp3$ \.mp4$ \.rmvb$		#以 .mp3、.mp4、.rmvb 结尾的目标 URL 路径
acl WORKTIME time MTWHF 08:30-17:30					#时间为周一至周五 8:30~17:30,“MTWHF”为每个星期的英文首字母


#启动对象列表管理
mkdir /etc/squid
vim /etc/squid/dest.list
192.168.60.15
192.168.1.0/24

vim /etc/squid.conf
......
acl destinationhost dst "/etc/squid/dest.list"			#调用指定文件中的列表内容
......
http_access deny(或allow) destinationhost				#注意,如果是拒绝列表,需要放在http_access allow all前面

systemctl restart squid

http_access allow all 表示放通所有
http_access deny all 表示拒绝所有

先设置个别放通然后http_access deny all 就是白名单
拒绝个别然后http_access allow all 就是黑名单
规则匹配是从上向下依次匹配

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/718105.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C#(四十八)之StreamWriter StreamWriter使用方法及与FileStream类的区别

StreamReader类的属性: CurrentEncoding:获取流使用的字符编码 EndOfStream:指示当前位置是否在流的末尾 StreamReader类的方法: Read():读取流中的下一个字符或下一组字符。 ReadBlock():读取一个字符…

使用Maven对Scala独立应用程序进行编

任务描述 本关任务:使用Scala编写一个找出README.md文件中包含a的行数和包含b的行数的程序,并使用Maven对程序进行编译打包提交到Saprk上。 相关知识 在终端中执行如下命令创建一个文件夹 sparkapp3作为应用程序根目录: cd ~ # 进入用户主…

银河麒麟服务器v10 sp1 redis开机自动启动

接上一篇:银河麒麟服务器v10 sp1 安装 redis_csdn_aspnet的博客-CSDN博客 将redis_init_script文件复制到/etc/init.d下,重命名为redisd: rootxxx-pc:cp /usr/local/redis/redis-7.0.11/utils/redis_init_script /etc/init.d/redisd 内容如…

可视化网页设计工具 Blocs「Mac」

Blocs是一款用于网页设计和开发的可视化工具。它提供了一个直观且强大的界面,使用户可以轻松地创建精美的网页,而无需编写代码。 使用Blocs,您可以通过拖放元素、调整布局、编辑文本和图像等来构建网页。它提供了丰富的预设组件和模板&#x…

科幻大作【InsCode Stable Diffusion美图活动一期】

一、 Stable Diffusion 模型在线使用地址: https://inscode.csdn.net/inscode/Stable-Diffusion 二、模型相关版本和参数配置: Model: GuoFeng3, Version: v1.2.0 迭代步数:30 采样方法:DPM 2M Karras 或者 DPM 2M SDE Karras3 宽高:10…

Kubernetes入门实战课-k8s实验环境

Kubernetes入门实战课-k8s实验环境 文章目录 Kubernetes入门实战课-k8s实验环境docker 架构图 回顾Kubernetes 作用minikube小型测试环境Kubernetes命令行工具kubectlminikube 安装过程minikube 环境示意图Kubernetes 和 Docker 之间有什么区别? docker 架构图 回顾…

ModaHub魔搭社区:详解GPTCache 系统的五个主要组件

目录 LLM 适配器(LLM Adapter) Embedding 生成器(Embedding Generator) 缓存管理器(Cache Manager) 相似性评估器 (Similarity Evaluator) 后期处理器(Post Process…

Flink DataStream之从Kafka读数据

搭建Kafka 参考:centos7下kafka2.12-2.1.0的安装及使用_kafka2.12-2.1.0 steam_QYHuiiQ的博客-CSDN博客 启动zookeeper [rootlocalhost kafka_2.12-2.8.1]# pwd /usr/local/wyh/kafka/kafka_2.12-2.8.1 [rootlocalhost kafka_2.12-2.8.1]# ./bin/zookeeper-server…

Windows 环境下Docker 安装伪分布式 Hadoop

Windows 环境下Docker 安装伪分布式 Hadoop 1、环境2、拉取镜像3、启动容器4、预备操作4.1安装vim4.1.1 更新软件包信息4.1.2 安装vim 4.2 换源4.2.1 备份镜像源设置文件4.2.2 编辑镜像源设置文件4.2.3 重新更新一下软件包信息 4.3 同步上海时间4.3.1 安装 tzdata4.3.2 设置 tz…

[AJAX]原生AJAX——服务端如何发出JSON格式响应,客户端如何处理接收JSON格式响应

服务端代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> &l…

IPV6使用越来越广,您会配置吗?

前面针对IPv6写过一篇文章&#xff0c;但是好多网友反映没有读懂&#xff0c;今天再给大家把内容浓缩一下&#xff0c;教给大家如何配置。 IPV6的推出主要是为了解决地址空间的不足&#xff0c;从而进一步的促进互联网的发展。IPV6地址空间大到惊人&#xff0c;有人比喻地球上…

Rust in Action笔记 第十章 进程、线程和容器

Rust的闭包也就是类似lambda表达式&#xff0c;大致的格式是|a, b| {...} &#xff0c;竖线里面的是参数&#xff0c;花括号里面的是函数逻辑&#xff1b;通过thread::spawn(|| {})产生的线程&#xff0c;括号内的参数实际上就是一个闭包&#xff0c;因为创建新的线程不需要参数…

【论文阅读】StyleganV1 算法理解

文章目录 为什么提出&#xff1f;具体是怎么做的&#xff1f;1.解耦的思想&#xff08;对应文章第四章4.Disentanglement studies&#xff09;1.1 感知路径长度&#xff08;对应4.1Perceptual path length&#xff09;1.2 线性可分离性&#xff08;对应4.2Linear separability&…

Chrome DevTools、Vue DevTools、vs和DevTools调试

目录 Elements DOM节点&#xff08;增删改&#xff09;调试 Styles DOM结构 增删属性 模拟元素的伪状态&#xff0c;方便调试 Computed Layout Event Listeners Network Application 资源列表&#xff08;可改&#xff09;本地存储Cookie、WebStorage&#xff08;loca…

人工智能学习07--pytorch22--目标检测:YOLO V3 SPP

视频链接&#xff1a; https://www.bilibili.com/video/BV1t54y1C7ra/?vd_sourceb425cf6a88c74ab02b3939ca66be1c0d yolov3 spp spp&#xff1a;空间金字塔池化 trick&#xff1a;实现的小技巧&#xff0c;方法。&#xff08; up&#xff1a;Bag of Freebies里有很多trick&…

【C++学习笔记】C++中的异常概念异常的使用注意事项异常的优缺点

异常 1 C语言传统的处理异常的方式2 C异常的概念3 异常的使用以及注意事项3.1 异常的简单使用3.2 使用异常的注意事项3.3 异常的重新抛出3.4 异常规范3.5 异常安全 4 C标准库的异常体系5 异常的优缺点6 总结 1 C语言传统的处理异常的方式 C语言传统的错误处理机制&#xff1a;…

https安全传输原理:

内容来自思学堂&#xff1a; 信息裸奔——>对称加密——>非对称加密——>非对称和对称加密——>权威第三方机构CA数字签名

C++图形开发(5):逐渐变大(小)的小球

文章目录 1.逐渐变大的小球2.逐渐变小的小球 今天所讲的逐渐变大&#xff08;小&#xff09;的小球实际上就是基于上次的缓慢下落的小球的基础上的&#xff08;下落的小球详见&#xff1a;C图形开发&#xff08;4&#xff09;&#xff1a;下落的小球&#xff09; 1.逐渐变大的…

蓝桥杯专题-试题版含答案-【数数小木块】【精挑细选】【国王的魔镜】【字符串逆序输出】

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…

每日浅读SLAM论文——简析Cartographer

文章目录 二维激光SLAM简单框架前端scan matchingSubmaps构建 后端分支定界优化csm&#xff08;CorrelativeScanMatch&#xff09; 代码实现框架 Cartographer&#xff08;论文名&#xff1a;Real-Time Loop Closure in 2D LIDAR SLAM&#xff09;是目前二维激光SLAM中应用最广…