美文网首页Nginx高端成长之路Api设计
【充电】《Nginx核心知识100讲》nginx缓存的基本用法

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

作者: 言十年 | 来源:发表于2019-01-20 13:35 被阅读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绝大部分知识点都在这门课的范围内,学完后一定要实践下,哪怕不是生产环境也要熟练下,就没有问题了。

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/gsjxjqtx.html