Nginx缓存之web缓存配置

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

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

1.客户端缓存

当客户端访问某一网站时,通常会多次访问同一页面,如果每次都到网站服务器获取相同的内容,不仅会造成用户自身网络资源的浪费,也会加重网站服务器的负载。为了提高访问效率,客户端浏览器会将访问的内容在本地生成内容缓存。

由于网站的内容经常变化,为了保持缓存的内容与网站服务器的内容一致,客户端会通过内容缓存的有效期及 Web 服务器提供的访问请求校验机制,快速判断请求的内容是否已经更新。客户端缓存校验流程如下图所示。

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

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

反向代理缓存提高了网站内容的加载速度,降低了被代理服务器的负载,并可以在被代理服务器发生故障时通过缓存的内容作为备份来提高网站的可用性。

提升网站性能。反向代理缓存以与静态内容相同的处理速度为所有类型的缓存内容提供用户响应处理,从而减少因被代理服务器动态计算产生的延迟,进一步提升网站的性能。

增加资源容量。因为减少了被代理服务器的请求,被代理服务器将有更多的计算资源处理动态响应,相对增加了应用服务器的资源容量。

提高可用性。通过反向代理缓存服务器的本地缓存,可以在被代理服务器出现故障或停机产生的故障等待时,让用户仍可访问网站(单向的浏览缓存中的内容),避免了用户因收到故障信息而产生的负面影响。

相关推荐
tian-ming1 小时前
黑马点评——基于Redis
数据库·redis·缓存
繁川16 小时前
Spring Boot缓存预热实战指南
spring boot·spring·缓存
B1nna2 天前
Redis学习(三)缓存
redis·学习·缓存
程序员JerrySUN2 天前
Yocto 项目 - 共享状态缓存 (Shared State Cache) 机制
linux·嵌入式硬件·物联网·缓存·系统架构
A22742 天前
Redis——缓存雪崩
java·redis·缓存
weisian1512 天前
Redis篇--应用篇3--数据统计(排行榜,计数器)
数据库·redis·缓存
言之。2 天前
Redis单线程快的原因
数据库·redis·缓存
中古传奇2 天前
【3.1 以太网RDMA优化--网卡缓存资源维度】
网络·缓存·rdma
李匠20242 天前
大数据学习之Redis 缓存数据库二,Scala分布式语言一
大数据·数据库·缓存
怒码ing2 天前
Java包装类型的缓存
java·开发语言·缓存