码迷,mamicode.com
首页 > 系统相关 > 详细

Nginx/tengine做cache时缓存机制—存不存、存多久、用不用方法论(图自画)

时间:2016-04-14 22:45:45      阅读:462      评论:0      收藏:0      [点我收藏+]

标签:nginx tengine cache cdn 缓存

    Nginx/tengine(后面名称只写nginx了)单纯做cache性能比不过ats,特别是在磁盘处理方面,不过论综合能力nginx就是大拿了,他集web服务器、负载均衡、cache三种能力于一身,可以说是非常综合性的选手。比如说一个中型网站的场景选型,前端是负载,后端托着一堆apache服务器,现在该到前端负载选型的了,虽然lvs和ha单纯从负载的性能要比nginx好一些,但我还是会选nginx,因为nginx在做负载的同时,可以将热点的静态内容cache一遍,做一次加速,无形间减轻了后端web服务器的一些压力,提高了用户体验,一箭双雕。Nginx做cache配置是很灵活的,里面有各种缓存指令,起初接触会摸不到北,我用了也有一段时间了,现在总结一下nginx做cache时我认为的三大症结——存不存、存多久、用不用?

    nginx的资源是否缓存是由客户端、源站与nginx的缓存配置共同决定,nginx如果没有缓存策略配置,默认按照request请求头、header响应头信息走标准的http缓存判断机制(看cache-control、expires、cookie这些属性),仅当一个资源没有被设为不能缓存的黑名单,且有大于0的存放时间的生命周期时,资源才被缓存,对于nginx缓存判断流程我花精力画了一张结构图分享如下:


技术分享


 

   测试举例,默认配置,一个200ok资源(http://www.haixiano.com/member/login.php)  只有cookie信息没有max-age。

第一次测试配置参数:

proxy_cache_valid 200 10m;

#proxy_ignore_headers Set-Cookie; 注释掉


头信息以及测试如下:

技术分享

多次访问操作如下:

技术分享


多次访问日志如下(全部MISS):

技术分享


小结:虽然有对于200ok的信息设置缓存时间为10分钟,但是cookie信息的首先判断是不能存,所以根本不会看你对200ok资源的缓存时间,最终结论是不能存。


第二次测试配置参数:

#proxy_cache_valid 200 10m;注释掉

proxy_ignore_headers Set-Cookie; 


多次访问日志如下(全部MISS):

技术分享


小结:虽然忽略了对cookie信息的判断,告诉nginx有cookie的信息是可以存的,但是对于200ok的信息设置缓存时间为0,所以最终资源还是不能存。


第三次测试配置参数:

proxy_cache_valid 200 10m;

proxy_ignore_headers Set-Cookie; 


多次访问日志如下(1次访问MISS后,之后均为HIT):


技术分享


小结:首先忽略了cookie信息的判断,告诉nginx说cookie信息是可以存的,后查询没有expires和max-age就去找默认缓存时间,发现对于200ok的默认缓存时间是10m,所以最终判定可以缓存,有效缓存时间为10分钟。


    综上,一个资源只有同时具备可缓存和有缓存时间大于0的生命周期的双重属性,才能真正被缓存下来,至于存下来之后用不用还得再进行下一步的判断。所以nginx对于资源是否缓存要经过两步判断,第一步存不存,第二步存多久,对于是否用缓存了的资源为用户进行服务还得进行下一层用不用的判断,详细的走的判断参数可以看我画的那张图,学习无止境,继续加油。

本文出自 “奔跑的linux” 博客,请务必保留此出处http://benpaozhe.blog.51cto.com/10239098/1763897

Nginx/tengine做cache时缓存机制—存不存、存多久、用不用方法论(图自画)

标签:nginx tengine cache cdn 缓存

原文地址:http://benpaozhe.blog.51cto.com/10239098/1763897

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!