前言
在Nginx中配置expires缓存是提高网站负载能力的有效手段之一。expires指令用于控制HTTP响应头中的 Expires 或 Cache-Control 的 max-age 字段,从而指定浏览器缓存资源的时间长度。可以减少对服务器的请求次数,降低服务器的负载,并提高网站的响应速度。
- 配置expires缓存的建议:
- 静态文件缓存:对于图片、CSS、JavaScript 等静态文件,可以设置较长的缓存时间。当浏览器再次请求这些文件时,它会从本地缓存中加载,而不是从服务器下载。
- 动态内容缓存:虽然动态内容(如 PHP 页面、数据库查询结果等)通常不适合长期缓存,可以考虑对经常访问的动态内容进行缓存。通过使用Nginx 的代理缓存或第三方缓存模块(如 FastCGI Cache )来实现。对于动态内容,需要确保缓存的更新与后端服务器的更新保持同步,以避免数据不一致的问题。
- 注意缓存的粒度:在配置 expires 缓存时,需要注意缓存的粒度。过细的粒度可能会导致大量的缓存项,增加管理和更新的复杂性。而过粗的粒度可能会降低缓存的命中率,因为某些资源可能无法被有效地缓存。因此,需要根据实际情况来选择合适的缓存粒度。
- 监控和调优:配置完 expires 缓存后,需要定期监控网站的性能和缓存的使用情况。如果发现缓存命中率过低或服务器负载仍然很高,需要调整缓存设置或考虑使用其他优化手段。
- 确保服务器时间准确:expires 指令依赖于服务器的时间来确定缓存的过期时间。因此,确保Nginx服务器的时间与实际时间保持同步,以避免因时间误差导致的缓存失效问题。
- 考虑使用CDN:对于大型网站来说,使用内容分发网络(CDN)可以进一步提高网站的性能和负载能力。CDN 可以在全球范围内部署多个节点来缓存和分发资源,从而减少对源服务器的请求次数和带宽压力。
总之,通过合理配置 Nginx 的 expires 缓存,可以有效地提高网站的性能和负载能力。但请注意,缓存只是优化手段之一,还需要结合其他技术来全面提升网站的性能和用户体验。
expires
-
语法
expires [modified] time;
- modified]:可选参数,如果包含这个参数,则 time 是从文件最后修改时间开始计算的。如果不包含这个参数,则 time 是从当前时间开始计算的。
- time:可以是具体的时间值,如1d(表示1天)或1h(表示1小时)等。
expires epoch | max | off;
- epoch:设置 Expires 头字段的值为1 January, 1970, 00:00:01 GMT,实际上等同于告诉浏览器不要缓存该资源。
- max:设置 Cache-Control 头字段的 max-age 为浏览器认为的最大值(通常是1年,实际可能有所不同)。
- off:不修改 Expires 和 Cache-Control 头字段。
-
上下文设置
expires指令可以在http、server、location 上下文中使用,也可以在 location 块中的 if 语句中使用(不推荐)。
配置
- 为所有图片和CSS文件设置一个月的缓存时间:
location ~* \.(jpg|jpeg|png|gif|css)$ {
expires 1M;
}
- 为JavaScript文件设置更短的缓存时间(例如,1小时):
location ~* \.js$ {
expires 1h;
}
- 禁用某个特定目录下的缓存:
location /no-cache/ {
expires off;
}
- 重载配置文件
systemctl reload nginx
# 或者
nginx -s reload
# 或者重启服务
systemctl restart nginx
注意
在配置expires时,需要考虑与Cache-Control头字段的其他指令(如no-store, no-cache, must-revalidate等)的兼容性,以及它们如何影响浏览器的缓存行为。在某些情况下,可能需要同时设置expires和add_header指令来确保正确的缓存行为。