介绍nginx是如何设置缓存之前,我们还是先聊聊web浏览器的缓存机制。

1.浏览器缓存

浏览器的缓存机制也就是我们说的HTTP缓存机制,其机制是根据HTTP报文的头信息进行识别的(如:Expires,Cache-control等)。

Expires

Expires是HTTP/1.0控制网页缓存的字段,其值为服务器返回该请求结果缓存的到期时间,即再次发起该请求时,如果客户端的时间小于Expires的值时,直接使用缓存结果。

Expires是HTTP/1.0的字段,但是现在浏览器默认使用的是HTTP/1.1,那么在HTTP/1.1中网页缓存还是否由Expires控制?

到了HTTP/1.1,Expire已经被Cache-Control替代,原因在于Expires控制缓存的原理是使用客户端的时间与服务端返回的时间做对比,那么如果客户端与服务端的时间因为某些原因(例如时区不同;客户端和服务端有一方的时间不准确)发生误差,那么强制缓存则会直接失效,这样的话强制缓存的存在则毫无意义,那么Cache-Control又是如何控制的呢?

Cache-Control

在HTTP/1.1中,Cache-Control是最重要的规则,主要用于控制网页缓存,主要取值为

参数说明
public所有内容都将被缓存(客户端和代理服务器都可缓存)
private所有内容只有客户端可以缓存,Cache-Control的默认取值
no-cache客户端缓存内容,但是是否使用缓存则需要经过协商缓存来验证决定
no-store所有内容都不会被缓存,即不使用强制缓存,也不使用协商缓存
max-age=xxx (xxx is numeric)缓存内容将在xxx秒后失效

校验过期机制

首先,校验本地的缓存是否过期,本地缓存校验是否过期依赖http头信息中ExpiresCache-Control字段。这两个字段都会起到同一个作用,区别就是协议不同,Expires是1.0协议,Cache-Control 是1.1协议。如果本地文件过期,就会校验Etag字段和Last-Modified字段。EtagLast-Modified的共同点就是会向服务器进行校验。

Last-Modified记录的是一个具体时间,当服务器的文件更新后,服务器上的文件时间就会和缓存中Last-Modified记录的时间不一致,这样服务器会将更新后的文件返回给客户端

Etag记录的是一个字符串,因为Last-Modified记录的是一个时间,当服务器更新的时间是秒级别的时候,这个时候靠Last-Modified就不能够检测文件是否更新。所以Etag的出现就是为解决这个问题。

ssl

2.expires

expires的原理就是给Response Headers头信息中添加Cache-Control、Expires信息

Syntax: expires [modified] time;
	expires epoch | max | off;
Default: expires off;
Context: http,server,location,if in location

示例配置

location ~ .*\.(html | htm)$ {
	root /opt/app/code;
	expires 24h;
}

访问页面,打开调试工具,看到Response Headers头信息中出现Cache-ControlExpires字段,记录值都是24小时。

ssl

nginx教程

nginx环境搭建(1) nginx基础知识(2) nginx的安装 卸载(3) nginx的基本参数使用(4) nginx分析默认配置(5) nginx 虚拟主机配置(6) nginx 日志(7) nginx 模块(8) nginx 访问控制(9) nginx 静态资源web服务(10) nginx 缓存(11) nginx 跨域访问(12) nginx 防盗链(13) nginx 正向,反向代理配置(14) nginx 代理缓存配置(15) nginx websocket(16) nginx fastcgi(17) nginx 搭建wordPress博客(18) nginx Fastcgi缓存配置(19) nginx uwsgi反向代理(20) nginx 负载均衡(21) [深] nginx 动静分离(22) [深] nginx rewrite规则(23) [深] nginx 平滑升级 添加模块 调试(24) [深] nginx secure_link_module模块(25) [深] nginx geoip_module模块(26) [深] nginx https(27) [深] nginx与lua的开发(28) [架] nginx常见问题(29) [架] nginx性能优化(30) [架] nginx 安全(31) [架] nginx 反向代理gRpc(32)