打开一个ref="/tag/88/" style="color:#C468A7;font-weight:bold;">网页,有时候秒开,有时候却要等好几秒。其实,背后可能是浏览器有没有“记住”那些图片、CSS和JS文件。Nginx作为常用的Web服务器,可以通过配置expires指令来告诉浏览器:这些文件你可以存一段时间,不用每次都重新下载。
什么是expires缓存
expires是Nginx用来设置HTTP响应头Cache-Control和Expires的指令。它控制静态资源在用户浏览器中缓存的时间。比如一张网站Logo图片,设置缓存1个月后,用户第二次访问时,浏览器直接从本地读取,不用再向服务器请求,自然就快了。
基本语法和常用值
expires指令可以加在server、location或if块中。语法很简单:
expires 1h; <!-- 缓存1小时 -->
expires 7d; <!-- 缓存7天 -->
expires 30d; <!-- 缓存30天 -->
expires max; <!-- 缓存到最大值,通常是1年 -->
expires -1s; <!-- 禁用缓存 -->
实际配置示例
假设你的网站有很多静态资源,比如图片、样式表和脚本。可以在Nginx配置中针对不同文件类型设置不同的缓存策略:
location ~* \\.(jpg|jpeg|png|gif|ico|webp)$ {
expires 30d;
add_header Cache-Control "public";
}
location ~* \\.(css|js)$ {
expires 1y;
add_header Cache-Control "public";
}
location ~* \\.(html|htm)$ {
expires 2h;
add_header Cache-Control "public";
}
上面这段配置的意思是:图片类文件缓存30天,CSS和JS文件因为版本更新少,直接缓存1年,而HTML文件可能经常改,只缓存2小时。
什么时候该禁用缓存
有些文件不能缓存太久,比如首页的横幅图可能每周一换。如果设置了30天缓存,用户可能几周都看不到新图。这时候可以动态控制,或者干脆不设长时间缓存。
开发调试阶段也建议关闭缓存,避免改了CSS却看不到效果。可以用:
expires off;
验证缓存是否生效
改完配置别忘了重启Nginx:sudo nginx -s reload。然后打开浏览器开发者工具,刷新页面,点进Network标签,查看静态资源的响应头。如果看到Cache-Control: max-age=31536000,说明1年缓存已经生效。
缓存不是万能的,但合理使用能让用户感觉你的网站“飞起来”。特别是流量大的站点,减轻服务器压力的同时,用户体验也上去了。