nginx 缓存控制
2013-10-24 23:05
183 查看
nginx 有好几个参数控制缓存,以nginx缓存图片文件作为例子。第一,缓存池
如果一个文件2天内不活跃,即没被人二次访问,则在缓存池中淘汰掉,在硬盘上缓存的文件总量最高为10G 。
如果缓存池里的文件总量已经达到10G,那么此时缓存根据LRU规则淘汰。共享内存与缓存规模的比例大概是1m:1g 。第二,缓存的生命周期
本例中,如果图片在2天内再次被访问,则直接命中缓存池,返回HIT,
超过2天就主动跳过缓存池,直接从源服务器再取一遍,再跟缓存池进行比较。
如果缓存池里有,则更新缓存的时间戳,并返回EXPIRE,
如果缓存池里没有,则重新生成缓存,并返回MISS 。
不论MISS还是EXPIRED,代价都比较高,都需要跟后端取数据。第三,浏览器缓存的生命周期
(不同的浏览器行为稍有不同,以chrome为例)1、客户端使用浏览器第一次打开网页,服务器返回200,图片进入浏览器缓存,生命周期是7天
2、第二天,客户端用浏览器再次打开网页时,返回代码依然是200,但是命中的是本地缓存
3、客户端使用F5刷新了浏览器,强制与服务器发生通信,在与服务器比较后发现,文件跟浏览器缓存是一样的,于是得到了304,如果不一样,则是200 。
4、客户端使用ctrl+F5强制浏览器缓存失效,服务器返回200,重新生成浏览器缓存。
5、7天后客户端再次访问网页,由于浏览器缓存到期,浏览器与服务器通信,服务器返回200,重新生成浏览器缓存。以上三个参数,对于缓存服务器影响较大的是第一二个参数。首先,我们应该维护一个尽可能大的缓存池,把面做广。缓存池过小,命中率再高也白搭;
其次,我们要提高缓存命中率,减少缓存与源服务器的交互频率。尽可能增加缓存生命周期,让缓存使用LRU被动淘汰。
最后,如果是小范围的缓存,为了节省昂贵的磁盘IO,我们可以选择将缓存放在共享内存中。
proxy_cache_path /var/cache/nginx/proxy_cache levels=1:2 keys_zone=static:10m max_size=10g inactive=2d;这个参数控制缓存池的规模,以及与源服务器的交互频率。缓存淘汰是非常被动的,仅仅是为了维护缓存池的规模。本例使用10M共享内存维护缓存文件列表,(nginx官网介绍,1m内存可以保存8000个文件信息)
如果一个文件2天内不活跃,即没被人二次访问,则在缓存池中淘汰掉,在硬盘上缓存的文件总量最高为10G 。
如果缓存池里的文件总量已经达到10G,那么此时缓存根据LRU规则淘汰。共享内存与缓存规模的比例大概是1m:1g 。第二,缓存的生命周期
proxy_cache_valid 200 302 2d;这个参数直接控制缓存的生命周期,这个值应该大于等于缓存池的文件失效时间。
本例中,如果图片在2天内再次被访问,则直接命中缓存池,返回HIT,
超过2天就主动跳过缓存池,直接从源服务器再取一遍,再跟缓存池进行比较。
如果缓存池里有,则更新缓存的时间戳,并返回EXPIRE,
如果缓存池里没有,则重新生成缓存,并返回MISS 。
不论MISS还是EXPIRED,代价都比较高,都需要跟后端取数据。第三,浏览器缓存的生命周期
expires 7d这个参数控制浏览器保存图片多久,分为几个阶段:
(不同的浏览器行为稍有不同,以chrome为例)1、客户端使用浏览器第一次打开网页,服务器返回200,图片进入浏览器缓存,生命周期是7天
2、第二天,客户端用浏览器再次打开网页时,返回代码依然是200,但是命中的是本地缓存
3、客户端使用F5刷新了浏览器,强制与服务器发生通信,在与服务器比较后发现,文件跟浏览器缓存是一样的,于是得到了304,如果不一样,则是200 。
4、客户端使用ctrl+F5强制浏览器缓存失效,服务器返回200,重新生成浏览器缓存。
5、7天后客户端再次访问网页,由于浏览器缓存到期,浏览器与服务器通信,服务器返回200,重新生成浏览器缓存。以上三个参数,对于缓存服务器影响较大的是第一二个参数。首先,我们应该维护一个尽可能大的缓存池,把面做广。缓存池过小,命中率再高也白搭;
其次,我们要提高缓存命中率,减少缓存与源服务器的交互频率。尽可能增加缓存生命周期,让缓存使用LRU被动淘汰。
最后,如果是小范围的缓存,为了节省昂贵的磁盘IO,我们可以选择将缓存放在共享内存中。
相关文章推荐
- Nginx 缓存控制
- 浏览器缓存控制——nginx的expires设置
- nginx控制浏览器不缓存文件(文件过期时间)
- nginx 控制页面缓存
- nginx:expires控制页面缓存
- nginx:expires控制页面缓存以及加头
- nginx 缓存控制
- nginx:expires控制页面缓存
- nginx简介及模块、缓存、反向代理
- 霸气!Nginx 中缓存静态文件秘籍
- Nginx 之五: Nginx服务器的负载均衡、缓存与动静分离功能
- 04_Nginx命令行参数,控制信号,Nginx启动、停止、重启命令
- nginx+storm基于流量分发策略自动降级解决缓存热点问题
- Nginx中FastCGI缓存配置 详解(主要针对PHP优化)
- 利用nginx的fastcgi_cache模块来做缓存
- nginx信号控制
- 在动态页面里象静态页面一样控制整个网页的缓存和更新
- Nginx配置srcache_nginx模块搭配Redis建立缓存系统
- Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
- nginx缓存html静态文件,解析php 并反向代理IIS,使nginx和iis共存