当前位置: 首页 > news >正文

Nginx缓存之web缓存配置

        Web 缓存可节约网络带宽,有效提高用户打开网站的速度。由于应用服务器被请求次数的降低,也相对使它的稳定性得到了提升。Web 缓存从数据内容传输的方向分为前向位置缓存和反向位置缓存两类。如下图所示。

        前向位置缓存既可以是用户的客户端浏览器,也可以是位于用户 ISP 或内部局域网的服务器。反向位置缓存通常位于互联网端,如内容分发网络或网站的反向代理缓存等。

1.客户端缓存 

        当客户端访问某一网站时,通常会多次访问同一页面,如果每次都到网站服务器获取相同的内容,不仅会造成用户自身网络资源的浪费,也会加重网站服务器的负载。为了提高访问效率,客户端浏览器会将访问的内容在本地生成内容缓存。
        由于网站的内容经常变化,为了保持缓存的内容与网站服务器的内容一致,客户端会通过内容缓存的有效期及 Web 服务器提供的访问请求校验机制,快速判断请求的内容是否已经更新。客户端缓存校验流程如下图所示。

        客户端通过内容缓存有效期的本地校验和由 Web 服务端提供的服务端校验两种方式共同校验内容缓存是否有效,这两种方式都是通过 HTTP 消息头中的相应字段进行判断或与服务端交互的。HTTP 消息头字段功能说明如下表所示。

消息头字段示例类型功能
Cache-ControlCache-Control: no-cache请求/响应HTTP/1.1 协议加入的缓存控制字段,用于服务端告知客户端是否缓存及缓存的有效期。也可用于客户端本地缓存检验流程的控制
PragmaPragma: no-cache请求/响应一个在 HTTP/1.0 中规定的通用消息头字段,当字段值为 no-cache 时,功能与消息头 Cache-Control:no-cache 的设定一致
DateDate: Tue, 15 Nov 2018 08:12:31 GMT响应原始服务器消息发出的时间
ExpiresExpires: Fri, 16 Aug 2019 19:43:31 GMT响应告知客户端当前响应内容缓存的有效期,是个绝对时间,属于 HTTP/1.0 的协议约定,优先级低于 HTTP/1.1 协议的 max-age 设置
Last-ModifiedLast-Modified: Fri, 16 Aug 2019 12:45:26 GMT响应当前响应数据的最后修改时间
If-Modified-SinceIf-Modified-Since: Fri, 16 Aug 2019 19:43:31 GMT请求将当前请求本地内容缓存的最后修改时间发送给服务端进行校验,如果请求的内容在指定时间之后被修改了,将返回被修改的内容,否则返回响应状态码 304,客户端将使用本地缓存
If-Unmodified-SinceIf-Unmodified-Since: Fri, 16 Aug 2019 19:43:31 GMT请求将当前请求本地内容缓存的最后修改时间发送给服务端进行校验,如果请求的内容在指定时间之后未被修改,将继续传输内容,否则返回响应状态码 412,其常被用在 byte-range 请求的断点续传场景
ETagETag: "0a3ea38e4fd51:0"响应当前响应数据的实体标签值
If-MatchIf-Match: "0a3ea38e4fd51:0"请求将当前内容缓存的 ETag 值发送给服务端进行校验,如果与服务端的 ETag 匹配一致就继续响应请求,否则返回响应状态码 412
If-None-MatchIf-None-Match: "0a3ea38e4fd51:0"请求将当前内容缓存的 ETag 值发送给服务端进行校验,如果与服务端的 ETag 值匹配不一致,则返回新的内容,否则返回响应状态码 304,客户端将使用本地缓存

2.正向代理缓存 

        当客户端浏览器通过正向代理缓存服务器访问互联网 Web 服务器时,正向代理缓存服务器会先检查本地的缓存,如果本地已经有客户端访问网站的内容缓存,则会根据缓存策略将缓存内容返回客户端;如果本地没有相应的内容缓存,则会向网站 Web 服务器发起访问请求,在获得响应数据后,它会先将响应内容在本地缓存生成内容缓存,然后再转发给客户端。
        正向代理缓存架构如下图所示。

        通常是多个客户端共享一台正向代理缓存服务器,当一台客户端访问某个网站后,其他客户端均会共享这个网站的缓存,无须再向网站服务器发起访问请求,提升内容响应速度。
        通过共享正向代理缓存服务器,不仅减少了外网的访问次数,也降低了网络带宽的需求。通过正向代理缓存服务器的控制策略,可以有效地针对内网客户端及访问的目标进行过滤控制,提升内网安全。
        正向代理缓存服务器并不严格限制其一定要在客户端的内网,因它是通过七层协议实现代理转发的,所以只要客户端通过 HTTP 或 HTTPS 协议可以连接到正向代理服务器即可。

