Nginx配置expires缓存时间:让网页加载更快的小技巧

打开一个ref="/tag/88/" style="color:#C468A7;font-weight:bold;">网页,有时候秒开,有时候却要等好几秒。其实,背后可能是浏览器有没有“记住”那些图片、CSS和JS文件。Nginx作为常用的Web服务器,可以通过配置expires指令来告诉浏览器:这些文件你可以存一段时间,不用每次都重新下载。

什么是expires缓存

expires是Nginx用来设置HTTP响应头Cache-ControlExpires的指令。它控制静态资源在用户浏览器中缓存的时间。比如一张网站Logo图片,设置缓存1个月后,用户第二次访问时,浏览器直接从本地读取,不用再向服务器请求,自然就快了。

基本语法和常用值

expires指令可以加在serverlocationif块中。语法很简单:

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年缓存已经生效。

缓存不是万能的,但合理使用能让用户感觉你的网站“飞起来”。特别是流量大的站点,减轻服务器压力的同时,用户体验也上去了。