nginx 的网站配置中
1 | expires 10m; |
该配置影响浏览器缓存,主要影响Cache-Control Expires 这两个字段
1 | Cache-Control: max-age=600 |
在网站中配置了浏览器优化,发现相应包中并不是所有的响应包的浏览器缓存时间都一致。
经排查发现
1 并不是所有的访问链接都是源站链接,这些链接不会经过节点,所以不受节点配置控制。
2 在节点配置中 Expires 只配置在一些静态页面、图片、cs、js响应中,其它类型的响应不受此控制。
在配置缓存的过程中发现有时一些js css 文件配置了缓存,但是并没有缓存下来,正常情况下应该缓存下来的。
经查,是由于pagespeed的开启了 js css最小化导致,可能跟pagespeed 的功能有关。
1 | pagespeed on; |
还有一些缓存没有缓存下来的原因是在location / 开启了不缓存,这会导致一些网页不缓存
1 | location / |
在缓存中经常发现有一些登录页面和源网站设置为 Cache-Control: no-store, no-cache 的网页被缓存下来,这些网页可能涉及一些动态交互的过程,不缓存这些动态交互的页面会好一些,可以避免一些缓存所带来的问题。
可以加入以下配置不缓存登录或带有认证的页面
1 | proxy_cache_bypass $cookie_nocache $arg_nocache$arg_comment; |
或者在云防线配置的
1 | proxy_ignore_headers Set-Cookie Cache-Control Expires; |
把Cache-Control去掉,让源网站控制它们想要控制的非缓存页面
在详细了解缓存的过程中发现云防线有多个缓存的目录
1 | proxy_cache_path /data/proxy_cache/www.gengjunfei.com levels=1:2 keys_zone=cache_www_gengjunfei_com:10m inactive=10m max_size=100m; |
其中前两个一个是ngx_cache_purge 模块的缓存文件目录和缓存文件临时目录,proxy_temp_path 目录下文件好像现在并用到,建议删除该配置
可采用如下配置,use_temp_path=off 会把临时缓存跟缓存放到一个目录下,可以避免文件系统中不必要的数据拷贝。
1 | proxy_cache_path /data/proxy_cache/www.gengjunfei.com levels=1:2 keys_zone=cache_www_gengjunfei_com:10m inactive=10m max_size=100m use_temp_path=off; |
pagespeed FileCachePath 是pagespeed配置的缓存文件目录,只知道开启pagespeed的功能需要该配置,至于具体的作用还有待了解。
在每个网站配置中开启缓存功能后都有
1 | # Reverse Proxy Cache Purge Policy |
该配置存在的功能是提供缓存删除功能,但是该配置有误
需把 ^~ /purge/ 改为 ~ /purge(/.*) 配置才正常
访问删除缓存的链接后出现如下说明删除正常,注意删除的是内存中的缓存,不是实际目录中的缓存
1 |
|
发现在每个网站的配置文件中存在以下配置
1 | location ~ /purge(/.*) |
这些配置其实并没有用到,缓存删除的建议保留使用,其余的不用的配置确认后建议在3.0中删除。
如果加入网站原来设置的是缓存1小时,访问网站,让网站内容也缓存下来。然后修改成缓存1分钟,这时候缓存会在1分钟后过期吗?
测试环境:火狐浏览器
测试步骤:
1 | 1 缓存时间初始设置为1小时,访问网站,缓存文件生成。 |
结论: 缓存设置为一分钟后,如果不去访问的话,缓存在一分钟后不会过期,需要再次去访问,然后中间间隔一分钟不访问缓存就会过期。