3.内容分发网络 

        内容分发网络(CDN)是基于反向代理缓存技术实现的大规模网络应用,其将缓存服务器分布到用户访问相对集中的地区或网络中,当用户访问目标网站时,它会利用全局负载策略,将用户的访问分配到离用户最近的缓存服务器,并由被分配的缓存服务器处理用户的访问请求。
        国内跨运营商的网络访问会很慢,通过 CDN 的分配策略,可有效地优化网络路径,并结合 CDN 缓存服务器节点的缓存,有效提高用户的访问速度,从而提升用户体验。内容分发网络架构如下图所示。

        CDN 将被加速的网站内容缓存在离用户最近的缓存服务器中,通常被缓存的是更新较少的静态资源(如静态页面、CSS、JavaScript、图片、视频等),CDN 的各缓存服务器节点是通过 HTTP 响应头的 Cache-Control 来控制本地内容缓存有效期的。当客户端的请求被分配到 CDN 缓存服务器节点时,CDN 缓存服务器会先判断内容缓存是否过期,若内容缓存在有效期内,则直接返回客户端,否则将向源站点发出回源请求,并从源站点获取最新的数据,在更新本地缓存后将响应数据返回客户端。
        CDN 的缓存有效期设置会影响内容缓存的回源率。如果缓存有效期设置的较长,回源率较低,则会使缓存服务器的缓存数据与源网站不同步,影响访问;如果缓存有效期设置的较短,回源率较高,则会增加源网站的负载,影响 CDN 缓存服务器的使用效率。
        因此,CDN 服务商会根据被缓存资源的类型(如文件后缀)、路径等多个维度为使用者提供缓存有效期设置接口,并为用户提供更加细化的缓存时间管理。除了可以设置缓存时间外,也可以通过"缓存刷新"接口对 CDN 缓存服务器的缓存数据进行强制更新。 

4.反向代理缓存

        反向代理缓存是基于反向代理技术在用户请求转发到 Web 服务器前进行缓存加载的缓存方式。反向代理缓存服务器通常位于 Web 服务器之前,通过反向代理缓存服务器可以对被代理服务器的响应内容进行缓存,以加速用户请求响应的处理速度,降低被代理服务器的负载。反向代理缓存服务器架构如下图所示。

        反向代理缓存提高了网站内容的加载速度,降低了被代理服务器的负载,并可以在被代理服务器发生故障时通过缓存的内容作为备份来提高网站的可用性。
        提升网站性能。反向代理缓存以与静态内容相同的处理速度为所有类型的缓存内容提供用户响应处理,从而减少因被代理服务器动态计算产生的延迟,进一步提升网站的性能。
        增加资源容量。因为减少了被代理服务器的请求,被代理服务器将有更多的计算资源处理动态响应,相对增加了应用服务器的资源容量。
        提高可用性。通过反向代理缓存服务器的本地缓存,可以在被代理服务器出现故障或停机产生的故障等待时,让用户仍可访问网站(单向的浏览缓存中的内容),避免了用户因收到故障信息而产生的负面影响。

相关文章:

  • springmvc拦截器 和 异常拦截器
  • ai代码问题记录
  • 光纤三维布里渊温度和应变分布matlab模拟与仿真
  • 心跳机制讲解及实例
  • token无感刷新
  • 装饰者模式(设计模式)
  • JavaScript中的解构赋值
  • 为啥找对象千万别找大厂男,还好我不是大厂的。。
  • Python武器库开发-武器库篇之链接提取器(六十)
  • 【跟我学RISC-V】(三)openEuler特别篇
  • 园区无线网新架构:无CAPWAP的集中式转发
  • 一文详解:什么是小程序SDK?
  • java1.8运行arthas-boot.jar运行报错解决
  • 编程属于什么类学科门类:深入探索与解析
  • PDM 测试
  • $translatePartialLoader加载失败及解决方式
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • CEF与代理
  • Flannel解读
  • gitlab-ci配置详解(一)
  • Promise面试题2实现异步串行执行
  • 阿里云购买磁盘后挂载
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 如何胜任知名企业的商业数据分析师?
  • 一个SAP顾问在美国的这些年
  • 再次简单明了总结flex布局,一看就懂...
  • 在Docker Swarm上部署Apache Storm:第1部分
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • ​​​【收录 Hello 算法】10.4 哈希优化策略
  • ​学习笔记——动态路由——IS-IS中间系统到中间系统(报文/TLV)​
  • #1015 : KMP算法
  • #HarmonyOS:软件安装window和mac预览Hello World
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • (C#)一个最简单的链表类
  • (done) 两个矩阵 “相似” 是什么意思?
  • (Java入门)抽象类,接口,内部类
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (二)JAVA使用POI操作excel
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (九十四)函数和二维数组
  • (转)详解PHP处理密码的几种方式
  • .DFS.
  • .mysql secret在哪_MySQL如何使用索引
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .NET基础篇——反射的奥妙
  • .NET面试题(二)
  • .net实现头像缩放截取功能 -----转载自accp教程网
  • .NET性能优化(文摘)
  • .so文件(linux系统)
  • @Async注解的坑,小心
  • []FET-430SIM508 研究日志 11.3.31
  • [【JSON2WEB】 13 基于REST2SQL 和 Amis 的 SQL 查询分析器