Web缓存服务——Squid代理服务器应用(下)

简介: 正向代理:代替客户端向服务端发送请求。反向代理:代理服务端,将请求转发给多个服务端。

六、Squid 反向代理


6.1 反向代理工作机制

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

静态内容/可缓存内容,如果已写入缓存,由缓存服务器提供。动态内容,由代理服务器转发给web服务器进行请求。

网络异常,图片无法展示
|


工作机制:

  • 缓存网页对象,减少重复请求。
  • 将互联网请求轮训或按权重分配到内网Web服务器。
  • 代理用户请求,避免用户直接访问Web服务器,提高安全。

网络异常,图片无法展示
|


6.2 构建 Squid 反向代理服务器

实验环境:

squid服务器:192.168.72.70/24

web1服务器:192.168.72.60/24

web2服务器:192.168.72.40/24

客户机:192.168.72.10/24

1)缓存服务器配置

[root@yuji ~]# vim /etc/squid.conf
 ......
 #--60行--修改,插入以下几行
 http_port 192.168.72.70:80 accel vhost vport
 cache_peer 192.168.72.60 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web1
 cache_peer 192.168.72.40 parent 80 0 no-query originserver round-robin max_conn=30 weight=1 name=web2
 cache_peer_domain web1 web2 www.yuji.com
 #表示对www.yuji.com的请求,由squid向192.168.72.60和192.168.72.40的80端口发出请求
 ---------------- 虚线内是注释 ----------------------------------------------------------------------------------------
 http_port 80 accel vhost vport 
 ##squid从一个缓存变成了一个Web服务器反向代理加速模式,这个时候squid在80端口监听请求,同时和web server的请求端口(vhost vport)绑定,这个时候请求到了squid,squid是不用转发请求的,而是直接要么从缓存中拿数据、要么向绑定的端口直接请求数据。
 accel :反向代理加速模式。
 vhost :支持域名或主机名来表示代理节点。
 vport :支持IP和端口来表示代理节点。
 parent :代表为父节点,上下关系,非平级关系。
 80 :代理内部web服务器的80端口。
 0 :没有使用icp(电信运营商),表示就一台squid服务器。
 no-query :不做查询操作,直接获取数据。
 originserver :指定是源服务器。
 round-robin :指定 squid 通过轮询方式将请求分发到其中一台父节点。
 max_conn :指定最大连接数。
 weight : 指定权重。
 name :设置别名。
 ----------------------------------------------------------------------------------------------------------
 #清空之前透明模式配置的 iptables 规则
 [root@yuji ~]# iptables -F
 [root@yuji ~]# iptables -t nat -F
 [root@yuji ~]# netstat -natp | grep :80   #检查一下80端口是否被占用,如果被占用,需要关闭httpd
 [root@yuji ~]# systemctl stop httpd       #防止 httpd 服务使用的 80 端口号和 squid 反向代理配置的监听端口冲突
 [root@yuji ~]# systemctl restart squid    #重启squid服务
复制代码


网络异常,图片无法展示
|


网络异常,图片无法展示
|


2)后端两台节点服务器配置

systemctl stop firewalld
 setenforce 0
 yum install -y httpd
 systemctl start httpd
 #节点1:
 echo "tt is a girl" > /var/www/html/index.html
 #节点2:
 echo "nn is a boy" > /var/www/html/index.html
 echo "I am test02" > /var/www/html/test.html
复制代码


节点服务器1:

网络异常,图片无法展示
|


节点服务器2:

网络异常,图片无法展示
|


3)客户机的域名映射配置,进行访问验证

