如何设置网站测速Nginx图片缓存过期时间?
合理设置Nginx图片缓存过期时间是提升网站测速成绩的关键措施,通过配置expires指令和Cache-Control头,可为不同图片类型设置差异化缓存策略,通常建议将静态图片缓存设为7-30天,带哈希值的图片可设为1年。
一、基础缓存配置方法
1. 基本配置步骤
- 打开Nginx配置文件:通常为
/etc/nginx/nginx.conf或/etc/nginx/conf.d/default.conf - 在server或location块中添加缓存指令:
location ~* \.(jpg|jpeg|png|gif|ico|webp|svg)$ { expires 30d; add_header Cache-Control "public, no-transform"; access_log off; } - 保存并重新加载Nginx:
nginx -s reload
2. 核心指令解析
expires 30d:设置浏览器缓存过期时间为30天,Nginx会自动添加Expires和Cache-Control: max-age=2592000头add_header Cache-Control "public, no-transform":指定缓存策略为公共缓存,禁止中间代理修改内容access_log off:关闭访问日志,减少I/O开销,提升性能
二、针对网站测速的优化策略
1. 按图片类型差异化设置
- 长期缓存(1年):适用于带哈希值/版本号的图片(如
banner.abc123.jpg)location ~* [a-f0-9]{8,}\.(jpg|jpeg|png|gif|webp|svg)$ { expires 1y; add_header Cache-Control "public, immutable"; } - 中期缓存(7-30天):适用于普通静态图片(如logo、图标)
location ~* \.(jpg|jpeg|png|gif|webp|svg)$ { expires 7d; add_header Cache-Control "public"; } - 短期缓存(1-2天):适用于可能频繁更新的图片
location ~* \.(jpg|jpeg|png|gif|webp|svg)$ { expires 1d; add_header Cache-Control "public, must-revalidate"; }
2. 现代浏览器优化技巧
- 启用
immutable标记:告知浏览器资源内容不会改变,无需发起验证请求,大幅提升性能add_header Cache-Control "public, immutable"; - 配置ETag和Last-Modified:确保Nginx开启这些头,以便浏览器进行高效缓存验证
etag on; if_modified_since exact;
三、高级配置与最佳实践
1. Nginx缓存路径优化
http {
# 定义缓存路径和参数
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=static_cache:10m inactive=60m use_temp_path=off;
# 配置图片缓存
location ~* \.(jpg|jpeg|png|gif|webp|svg)$ {
proxy_cache static_cache;
proxy_cache_valid 200 302 7d;
expires 7d;
add_header Cache-Control "public, no-transform";
access_log off;
}
}
proxy_cache_path:定义缓存存储路径和参数proxy_cache_valid 200 302 7d:对200和302响应设置7天缓存有效期
2. 验证缓存是否生效
- 使用curl检查响应头:
curl -I http://your-site.com/static/banner.jpg查看是否包含Expires和Cache-Control头,确认缓存设置正确 - 浏览器开发者工具:在Network标签中检查图片请求的响应头,确认缓存策略已应用
3. 测速优化特别建议
- 静态资源域名分离:为图片设置单独的子域名(如
static.example.com),减少Cookie传输开销 - 避免缓存冲突:确保图片URL在更新时发生变化(通过哈希值或版本号),避免浏览器和CDN使用旧缓存
- CDN协同配置:如果使用CDN,确保CDN缓存策略与Nginx配置一致,避免双重缓存问题
四、常见问题解决
1. 缓存未生效排查
- 检查配置语法:
nginx -t测试配置文件是否正确 - 确认配置位置:确保缓存指令放在正确的
server或location块中 - 查看日志:检查
/var/log/nginx/error.log是否有相关错误
2. 图片更新后用户看不到最新版本
- 解决方案:采用版本控制策略,如将图片命名为
banner-v2.jpg或banner.abc123.jpg - 临时解决方案:在图片URL后添加随机查询参数(如
banner.jpg?v=123),强制浏览器获取新资源
3. 缓存时间设置参考
| 图片类型 | 推荐缓存时间 | 适用场景 |
|---|---|---|
| 带哈希值图片 | 1年 | Webpack等构建工具生成的资源 |
| 静态图标/Logo | 30天 | 不常变化的品牌元素 |
| 内容图片 | 7天 | 文章配图等可能更新的内容 |
| 广告图片 | 1-2天 | 频繁更新的营销素材 |
重要提示:网站测速时,缓存命中率应达到85%以上才能获得良好性能评分。设置过短的缓存时间会导致测速工具重复请求资源,影响最终得分。对于测速工具(如Google PageSpeed Insights),建议在测试前清除浏览器缓存,确保测试结果反映真实性能。