Nginx中用expires指令可设置静态资源缓存时间,如expires 30d配合immutable提升性能,需结合文件哈希命名避免更新失效,并通过响应头和浏览器开发者工具验证缓存生效。

在Nginx中,用expires指令可以轻松设置图片等静态资源的本地缓存时间,让浏览器在有效期内直接读取本地副本,减少重复请求、提升页面加载速度。
expires指令的基本用法
expires用于向HTTP响应头中添加Expires和Cache-Control字段,控制客户端缓存行为。它通常放在location块中,针对特定后缀的文件生效。
- 语法示例:
expires 1h;表示缓存1小时;expires 7d;表示缓存7天 - 支持单位:s(秒)、m(分钟)、h(小时)、d(天)、M(月,30天)、y(年,365天)
- 也可设为
expires off;关闭缓存,或expires epoch;立即过期
针对图片配置缓存的典型写法
推荐在匹配图片文件的location中设置,兼顾通用性和可维护性:
location ~* \.(jpg|jpeg|png|gif|webp|ico|svg)$ {
expires 30d;
add_header Cache-Control "public, immutable";
}-
~*表示不区分大小写的正则匹配,覆盖常见图片格式 -
30d适合大多数场景:既避免频繁回源,又留有合理更新窗口 -
immutable提示浏览器该资源不会变更,可跳过条件GET验证,进一步优化性能
注意缓存与资源更新的配合
启用长期缓存后,若图片内容更新但文件名不变,用户可能继续看到旧版本。因此需配套处理:
- 推荐采用“文件内容哈希命名”策略,如
logo.a1b2c3.png,每次变更生成新文件名 - 若必须复用同名文件,可临时设较短缓存(如
expires 1h;),或配合Cache-Control: no-cache强制校验 - 上线新图后,可通过清除CDN缓存或等待自然过期来确保一致性
验证缓存是否生效
部署后,用浏览器开发者工具的Network面板检查图片响应头:
- 查看
Cache-Control字段是否含max-age=2592000(对应30d) - 确认
Expires时间是否为当前时间+设定时长 - 刷新页面时,状态码显示
200 (from memory cache)或304 Not Modified即表示缓存正常工作

