windows系统,修改 C:\Windows\System32\drivers\etc\hosts 文件
 192.168.72.70 www.yuji.com
 Linux系统,修改/etc/hosts文件,添加映射关系
 echo "192.168.72.70 www.yuji.com" >>/etc/hosts  #squid服务器地址
 浏览器不开启代理访问 
 http://www.yuji.com
 http://www.yuji.com/test.html
 squid服务器查看缓存命中情况:
 [root@yuji ~]# tailf /usr/local/squid/var/logs/access.log
 1654596933.113      1 192.168.72.10 TCP_MISS/404 448 GET http://www.yuji.com/favicon.ico - ROUNDROBIN_PARENT/192.168.72.40 text/html
 1654597006.164      0 192.168.72.10 TCP_MEM_HIT/200 339 GET http://www.yuji.com/ - HIER_NONE/- text/html
 1654597006.257      2 192.168.72.10 TCP_MISS/404 448 GET http://www.yuji.com/favicon.ico - ROUNDROBIN_PARENT/192.168.72.60 text/html
 1654597006.279      1 192.168.72.10 TCP_MISS/404 448 GET http://www.yuji.com/favicon.ico - ROUNDROBIN_PARENT/192.168.72.40 text/html
 #TCP_MEM_HIT/200 表示命中缓存
 #ROUNDROBIN_PARENT/192.168.72.60  自动轮询,实现负载均衡
 #ROUNDROBIN_PARENT/192.168.72.40  自动轮询,实现负载均衡
复制代码


网络异常,图片无法展示
|


浏览器不开启代理,访问 www.yuji.com

网络异常,图片无法展示
|


网络异常,图片无法展示
|


squid服务器查看访问日志中的缓存命中情况 :

tailf /usr/local/squid/var/logs/access.log

网络异常,图片无法展示
|


七、小贴士


1、squid服务器的缓存日志含义:

网络异常,图片无法展示
|


2、Squid、Varinsh和Nginx有什么区别, 工作中你怎么选择?

Squid、Varinsh和Nginx都是代理服务器。


2.1 什么是代理服务器:

代理服务器能代替用户去访问公网,并且能把访问到的数据缓存到服务器本地,等用户下次再访问相同的资源的时候,代理服务器直接从本地回应给用户。当本地没有的时候,我代替你去访问公网,我接收你的请求,我先在我自己的本地缓存找,如果我本地缓存有,我直接从我本地的缓存里回复你;如果我在我本地没有找到你要访问的缓存的数据,那么代理服务器就会代替你去访问公网。

2.2 Squid、Varinsh和Nginx的区别:

1)varnish和squid是专业的cache服务,而nginx是由第三方模块完成。

2) Nginx主要作web应用,以及反向代理。

nginx作为缓存代理服务器,轻量级,安装和配置方便,节约资源。但通过第三方模块来实现,功能较少,应用场景比较少。

3)Varnish是一款高性能的、开源的反向代理服务器和换成服务器。 (只支持反向代理)

优点:

  • Vanish具有更好的稳定性、更快的访问速度、更多的并发连接支持数。
  • 可以通过管理端口来管理缓存,使用正则表达式批量清除部分缓存,而Squid做不到。

缺点:

  • 在高并发状态下,Vanish消耗更多的CPU、I/O和内存资源。
  • 只能将缓存内容存在内存中,内存缓存限制了其容量。
  • Vanish进程一旦挂起、崩溃或者重启,缓存的数据会从内存中释放,此时所有的请求都会转发到后端服务器上,给后端服务器造成很大压力。

4)Squid的优势在于完整的庞大的cache技术资料,和很多的应用生产环境。

Squid是比较传统的代理技术,可以将缓存数据持久化,即存储到硬盘中。支持正向代理和反向代理。模式众多(传统模式、透明模式、反向代理)。

工作中选择: 复杂场景需要选择专业的cache服务,优先选择squid或者varnish。

