Nginx的缓存机制主要分为两种:强制缓存(强缓存)和协商缓存(验证缓存)。
强制缓存是指浏览器在请求资源时,直接从本地缓存中读取数据而不向服务器发送任何请求。这种缓存机制主要依赖于HTTP响应头中的Cache-Control
和Expires
字段。
Expires: Wed, 21 Oct 2025 07:28:00 GMT
。但由于Expires
依赖于客户端的时间设置,可能出现非预期的状况。Cache-Control
头部,提供了更多控制缓存行为的指令:
no-store
:禁止缓存(强缓存和协商缓存),客户端不存储任何值。no-cache
:禁止强缓存,需要重写验证(可以理解为禁止强缓存,启用协商缓存)。private
:私有缓存,禁止中间人(比如CDN等代理缓存)。public
:共享缓存,允许中间人缓存。max-age
:资源可以被缓存的最大时间,单位:秒,是一个相对时间,优先级高于Expires
。s-maxage
:用于共享缓存,单位:秒,如果在其有效期内,不去访问CDN等。s-maxage
会覆盖max-age
和Expires
。must-revalidate
:缓存使用陈旧资源时,必需先验证状态。协商缓存是一种在强制缓存失效后使用的缓存机制。在这种情况下,浏览器会携带特定的缓存标识(如ETag
或Last-Modified
)向服务器发送请求,询问资源是否有更新。
ETag
也会随之改变。Last-Modified: Wed, 21 Oct 2023 07:28:00 GMT
。ETag
值。Last-Modified
值。以下是一个简单的Nginx配置示例,展示了如何为静态资源设置强缓存:
location /static/ {
alias /path/to/static/files;
expires 30d;
add_header Cache-Control "public, max-age=31536000";
}
上述配置将/static/
路径下的文件缓存30天,并且通过Cache-Control
头部设置为公共缓存,允许任何中间人缓存。
curl -i http://example.com/resource.js
可以查看请求和响应头信息,帮助调试缓存配置。通过合理配置强缓存和协商缓存,可以显著提升网站性能,减少服务器负载。在实际应用中,通常会结合使用这两种缓存机制,以达到既快速又可靠的缓存效果。