写点什么

Nginx 基础配置 - 资源缓存配置

用户头像
梁龙先森
关注
发布于: 2021 年 05 月 10 日
Nginx基础配置-资源缓存配置

上一篇关于 nginx 的文章,写了关于 nginx 的如下内容:

  • 环境搭建

  • location

  • gzip 压缩

  • 日志开启

不了解的可以前往看看:前端人需要懂的nginx配置信息(一)


那通过这篇文章,你将了解到 nginx 的下面配置:

  • 资源缓存配置

Nginx 默认缓存配置

首先我们将 location 按如下进行配置,并且给 html 目录底下的 index.html 文件引用一张图片,启动 nginx。

location / {	root html;	index  index.html index.htm;  add_header Cache-Control private;}
复制代码

启动完,打开浏览器访问,刷新再查看控制面板,我们看到图片的响应信息如下:


响应头里面包含了 EtagLast-Modified 这两个用于处理协商缓存的信息,所以 nginx 默认是给资源开启缓存的。

为啥有的资源是是 200 from memory cache ,有的是 304 呢?

通过对请求头的查看,可以发现响应是 200 from memory cache 的,在请求头没有携带上 Etag 等信息,默认走了强缓存。

上面我们还给缓存配置了private,说明缓存只能针对个人用户,中间人不能缓存此响应,该响应只能应用于浏览器私有缓存中,当然默认配置项是 private。若配置了public,则表示响应可以被任何中间人缓存。

Nginx 配置缓存时间

location ~* \.(gif|jpg|png|bmp|ico)$ {  #设置缓存时间   expires 1d;  }
复制代码

上面设置了图片资源缓存时间为 1 天,重启下 nginx 看看浏览器返回效果。

可以看到了响应头返回了 Cache-Control:max-age=86400 时间,当下次请求在 1 天时间范围内,则直接采用浏览器的缓存,若超出时间,则需向服务器校验,若无资源无更新,服务器会返回 304 状态码,此时会刷新缓存的新鲜度,并将资源给客户端。

Nginx 禁用强缓存

location / {	root html;	index  index.html index.htm;  # 禁用强缓存	add_header Cache-Control no-cache;}
复制代码

在配置文件添加 add_header Cache-Control no-cache 多次刷新浏览器后,会发现文件响应码都是 304 了,走了协商缓存,也就是每次都向服务器发起了文件校验。图片如下:

Nginx 禁用缓存

location / {	root html;	index  index.html index.htm;	add_header Cache-Control no-store;}
复制代码

Cache-Control 修改为 no-store ,并执行 nginx -s reload 指令,多次刷新浏览器后,会发现资源文件的请求都走 200 了,没有从缓存获取数据了。

缓存相关标识

Etag

Etag 是一种作为 web 资源关联的标记,由响应头传送给客户端,下次请求会通过请求头 If-None-Match 带上,若服务器资源未发生变化,则返回 304 状态码。它主要是为了解决 Last-Modified 上的一些不足,比如,

  1. 某些文件修改是在秒级以下速度进行修改,但If-Modified-Since 能检查到的粒度是s级的。

采用弱 Etag,此时它是基于 MTime 来生成,只能精确到 s,所以 1s 秒内生成的 Etag 是一样的。可以避免强 Etag 造成的频繁缓存刷新。弱 EtagW/ 开头。

  1. 某些文件会周期性变更,但其内容是不变化的,此时我们不希望它被认为被修改了等。

  2. 某些服务器不能精准获取文件的最后修改时间。

文件存储

from memory cache

不请求网络资源,资源存储在内存中,一般存储的有字体、图片、脚本。

from disk cache

不请求网络资源,资源存储在磁盘中,一般存储非脚本资源,如 css。

总结

最后,再结合下如下浏览器缓存策略流程图,是不是对缓存整体流程和配置就熟悉了呢?下一篇,看看 nginx 是如何配置缓存策略。


发布于: 2021 年 05 月 10 日阅读数: 29
用户头像

梁龙先森

关注

无情的写作机器 2018.03.17 加入

vite原理/微前端/性能监控方案...,正在来的路上... 最近太忙...

评论

发布
暂无评论
Nginx基础配置-资源缓存配置