nginx 如何设置资源的过期时间(启用客户端缓存)
背景
Web 服务器合理设置资源的过期时间,可以充分利用客户端缓存,减少无效的重复请求。这样一来可以提升网页的加载性能,二来也可以减少服务器的性能压力。
代码片断
server {
listen 80;
server_name yuanbiji.net;
# disable etag
etag off;
# expires config
location ~ \/$ {
expires 5m;
}
location ~* \.(html|htm|xml|json)$ {
expires 5m;
}
location ~* \.(gif|jpg|jpeg|png|webp|svg|woff|woff2|ttf|otf)$ {
expires 30d;
}
location ~* \.(css|js)$ {
expires 1y;
}
location ~ /favicon.ico$ {
expires 2d;
}
# 以下是网站的常规配置(略)
# ...
}
location
和 expires
指令用于指定各类资源和对应的过期时间,可根据业务的实际情况自行增减。
坑
-
如果在网站的开发工作流中,CSS/JS 等资源在内容变化后文件名不会变化,则不应为它们设置过长的过期时间,以免文件变更后客户端仍在使用缓存中的旧版。
-
对于采用集群架构的网站来说,启用 ETag 可能会产生负面效果。由于绝大多数业务并没有高频更新内容的场景,也没有必要使用 ETag,使用
Last-Modified
响应头足矣。因此上面的代码片断关闭了 ETag 功能。 -
可以看出,以上代码需要通过
location
指令来匹配资源。因此可能会与当前站点的其他location
规则冲突。