nginx如果打开了SSI模块,会默认关闭header中的last-modified输出,可以通过修改源代码来重新打开:
注释掉src/http/modules/ngx_http_ssi_filter_module.c第362行:
static ngx_int_t
ngx_http_ssi_header_filter(ngx_http_request_t *r)
{
……
if (r == r->main) {
ngx_http_clear_content_length(r);
/*ngx_http_clear_last_modified(r);*/
ngx_http_clear_accept_ranges(r);
}
……
}
如果编译并使用了--with-http_sub_module模块,还需要注释掉src/http/modules/ngx_http_sub_filter_module.c第159行:
static ngx_int_t
ngx_http_sub_header_filter(ngx_http_request_t *r)
{
……
if (r == r->main) {
ngx_http_clear_content_length(r);
/*ngx_http_clear_last_modified(r);*/
}
……
}
注掉源码,重新编译就可以了,如果header里面没有显式输出last-modified,那默认使用的时间是文件的MTIME,要注意。
经过测试,发现上面的方法是可行的,这样在用ssi的同时也可以让浏览器缓存生效了。