浏览器缓存:
加速用户访问,提升单个用户(浏览器访问者)体验,缓存在本地
Nginx缓存
缓存在nginx端,提升所有访问到nginx这一端的用户
提升访问上游(upstream)服务器的速度
用户访问仍然会产生请求流量
控制浏览器缓存:
如上图,用户请求的时候会分为两个地方的缓存。缓存静态资源。
浏览器里面的缓存会加速单个用户的访问,nginx端的缓存会优化内网的传输 (nginx请求上游服务器的资源会有内网带宽的损耗 ,需要有一个请求和响应的时间。如果上游服务器的内容(静态文件)会被缓存到 nginx 端的话,内网的损耗就没那么大了,响应的也会减小用户整个请求的响应时间。 )
对于浏览器的缓存,可以使用expires指令做一定的控制,主要是针对一些静态资源文件缓存,比如 html、css、js、图片等。
expires [time]
location / { ... expires 10s; }
然后请求的响应头部会多出属性
Cache-Control: max-age=10;# 相对过期时间。
可以发现 Exipires(过期时间) 的值 Date(当前时间) 的值恰好只差 10s
修改location 映射的资源之后,由于 修改时间 (响应头中的 Last_Modified)发生了更改,当再次请求时,就不会再使用缓存
expire @[time]指令可以指定一个以天为节点的过期时间
location / { ... expires @22h30m; }
刷新浏览器之后,可以看到 Date 和 Expires 的时间差 等于 Cache-Control 中的 max-age
expires -[time]
表示缓存提前过期
location / {
...
expires -1h;
}
expires epoch
表示 nocache,不设置 缓存,响应头中的 Cache-Control属性 是 no-cache
location / {
...
expires epoch;
}
expires off
expires 的默认设置,关闭状态,关闭并不代表没有 expires ,浏览器还是有默认机制,只不过是在Nginx 端没有添加关于 缓存的内容,在响应头里面是看不到的。
location / {
...
expires off;
}
expires max
设置缓存永不过期。Expires 会在 2037年过期。