首页 > Linux > nginx中关于页面缓存的配置

nginx中关于页面缓存的配置

2011年8月12日 发表评论 阅读评论

根据nginx的文档,可以通过使用expires 指令来操作。

该指令会在响应的header信息中增加一个 Expires 和一个 Cache-Control: (如果时间是负数no-cache,反之max-age = * 为您指定时间的秒数)的信息.如果不想缓存某些页面,可以针对某些页面配置以下expires ,可以用 expires -1;使用这样就相当于为指定的资源在响应请求时在header中加了Cache-Control:no-cache 信息.

经过测试,在IE6和8下都能正常工作,即每次通过F5刷新,应答的状态码都为200,但是Firefox3.6、chrome下,F5刷新后看到的应答状态码为304,也就是说依然读取的是缓存信息,没有达到不缓存的目的,使用FireBug(好工具啊)查看响应的header信息中也有Cache-Control:no-cache,这问题让我困扰好一阵,在网上狂找一起,也没有发现到底是为什么。后来无意中在IE8下的httpwatcher5下看到了一个warnning信息,内容为:The ‘no-cache’ directive was used without the ‘no-store’ directive. Using ‘no-store’ ensures that Firefox will always re-fetch HTTP based pages and never use a previous version.从这个里面得到启示,然后再nginx中使用add_header增加一条add_header Cache-Control no-store指令,然后再测试,Firefox,chrome的应答都能不让客户端缓存。进一步测试,发现只要设置了no-store,不要no-cache,甚至 expires 时间为正数时都不会被缓存了。

add_header Cache-Control no-store

另外如果先前页面已经是缓存的,在nginx配置中设置了不缓存(no-store),也重启nginx服务器,在ie下,用F5刷新还是返回304,除非ctrl+F5应答才会是200,当然此后再F5依旧是200。如果要立即生效,最好是修改一下那个页面,让浏览器知道页面已经被更新,好重新获取页面内容。

 



欢迎转载,转载请注明文章出处,谢谢!
垃圾有点差凑合看还不错很精彩 (1 人打了份: 平均分:4.00)
Loading...Loading...
分类: Linux 标签: , , ,
  1. mosoro
    2012年5月28日16:22 | #1

    楼主解决了我的大问题 因为这个困扰好久搞不定 非常感谢

    • admin
      2012年5月28日21:55 | #2

      呵呵,不用客气,相互学习!!

  2. 猪头
    2013年3月15日15:46 | #3

    万分感谢啊!查遍全球网络,你这个是正解啊!我用的chrome怎么都是from cache 在设置了no-cache的时候,但是当设置了no-store的时候,就正常了!!!不过不知道这是为什么,用IE 就没问题,chrome就有问题了.

  1. 本文目前尚无任何 trackbacks 和 pingbacks.

无觅相关文章插件,快速提升流量