相关文章
|
11月前
|
开发框架 监控 安全
Windows Defender 导致 Web IIS 服务异常停止排查
某日凌晨IIS服务异常停止,经查为Windows Defender安全补丁KB2267602触发引擎更新,导致系统资源波动,进而引发应用池回收。确认非人为操作,系统无重启。通过分析日志与监控,定位原因为Defender更新后扫描加重负载。解决方案:将IIS及.NET相关路径添加至Defender排除列表,避免业务影响。
1110 116
|
移动开发 数据挖掘 开发者
服务器发送事件(SSE)在现代Web开发中的关键作用
服务器发送事件(SSE)是HTML5标准协议,用于服务器主动向客户端推送实时数据,适合单向通信场景。相比WebSocket,SSE更简洁高效,基于HTTP协议,具备自动重连、事件驱动等特性。常见应用场景包括实时通知、新闻推送、数据分析等。通过Apipost等工具可轻松调试SSE,助力开发者构建高效实时Web应用。示例中,电商平台利用SSE实现秒杀活动通知,显著减少延迟并简化架构。掌握SSE技术,能大幅提升用户体验与开发效率。
|
中间件 Go
Golang | Gin:net/http与Gin启动web服务的简单比较
总的来说,`net/http`和 `Gin`都是优秀的库,它们各有优缺点。你应该根据你的需求和经验来选择最适合你的工具。希望这个比较可以帮助你做出决策。
765 35
|
开发框架 安全 前端开发
Go Web开发框架实践:模板渲染与静态资源服务
Gin 是一个功能强大的 Go Web 框架,不仅适用于构建 API 服务,还支持 HTML 模板渲染和静态资源托管。它可以帮助开发者快速搭建中小型网站,并提供灵活的模板语法、自定义函数、静态文件映射等功能,同时兼容 Go 的 html/template 引擎,具备高效且安全的页面渲染能力。
|
开发框架 JSON 中间件
Go语言Web开发框架实践:使用 Gin 快速构建 Web 服务
Gin 是一个高效、轻量级的 Go 语言 Web 框架,支持中间件机制,非常适合开发 RESTful API。本文从安装到进阶技巧全面解析 Gin 的使用:快速入门示例(Hello Gin)、定义 RESTful 用户服务(增删改查接口实现),以及推荐实践如参数校验、中间件和路由分组等。通过对比标准库 `net/http`,Gin 提供更简洁灵活的开发体验。此外,还推荐了 GORM、Viper、Zap 等配合使用的工具库,助力高效开发。
|
数据采集 Web App开发 API
FastAPI与Selenium:打造高效的Web数据抓取服务 —— 采集Pixabay中的图片及相关信息
本文介绍了如何使用FastAPI和Selenium搭建RESTful接口,访问免版权图片网站Pixabay并采集图片及其描述信息。通过配置代理IP、User-Agent和Cookie,提高爬虫的稳定性和防封禁能力。环境依赖包括FastAPI、Uvicorn和Selenium等库。代码示例展示了完整的实现过程,涵盖代理设置、浏览器模拟及数据提取,并提供了详细的中文注释。适用于需要高效、稳定的Web数据抓取服务的开发者。
1143 15
FastAPI与Selenium:打造高效的Web数据抓取服务 —— 采集Pixabay中的图片及相关信息
|
存储 缓存
.NET 6中Startup.cs文件注入本地缓存策略与服务生命周期管理实践:AddTransient, AddScoped, AddSingleton。
记住,选择正确的服务生命周期并妥善管理它们是至关重要的,因为它们直接影响你的应用程序的性能和行为。就像一个成功的建筑工地,工具箱如果整理得当,工具选择和使用得当,工地的整体效率将会大大提高。
464 0
|
网络协议 Java Shell
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
1259 7
|
XML 前端开发 JavaScript
PHP与Ajax在Web开发中的交互技术。PHP作为服务器端脚本语言,处理数据和业务逻辑
本文深入探讨了PHP与Ajax在Web开发中的交互技术。PHP作为服务器端脚本语言,处理数据和业务逻辑;Ajax则通过异步请求实现页面无刷新更新。文中详细介绍了两者的工作原理、数据传输格式选择、具体实现方法及实际应用案例,如实时数据更新、表单验证与提交、动态加载内容等。同时,针对跨域问题、数据安全与性能优化提出了建议。总结指出,PHP与Ajax的结合能显著提升Web应用的效率和用户体验。
481 3
|
Go UED
Go Web服务中如何优雅平滑重启?
在生产环境中,服务升级时如何确保不中断当前请求并应用新代码是一个挑战。本文介绍了如何使用 Go 语言的 `endless` 包实现服务的优雅重启,确保在不停止服务的情况下完成无缝升级。通过示例代码和测试步骤,详细展示了 `endless` 包的工作原理和实际应用。
556 3