关于nginx的last-modified返回头

squid 不能缓存cache-control在65秒以下的页面,详见ayou同学的这篇文章:http://sudone.com/linux/squid_cache_65s.html

根据文章所说,如果想实现65秒以下的缓存呢,用last-modified头吧。

今天遇到了一个比较郁闷的事,就是架设在squid后的一台nginx,随意访问一个静态页面,死活不出last-modified头。也没作什么特殊的配置,我自己新装一个nginx,测试之。

$curl -I 127.0.0.1
HTTP/1.1 200 OK
Server: nginx/0.8.32
Date: Thu, 28 Jan 2010 14:57:11 GMT
Content-Type: text/html
Content-Length: 151
Last-Modified: Thu, 28 Jan 2010 03:07:20 GMT
Connection: keep-alive
Accept-Ranges: bytes

很正常嘛,不作任何配置时默认是会有last-modified的。

后来还是经ayou同学的提醒,因为使用了ssi。。。

使用了ssi,nginx 就假设你这个页面动态的,谁知道你include的页面上次修改时间啊,当然也就不给你返回last-modified头了。

另外,使用nginx的 http_sub_module时,也不会出这个头的。在测试机上试试,加了个ssi on

$curl -I http://127.0.0.1
HTTP/1.1 200 OK
Server: nginx/0.8.32
Date: Thu, 28 Jan 2010 14:57:32 GMT
Content-Type: text/html
Connection: keep-alive

果然是ssi。。。

mark 一下,以前就试过了,今天竟然忘了!!

Comments

  1. 清海 says:

    补充一个,只针对shtml设置ssi就不影响的方法:

    ssi on;
    ssi_silent_errors on;
    ssi_types text/shtml;

  2. 清海 says:

    额,上面的方法不行。

  3. 蓝仁 says:

    博主,请问有没有在nginx下开启ssi时,可以发送last-modified?

  4. 原装的nginx ,不可以,ssi module 里返回给用户的header discard 掉了lm 。
    除非自己写module ,但比较难,因为还要考虑到include 的文件的修改时间。

  5. 菜花 says:

    既然该场景中无法使用last-modified,那么请问有对expires的属性进行配置呢?

    我遇到一个问题,在我在nginx的conf文件中对请求加上expires=1d的配置时,当我在刷新动态页面请求的时候,都是200的访问,并不会访问发生304的缓存效果。

    在nginx上动态页面就不能设置浏览器的缓存了么?求请教呢?

    例如:
    http://localhost/text-http-cache.shtml

  6. 动态页面?这些页面的缓存时间,由后端的动态程序的返回来决定噢。
    除非,你在前面用 nginx 静态化了这些页面,这样 nginx 的 expires 就可以控制缓存了。

    在这里回复肯定获得不了你想要的答案的了……你可以邮箱联系我。

Submit a Comment