当前位置:

Nginx系列-资源缓存配置

访客 2024-01-05 1268 0

  • 环境搭建
  • location
  • gzip压缩
  • 日志开启

不了解的可以前往看看:
Nginx系列-基础模块配置

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

  • 资源缓存配置
Nginx默认缓存配置

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

location/{roothtml;indexindex.htmlindex.htm;add_headerCache-Controlprivate;}

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

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

为啥有的资源是是200frommemorycache,有的是304呢?

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

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

Nginx配置缓存时间location~*.(gif|jpg|png|bmp|ico)${#设置缓存时间expires1d;}

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

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

Nginx禁用强缓存location/{roothtml;indexindex.htmlindex.htm;#禁用强缓存add_headerCache-Controlno-cache;}

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

Nginx禁用缓存location/{roothtml;indexindex.htmlindex.htm;add_headerCache-Controlno-store;}

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

缓存相关标识Etag

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

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

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

  1. 某些文件会周期性变更,但其内容是不变化的,此时我们不希望它被认为被修改了等。
  2. 某些服务器不能精准获取文件的最后修改时间。
文件存储

frommemorycache

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

fromdiskcache

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

总结

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

发表评论

  • 评论列表
还没有人评论,快来抢沙发吧~