Nginx高端成长之路Api设计

【充电】《Nginx核心知识100讲》nginx缓存的基本用法

2019-01-20  本文已影响20人  言十年

极客专栏《Nginx核心知识100讲》99小节,笔记
注意:这个是看专栏视频,敲的哈。这个专栏让我收货蛮大的。

99 | 缓存的基本用法

这节课介绍在nginx之上配置上游服务器返回的响应的缓存。会涉及到一些指令的值,它是与第二部分课程中介绍过nginx进程结构的时候谈到的Cache Manager、Cache Loader 这两个进程。

nginx的cache使用

image.png

内容是放到磁盘上的,但是它的元素信息为了加快访问是放到内存中的。所以首先在proxy_cache_path指令中定义好共享内存。因为我们有多个worker进程,所以这些元信息一定是在共享内存中的。第二个定义在磁盘中哪个位置去存放缓存文件。proxy_cache_path定义好以后,其中keys_zone的name就是共享内存的名字,size就是共享内存的大小。共享内存的名字就是给proxy_cache使用的。也就是在proxy_cache_path定义了一批缓存文件存放的位置和共享内存的名称。也许有很多location,它们定义了各自独立的缓存的key或缓存策略。但是它们都可以使用同一个proxy_cache_path指定的keys_zone。所以proxy_cache在location中可以通过这个zone指定使用哪一个proxy_cache中的设置。

proxy_cache_path

image.png

use_temp_path:使用这个临时文件目录,最后改名都会放到path中。但为什么会有这个设置呢?是因为,很可能nginx所在的机器中有多个文件系统,甚至有些网络文件系统。如果我们开始的use_temp_path 目录是在一个磁盘上,而path是在另外一个磁盘上。跨磁盘复制是在cp文件。如果在一个磁盘上,那最后的改名也只是改名而已。

image.png image.png image.png image.png image.png

proxy_cache_convert_head:默认为on,会把header方法转换成get方法。

image.png

EXPIRED:表示nginx cache_vaild设置的时间还没有过期,用户的请求获取到缓存,但是上游服务器指定的缓存时间也许是小于cache_vaild设置的时间,根据上游的说法来说缓存已经过期了,但nginx配置的时候,这个缓存仍然在使用。所以和这个时候是EXPIRED,缓存已经过期。

示例

nginx配置

image.png

proxy_cache_vaild 200 1m:对于200这种返回请求,使用1分钟的有效期。

为了方便去判断缓存有没有命中,增加了一个header X-Cache-Status。

上游配置

image.png image.png

再访问一次就命中了。

image.png

在debug日志文件中。看看我们刚缓存的文件在哪里。

image.png

接下来添加一些头部控制去控制它的内容。X-Accel-Expires 3(3秒后过期)

上游的配置

image.png

但是nginx设置的是1m 过期

image.png image.png

为什么是EXPIRED呢?因为设置的是3秒过期,而nginx设置1分钟过期。只要是在1分钟内访问都是EXPIRED。

给上游配置文件中加Vary *(这个时候应该不缓存)

image.png

因为加了vary *所以永远不会缓存。

image.png

给上游配置文件中加cache-control,加了cache-control 默认也是不会缓存的。跟vary *是一样的效果。

image.png image.png

留言问题

1.cache-control的值是不是 no-cache的时候才不会缓存 ?

 作者回复
还有很多,例如no-store和private默认也不会缓存,还有max-age、stale-while-revalidate、stale-if-error也会影响。
可以阅读源码ngx_http_upstream_process_cache_control函数。

2.我想问一下Nginx在面试的时候一般都会问什么啊。

 作者回复
看面试官的倾向了,不过Nginx绝大部分知识点都在这门课的范围内,学完后一定要实践下,哪怕不是生产环境也要熟练下,就没有问题了。

上一篇下一篇

猜你喜欢

热点阅读