Nginxredis 缓存失效策略什么时候失效

温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(1289)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
在LOFTER的更多文章
loftPermalink:'',
id:'fks_',
blogTitle:'nginx – 缓存过期影响因素优先级分析',
blogAbstract:'首先对测试环境进行说明测试的架构如图所示:client端& &——————& & nginx cache &——————&源服务器',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:0,
publishTime:0,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:true,
hostIntro:'',
hmcon:'1',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}Nginx缓存的缺点和优点专家评价_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
Nginx缓存的缺点和优点专家评价
&&Nginx缓存的缺点和优点专家评价
阅读已结束,下载文档到电脑
想免费下载更多文档?
定制HR最喜欢的简历
你可能喜欢NGINX缓存使用官方指南
-02%-13%-28%-34%-46%52%-53%-62%-64%-67%-68%-71%-72%-75%-82%-83%-84%-88%-91%-93%-95%
我们都知道,应用程序和网站一样,其性能关乎生存。但如何使你的应用程序或者网站性能更好,并没有一个明确的答案。代码质量和架构是其中的一个原因,但是在很多例子中我们看到,你可以通过关注一些十分基础的应用内容分发技术,来提高终端用户的体验。其中一个例子就是实现和调整应用栈(application stack)的缓存。这篇文章,通过几个例子来讲述如何使用NGINX缓存,此外,结尾处还列举了一些常见问题及解答。
一个web缓存坐落于客户端和&原始服务器(origin server)&中间,它保留了所有可见内容的拷贝。如果一个客户端请求的内容在缓存中存储,则可以直接在缓存中获得该内容而不需要与服务器通信。这样一来,由于web缓存距离客户端&更近&,就可以提高响应性能,并更有效率的使用应用服务器,因为服务器不用每次请求都进行页面生成工作。
在浏览器和应用服务器之间,存在多种&潜在&缓存,如:客户端浏览器缓存、中间缓存、内容分发网络(CDN)和服务器上的负载平衡和反向代理。缓存,仅在反向代理和负载均衡的层面,就对性能提高有很大的帮助。
举个例子说明,去年,我接手了一项任务,这项任务的内容是对一个加载缓慢的网站进行性能优化。首先引起我注意的事情是,这个网站差不多花费了超过1秒钟才生成了主页。经过一系列调试,我发现加载缓慢的原因在于页面被标记为不可缓存,即为了响应每一个请求,页面都是动态生成的。由于页面本身并不需要经常性的变更,并且不涉及个性化,那么这样做其实并没有必要。为了验证一下我的结论,我将页面标记为每5秒缓存一次,仅仅做了这一个调整,就能明显的感受到性能的提升。第一个字节到达的时间降低到几毫秒,同时页面的加载明显要更快。
并不是只有大规模的内容分发网络(CDN)可以在使用缓存中受益&&缓存还可以提高负载平衡器、反向代理和应用服务器前端web服务的性能。通过上面的例子,我们看到,缓存内容结果,可以更高效的使用应用服务器,因为不需要每次都去做重复的页面生成工作。此外,Web缓存还可以用来提高网站可靠性。当服务器宕机或者繁忙时,比起返回错误信息给用户,不如通过配置NGINX将已经缓存下来的内容发送给用户。这意味着,网站在应用服务器或者数据库故障的情况下,可以保持部分甚至全部的功能运转。
下一部分讨论如何安装和配置NGINX的基础缓存(Basic Caching)。
如何安装和配置基础缓存
我们只需要两个命令就可以启用基础缓存:&和。proxy_cache_path用来设置缓存的路径和配置,proxy_cache用来启用缓存。
proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m
use_temp_path=
location / {
proxy_cache my_
proxy_pass http://my_
proxy_cache_path命令中的参数及对应配置说明如下:
1.用于缓存的本地磁盘目录是/path/to/cache/
2.levels在/path/to/cache/设置了一个两级层次结构的目录。将大量的文件放置在单个目录中会导致文件访问缓慢,所以针对大多数部署,我们推荐使用两级目录层次结构。如果levels参数没有配置,则NGINX会将所有的文件放到同一个目录中。
3.keys_zone设置一个共享内存区,该内存区用于存储缓存键和元数据,有些类似计时器的用途。将键的拷贝放入内存可以使NGINX在不检索磁盘的情况下快速决定一个请求是`HIT`还是`MISS`,这样大大提高了检索速度。一个1MB的内存空间可以存储大约8000个key,那么上面配置的10MB内存空间可以存储差不多80000个key。
4.max_size设置了缓存的上限(在上面的例子中是10G)。这是一个可选项;如果不指定具体值,那就是允许缓存不断增长,占用所有可用的磁盘空间。当缓存达到这个上线,处理器便调用cache manager来移除最近最少被使用的文件,这样把缓存的空间降低至这个限制之下。
5.inactive指定了项目在不被访问的情况下能够在内存中保持的时间。在上面的例子中,如果一个文件在60分钟之内没有被请求,则缓存管理将会自动将其在内存中删除,不管该文件是否过期。该参数默认值为10分钟(10m)。注意,非活动内容有别于过期内容。NGINX不会自动删除由缓存控制头部指定的过期内容(本例中Cache-Control:max-age=120)。过期内容只有在inactive指定时间内没有被访问的情况下才会被删除。如果过期内容被访问了,那么NGINX就会将其从原服务器上刷新,并更新对应的inactive计时器。
6.NGINX最初会将注定写入缓存的文件先放入一个临时存储区域,&use_temp_path=off命令指示NGINX将在缓存这些文件时将它们写入同一个目录下。我们强烈建议你将参数设置为off来避免在文件系统中不必要的数据拷贝。use_temp_path在NGINX1.7版本和中有所介绍。
最终,&proxy_cache命令启动缓存那些URL与location部分匹配的内容(本例中,为`/`)。你同样可以将proxy_cache命令添加到server部分,这将会将缓存应用到所有的那些location中未指定自己的proxy_cache命令的服务中。
陈旧总比没有强
NGINX的一个非常强大的特性是:当无法从原始服务器获取最新的内容时,NGINX可以分发缓存中的陈旧(stale,编者注:即过期内容)内容。这种情况一般发生在关联缓存内容的原始服务器宕机或者繁忙时。比起对客户端传达错误信息,NGINX可发送在其内存中的陈旧的文件。NGINX的这种代理方式,为服务器提供额外级别的容错能力,并确保了在服务器故障或流量峰值的情况下的正常运行。为了开启该功能,只需要添加命令即可:
location / {
proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504;
按照上面例子中的配置,当NGINX收到服务器返回的error,timeout或者其他指定的5xx错误,并且在其缓存中有请求文件的陈旧版本,则会将这些陈旧版本的文件而不是错误信息发送给客户端。
NGINX提供了丰富的可选项配置用于缓存性能的微调。下面是使用了几个配置的例子:
proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m
use_temp_path=
location / {
proxy_cache my_
proxy_cache_
proxy_cache_min_uses 3;
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
proxy_cache_
proxy_pass http://my_
这些命令配置了下列的行为:
1.指示NGINX在刷新来自服务器的内容时使用GET请求。如果客户端的请求项已经被缓存过了,但是在缓存控制头部中定义为过期,那么NGINX就会在GET请求中包含If-Modified-Since字段,发送至服务器端。这项配置可以节约带宽,因为对于NGINX已经缓存过的文件,服务器只会在该文件请求头中Last-Modified记录的时间内被修改时才将全部文件一起发送。
2.设置了在NGINX缓存前,客户端请求一个条目的最短时间。当缓存不断被填满时,这项设置便十分有用,因为这确保了只有那些被经常访问的内容才会被添加到缓存中。该项默认值为1。
3.中的updating参数告知NGINX在客户端请求的项目的更新正在原服务器中下载时发送旧内容,而不是向服务器转发重复的请求。第一个请求陈旧文件的用户不得不等待文件在原服务器中更新完毕。陈旧的文件会返回给随后的请求直到更新后的文件被全部下载。
4.当被启用时,当多个客户端请求一个缓存中不存在的文件(或称之为一个MISS),只有这些请求中的第一个被允许发送至服务器。其他请求在第一个请求得到满意结果之后在缓存中得到文件。如果不启用proxy_cache_lock,则所有在缓存中找不到文件的请求都会直接与服务器通信。
跨多硬盘分割缓存
使用NGINX,不需要建立一个RAID(磁盘阵列)。如果有多个硬盘,NGINX可以用来在多个硬盘之间分割缓存。下面是一个基于请求URI跨越两个硬盘之间均分缓存的例子:
proxy_cache_path /path/to/hdd1 levels=1:2 keys_zone=my_cache_hdd1:10m max_size=10g
inactive=60m use_temp_path=
proxy_cache_path /path/to/hdd2 levels=1:2 keys_zone=my_cache_hdd2:10m max_size=10g
inactive=60m use_temp_path=
split_clients $request_uri $my_cache {
&my_cache_hdd1&;
&my_cache_hdd2&;
location / {
proxy_cache $my_
proxy_pass http://my_
上例中的两个proxy_cache_path定义了两个缓存(my_cache_hdd1和my_cache_hd22)分属两个不同的硬盘。配置部分指定了请求结果的一半在my_cache_hdd1中缓存,另一半在my_cache_hdd2中缓存。基于$request_uri(请求URI)变量的哈希值决定了每一个请求使用哪一个缓存,对于指定URI的请求结果通常会被缓存在同一个缓存中。
常见问题解答
这部分内容回答了一些关于NGINX内容缓存的常见问题。
可以检测NGINX缓存状态吗?
可以,使用指令:
add_header X-Cache-Status $upstream_cache_
上面的例子中,在对客户端的响应中添加了一个`X-Cache-Status`HTTP响应头,下面是的可能值:
MISS&&响应在缓存中找不到,所以需要在服务器中取得。这个响应之后可能会被缓存起来。
BYPASS&&响应来自原始服务器而不是缓存,因为请求匹配了一个proxy_cache_bypass(见下面)。这个响应之后可能会被缓存起来。
EXPIRED&&缓存中的某一项过期了,来自原始服务器的响应包含最新的内容。
STALE&&内容陈旧是因为原始服务器不能正确响应。需要配置proxy_cache_use_stale。
UPDATING&&内容过期了,因为相对于之前的请求,响应的入口(entry)已经更新,并且proxy_cache_use_stale的updating已被设置。
REVALIDATED&&命令被启用,NGINX检测得知当前的缓存内容依然有效(If-Modified-Since或者If-None-Match)。
HIT&&响应包含来自缓存的最新有效的内容。&
NGINX&如何决定是否缓存?
默认情况下,NGINX需要考虑从原始服务器得到的Cache-Control标头。当在响应头部中Cache-Control被配置为Private,No-Cache,No-Store或者Set-Cookie,NGINX不进行缓存。NGINX仅仅缓存GET和HEAD客户端请求。你也可以参照下面的解答覆盖这些默认值。
Cache-Control头部可否被忽略?
可以,使用proxy_ignore_headers命令。如下列配置:
location /images/ {
proxy_cache my_
proxy_ignore_headers Cache-C
proxy_cache_valid any 30m;
NGINX会忽略所有/images/下的Cache-Control头。命令强制规定缓存数据的过期时间,如果忽略Cache-Control头,则该命令是十分必要的。NGINX不会缓存没有过期时间的文件。
当在头部设置了Set-Cookie之后NGINX还能缓存内容吗?
可以,使用proxy_ignore_headers命令,参见之前的解答。
NGINX能否缓存POST&请求?
可以,使用命令:
proxy_cache_methods GET HEAD POST;
这个例子中可以缓存POST请求。其他附加的方法可以依次列出来的,如PUT。
NGINX&可以缓存动态内容吗?
可以,提供的Cache-Control头部可以做到。缓存动态内容,甚至短时间内的内容可以减少在原始数据库和服务器中加载,可以提高第一个字节的到达时间,因为页面不需要对每个请求都生成一次。
我可以再缓存中打个洞(Punch a Hole)吗?
可以,使用proxy_cache_bypass命令:
location / {
proxy_cache_bypass $cookie_nocache $arg_
这个命令定义了哪种类型的请求需要向服务器请求而不是尝试首先在缓存中查找。有些时候又被称作在内存中&打个洞&。在上面的例子中,NGINX会针对nocache&cookie或者参数进行直接请求服务器,如:&/?nocache=true。NGINX依然可以为将那些没有避开缓存的请求缓存响应结果。
NGINX&使用哪些缓存键?
NGINX生成的键的默认格式是类似于下面的的MD5哈希值:&$scheme$proxy_host$request_uri,实际的算法有些复杂。
proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m
use_temp_path=
location / {
proxy_cache $my_
proxy_pass http://my_
按照上面的配置,&http://www.example.org/my_image.jpg的缓存键被计算为md5(&http://my_upstream:80/my_image.jpg&)。
注意,变量用于哈希之后的值而不是实际的主机名()。$proxy_host被定义为中指定的代理服务器的主机名和端口号。
为了改变变量(或其他项)作为基础键,可以使用命令(下面的问题会讲到)。
可以使用Cookie作为缓存键的一部分吗?
可以,缓存键可以配置为任意值,如:
proxy_cache_key $proxy_host$request_uri$cookie_
NGINX使用Etag头部吗?
在NGINX 1.7.3和及之后的版本,配合使用If-None-Match,&Etag是完全支持的。
NGINX&如何处理字节范围请求?
如果缓存中的文件是最新的,NGINX会对客户端提出的字节范围请求传递指定的字节。如果文件并没有被提前缓存,或者是陈旧的,那么NGINX会从服务器上下载完整文件。如果请求了单字节范围,NGINX会尽快的将该字节发送给客户端,如果在下载的数据流中刚好有这个字节。如果请求指定了同一个文件中的多个字节范围,NGINX则会在文件下载完毕时将整个文件发送给客户端。
一旦文件下载完毕,NGINX将整个数据移动到缓存中,这样一来,无论将来的字节范围请求是单字节还是多字节范围,NGINX都可以在缓存中找到指定的内容立即响应。
NGINX&支持缓存清洗吗?
支持有选择性的清洗缓存。当原始服务器上文件已经被更新,但是NGINX Plus缓存中文件依然有效(Cache-Control:max-age依然有效,proxy_cache_path命令中inactive参数设置的超时时间没有过期),这个功能便十分有用。使用NGINX Plus的缓存清洗特性,这个文件可以被轻易的删除。详细信息,参见。
NGINX如何处理Pragma&头部?
当客户端添加了Pragma:no-cache头部,则请求会绕过缓存直接访问服务器请求内容。NGINX默认不考虑Pragma头部,不过你可以使用下面的proxy_cache_bypass的命令来配置该特性:
location /images/ {
proxy_cache my_
proxy_cache_bypass $http_
NGINX支持Vary&头部吗?
是的,在、NGINX1.7.7和之后的版本中是支持的。看看这篇不错的文章:&。
有非常多的方式对NGINX进行个性化定制和调优。要了解更多关于NGINX缓存,请看下面的资源:
NGINX文档中的部分包含所有内容缓存的可选项。
全程可以根据自己的需要查看。这篇博客包含了研讨会的部分内容。
NGINX Plus管理员指南中的部分有更多关于调优NGINX缓存的配置案例和信息内容。
产品页包含如何配置NGINX Plus进行缓存清洗的概述,并提供了其他缓存个性化配置的例子。
上一篇:下一篇:
评论功能关闭
根据国家法律法规要求,本站暂时关闭文章评论功能。开放时间不确定。我们将谋求一种可以让大家更好的发表意见的方式。
根据国家法律法规要求,只有实名认证后才可以发表评论。
我们都知道,应用程序和网站一样,其性能关乎生存。但如何使你的应用程序或者网站性能更好,并没有一个明确的答案。代码质量和架构是其中的一个原因,但是在很多例子中我们看到,你可以通过关注一些十分基础的应用内容分发技术,来提高终端用户的体验。其中一个例子就是实现和调整应用栈(application stack)的缓存。这篇文章,通过几个例子来讲述如何使用NGINX缓存,此外,结尾处还列举了一些常见问题及解答。
基础 一个web缓存坐落于客户端和原始服务器(origin server)中间,它保留了所有可见内容的拷贝。如果一个客户端请求的内容
分享到微信
打开微信,点击顶部的“╋”,
使用“扫一扫”将网页分享至微信。
请将我们加入您的广告过滤器的白名单,请支持开源站点。谢谢您。☉&&( 21:11:30)☉&&( 14:26:48)☉&&( 22:8:47)☉&&( 9:53:5)☉&&( 15:51:33)☉&&( 13:40:41)☉&&( 17:48:6)☉&&( 16:59:57)☉&&( 17:53:8)☉&&( 21:31:15)☉&&( 5:18:21)☉&&( 21:16:43)☉&&( 16:38:51)☉&&( 18:49:22)☉&&( 5:0:15)
虽然有些内容有些超出我的理解范畴,但通过楼主的文章开阔自己的视野也很不错!
说的很在理呀
.男********
确实有用啊
很有帮助 每天来看看
学习了,Nginx用的不多
这个属于教程类的,好东西,收藏了
写的不错啊
不错的教程,谢谢分享
Powered By
Designed by Han'space当前位置 > &>&&>&
CDN加速的过期时间控制支持三个维度,优先级依次为控制台设置——源站header设置——cache的默认策略设置,利用好这三个维度就能搭配出适合于自己网站需求的CDN配置。下面智乐前端为大家讲解一下网站开启CDN后,缓存功能如何配合CDN做设置,让文件在某个时间段内进行缓存。首先我们了解一下缓存功能该功能可以针对不同“目录路径”和“文件名后缀”的资源进行缓存服务器行为的设置,用户可自定义指定资源内容的缓存过期时间规则支持用户自定义缓存策略优先级Cache的默认缓存策略注意用于配置文件过期时间,在此配置的优先级会高于源站配置。如果源站未配置cache配置,支持按目录、文件后缀两种方式设置(支持设置完整路径缓存策略)注意事项对于不经常更新的静态文件,建议将缓存时间设置为1个月以上(eg:图片类型,应用下载类型);对于需要更新并且更新很频繁的静态文件,可以将缓存时间设置短些,视业务情况而定(eg:js,css等);对于动态文件(eg:php | jsp | asp),建议设置缓存时间为0s,即不缓存;若动态文件例如php文件内容更新频率较低,推荐设置较短缓存时间建议源站的内容不要使用同名更新,以版本号的方式方步,即采用img-v1.0.jpg、img-v2.1.jpg的命名方式控制台过期时间设置详见【域名过期时间设置】,源站设置详见【webserver缓存策略设置】,cache的默认策略是针对用户既没有在控制台设置过期时间,也没有在源站设置过期时间,会走一个默认的全局策略,既保证加速效果,又避免因为动态的文件缓存导致的问题详见【Cache的默认缓存策略】。一、IIS 缓存策略设置1、 因为整体的站点只对.html .jpg .png .gif .apk文件,而其他文件都不缓存;可以首先对整个站点设置成不缓存,设置如下:a)打开“IIS信息管理器”,右键点击服务网站“”的属性,然后选择“HTTP头“选卡,勾选“启用内容过期”,并选择“立即过期”,然后“确定”,具体如下:b)经过上述设置后整个网站的内容都不会被CDN缓存,然后对.html .jpg .png .gif .apk文件类型设置缓存策略2、针对特定文件的缓存设置如下:a)如果上面不同扩展名的文件都单独放在一个特定的目录下面,且该目录没有其他扩展名的文件,那么可以针对这个扩展名所在的整个目录设置缓存的时间;具体方法是在“IIS信息管理器”中,展开网站“”的目录,选中需要设置缓存时间的目录,比如所有jpg都存储在img这个目录下,那么右键点击该目录,选择“属性’,选中”HTTP头“选卡;因为刚才整个网站都设置了不缓存的设置,因此这时打开该目录的”HTTP头“的缓存设置和1中的一致,接下来就有修改这个配置:选择”此时间段后过期“,并且将时间设置为过期的时间值,比如14天,点击“确定”保存,具体如下:b) 如果特定扩展名的文件不是统一放在唯一的目录下,是和其他扩展名文件混合放在一个目录下面的,这种情况配置要复杂一些;为了避免针对特定扩展名的文件进行逐个的配置,我们需要让IIS支持“通配符”,支持“通配符”的配置如下:1) 打开“IIS信息管理器”,右键点击服务网站“”的属性,选择“主目录”选卡,点击选卡上的“配置”按钮,出现如下对话框:2) 在“通配符应用程序映射(执行顺序)”一栏下面,点击“插入”按钮,在弹出的文件选择框时选择 C: \WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll 文件,其中“C:”是系统盘,不要勾选“确认文件是否存在”,具体如下:连续两个“确定”按键点击后,就完成了IIS通配符的支持配置3)接下来就是到存在需要进行缓存配置文件的目录下面,首先选择一个需要缓存扩展名的文件,点击右键,选择属性,选择“HTTP头”选卡,进行2.a)中的配置,并保存;接下来就有对这个文件目录下面所有相同扩展名的文件进行该设置了,此时需要修改IIS的配置文件实现。4)IIS的配置文件放置在C:\WINDOWS\system32\inetsrv\MetaBase.xml(IIS6的设置),用“记事本”程序打开上述文件,如果我们3)中是针对bin目录下面的test.jpg做了缓存过期时间的设置的,那么我们就查找字串“/bin/test.jpg“,就可以在该文件中找到bin目录下test.jpg文件的缓存设置,为了使bin目录下面所有的jpg文件都采用该缓存设置,只需要将“test.jpg”改为”*.jpg“就可以了,然后保持该文件。注意要修改上述文件,需要在“服务”中关闭“IIS admin Service”。5)其他扩展名的文件缓存设置可以重复上面的3)和4)操作。二、Nginx 缓存策略设置HTTP头处理模块(HTTP Headers),这个模块允许设置任意的HTTP头1) add_header语法:add_header name value&默认值:none&使用字段:http, server, location2) expires语法:expires [time|epoch|max|off]&默认值:expires off&使用字段:http, server, location&这个指令控制是否在应答中标记一个过期时间,如果是,如何标记。off 将禁止修改头部中的 Expires和Cache-Control字段。Time控制“Cache-Control”的值,负数表示no-cacheepoch 将Expires头设置为1 January, :01 GMT。max 将Expires头设置为31 December :59 GMT,将Cache-Control最大化到10 年。例如设置php的文件类型过期时间设置为1个小时:设置php的文件类型为no-cache,不让cache服务器缓存:另外可以通过add_header设置相对应的缓存策略,对于动态的php文件设置为不缓存:location&~&.*\.php$&{
&&&&if&($request_uri&!~&^/dynamicimg/)&{
&&&&&&&&add_header&&&&&&&&&&&&&&Cache-Control&&no-cache&;
&&&&&&&&add_header&&&&&&&&&&&&&&Pragma&no-
&&}三、Apache缓存策略设置Apache的过期策略可以通过apache的mod_expires和mod_headers两个模块设置:1)模块mod_expires设置:允许通过配置文件控制HTTP的&Expires&和&Cache-Control&头内容mod_expires 模块的主要作用是自动生成页面头部信息中的 Expires 标签和 Cache-Control 标签,从而降低客户端的访问频率和次数,达到减少不必要流量和增加访问速度的目的mod_expires 是 apache 众多模块中配置比较简单的一个,它一共只有三条指令ExpiresActive 指令:打开或关闭产生”Expires:”和”Cache-Control:”头的功能。ExpiresByType 指令:指定MIME类型的文档(例如:text/html)的过期时间。ExpiresDefault 指令:默认所有文档的过期时间。过期时间的写法“access plus 1 month”“access plus 4 weeks”“now plus 30 days”“modification plus 5 hours 3 minutes”A2592000M604800access、now及A 三种写法的意义相同,指过期时间从访问时开始计算。modification及M 的意义相同,指过期时间是以被访问文件的最后修改时间开始计算。所以,后一种写法只对静态文件起作用,而由脚本生成的动态页面不受它的作用配置实例:& & ExpiresActive On(开启mod_expires功能)& & ExpiresDefault &access plus 6 months&(默认的过期时间是6个月)& & ExpiresByType image/* &access plus 10 years&(图片的文件类型缓存时间为10年)& & ExpiresByType text/* &access plus 10 years&(文本类型缓存时间为10年)& & ExpiresByType application/* &access plus 30 minutes&(application文件类型缓存30分钟)验证:image/jpeg 缓存时间为s(10年)如果将image/jpeg设置为不缓存(将max-age设置为0s):# & ExpiresByType image/* &access plus 10 years&ExpiresByType image/* &A02)模块mod_headers设置:# YEAR(flv,gif,ico文件类型的缓存时间为1年)Header set Cache-Control “max-age=2592000″# WEEK(pdf.swf,js,css缓存时间为一周)Header set Cache-Control “max-age=604800″# NEVER CACHE(jsp.swf,ico文件类型不缓存)Header set Expires “Thu, 01 Dec :00 GMT”Header set Cache-Control “no-store, no-cache, must-revalidate”Header set Pragma “no-cache”Cache的默认缓存策略缓存时间计算t =(savetime - last_modified)*0.1&t = min(10, t)&t = max(t, 3600)缓存时间为t,单位秒&1、当对象last-modified为:00:00,当前时间为:01:00, (curtime-Last_modified)*0.1=6s,那么缓存时间为10s,因为最小值为10s2、当对象last-modified为:00:00,当前时间为:00:00,(curtime-Last_modified)*0.1=8640s,那么缓存时间为3600s3、当对象last-modified为:00:00,当前时间为:10:00,(curtime-Last_modified)*0.1=60s,那么缓存时间为60s4、如果源站没有 Last-Modified 响应头,但有 ETag,则该对象极有可能是静态资源,将其默认缓存时间设置为 dft_expires 指令配置的最小值5、如果源站没有 Last-Modified,也没有 ETag,则认为该对象为动态内容,将其默认缓存时间设置为 0,每次都回源&注意事项因为网站开发及其相关技术人员更清楚自身网站的业务逻辑,静态和动态因素,所以建议用户通过控制台按照文件类型,目录控制设置缓存时间控制;如果用户控制有缓存策略控制,Cache的默认缓存策略就不生效。开启CDN后如果没有对网站进行设置,那么网站日志中查看到的将是CDN的节点IP,如想在此情况下仍然获得访客真实IP,建议参考此文设置。
人喜欢此文章
本文由 智乐前端 麦芽糖 原创发表,转载请注明来源地址及作者!
Hi, 欢迎加入帝国CMS技术交流群,带你装逼带你飞!
网站定制设计
设计素养决定网站大局
可以简单的理解为,通过该插件第一次访问时可以将动态或者伪静态(伪静态页面其实很大部分用的也是PHP动态页面,只是地址URL被友好的重新定义了)页面,生成一个缓存页面,第二次访问时若在插件缓存时间内,用户访问该页面查看到的均为缓存页面的内容,从而减少读取数据库频率。...
本插件是结合之前原有tag功能基础上升级改进,原有功能已保留,插件为独立管理方式不影响帝国程序升级,提供教程可以无缝对接原有tag程序,将文章发布时的tag功能切换为插件tag功能。...
我来推荐一个更牛逼的给你看看?

我要回帖

更多关于 redis的缓存失效策略 的文章

 

随机推荐