澳洲云服务器Nginx如何设置Cache-Control缓存策略?
- 来源:纵横数据
- 作者:中横科技
- 时间:2026/8/31 11:55:27
- 类别:新闻资讯
在澳洲云服务器上运营网站,页面加载速度直接影响用户体验和搜索引擎排名。合理配置Nginx的Cache-Control缓存策略,可以让浏览器在本地缓存静态资源,减少重复请求,显著降低服务器带宽消耗,同时让用户感受到更快的页面响应。很多站长虽然知道缓存很重要,但在实际配置时往往只是简单复制一段代码,并不清楚不同资源类型应该采用怎样的缓存策略。下面从原理到实践,系统讲解如何在Nginx中设置科学合理的Cache-Control缓存策略。
理解Cache-Control的核心指令
在动手配置之前,有必要先了解Cache-Control中几个关键指令的含义,这样才能根据实际业务场景做出正确的选择。
max-age用于定义缓存的有效时长,单位是秒。比如max-age=2592000表示缓存有效期为30天,在这段时间内浏览器会直接使用本地缓存,不再向服务器发起请求。
public表示响应可以被任何缓存节点存储,包括浏览器、CDN和中间代理服务器。适用于公开的静态资源,如图片、CSS、JS文件等。
private表示只允许最终用户的浏览器缓存,禁止CDN等共享缓存节点存储。适用于包含用户个人信息的页面内容。
no-cache并不是"不缓存"的意思,而是"可以缓存,但每次使用前必须向服务器验证是否更新"。如果资源没有变化,服务器返回304状态码,浏览器继续使用本地缓存,既保证了内容时效性,又节省了带宽。
no-store是最严格的指令,完全禁止浏览器和所有中间代理存储响应的任何部分。适用于支付页面、用户隐私数据等高度敏感的内容。
immutable用于告知浏览器,在缓存有效期内资源内容绝对不会改变,即使刷新页面也无需发送验证请求。这个指令特别适合文件名中带有内容哈希值的静态资源,比如app.a1b2c3d4.js。
带哈希的静态资源采用长期缓存
对于通过Webpack、Vite等构建工具打包生成的静态资源,文件名中通常包含内容哈希值。这类文件一旦发布就不会被修改,内容更新时文件名会随之变化,因此可以放心设置超长的缓存时间。
在Nginx的server块中添加如下配置:
location ~*
".[a-f0-9]{8,}.(css|js|png|jpg|jpeg|gif|svg|webp|ico|woff|woff2)$"
{
add_header Cache-Control "public, max-age=31536000, immutable"
always;
access_log off;
}
这段配置的含义是:匹配文件名中包含8位以上十六进制哈希值的静态资源,设置缓存有效期为一年,并标记为immutable。加上immutable后,浏览器在用户刷新页面时也不会对这些资源发起验证请求,彻底消除了不必要的网络开销。
普通静态资源采用中期缓存
对于没有带哈希值的静态资源,比如手动上传的图片、第三方库文件等,文件名不变但内容可能会更新,因此需要设置一个适中的缓存周期。30天是一个比较通用的选择,既能有效减少请求量,又能在更新后相对及时地让客户端获取到新版本。
location ~* .(css|js|png|jpg|jpeg|gif|svg|webp|ico|woff|woff2)$
{
add_header Cache-Control "public, max-age=2592000" always;
access_log
off;
}
需要注意的是,这条规则应该放在带哈希资源规则的后面。Nginx的location匹配中,正则表达式按照配置文件中的顺序依次匹配,先匹配到的优先生效。将更精确的哈希匹配规则放在前面,可以避免普通规则"抢走"本该长期缓存的请求。
HTML页面采用协商缓存
HTML页面是用户访问网站的入口,内容可能随着业务更新而频繁变化,不适合设置长期缓存。但如果完全禁止缓存,每次访问都要下载完整的HTML文档,又会造成不必要的带宽浪费。协商缓存是HTML页面的最佳选择。
location ~* .html$ {
add_header Cache-Control "private, no-cache,
must-revalidate" always;
}
这条配置的效果是:浏览器可以缓存HTML文件,但每次使用前都必须向服务器发送验证请求。如果文件没有变化,服务器返回304 Not Modified,浏览器继续使用本地缓存;如果文件已更新,服务器返回新的内容。加上private指令可以防止CDN等中间节点缓存HTML内容,避免不同用户看到相同的缓存页面。
动态内容和敏感数据禁止缓存
对于API接口、用户个人中心、支付页面等动态生成或包含敏感数据的内容,必须完全禁止缓存,防止信息泄露或用户看到过时的数据。
location ~ .php$ {
# 其他PHP-FPM配置...
add_header Cache-Control "no-store"
always;
}
location /api/ {
proxy_pass http://backend;
add_header Cache-Control
"no-store" always;
}
no-store指令确保浏览器和所有中间代理都不会存储这些响应的任何部分,每次请求都会直达后端服务获取最新数据。
实际案例:电商站点的分层缓存实践
曾有一个案例,某团队在澳洲云服务器上运营一个电商站点,上线初期没有做任何缓存优化,每次用户访问页面,浏览器都要重新下载所有的图片、CSS和JS文件,页面加载时间长达5秒以上,用户流失率很高。
运维团队根据资源类型制定了分层缓存策略。对于构建工具生成的带哈希文件,设置一年缓存并标记immutable;对于用户上传的商品图片等无哈希资源,设置30天缓存;对于HTML页面设置协商缓存;对于用户登录后的个人中心和订单接口设置no-store。
配置生效并reload Nginx后,通过浏览器开发者工具的Network面板观察,首次访问页面后,再次刷新时所有静态资源都显示为"from disk cache"或"from memory cache",HTML页面返回304状态码,页面加载时间从5秒缩短到1.2秒,服务器带宽消耗下降了约70%。
配置生效后的验证方法
完成配置后,需要验证缓存策略是否正确生效。最可靠的方式是通过curl命令直接查看服务器返回的响应头,这样可以排除浏览器缓存的干扰。
curl -I http://yourdomain.com/path/to/style.css
查看输出中的Cache-Control字段,确认是否包含预期的指令。对于HTML页面,可以验证返回的是no-cache;对于静态资源,确认max-age值是否正确。
也可以在浏览器中打开开发者工具,切换到Network面板,取消勾选"Disable cache"后刷新页面,观察各资源的Status列。显示"from cache"表示强缓存命中,显示304表示协商缓存命中,显示200则表示缓存未生效,需要检查配置是否正确。
关于always参数的使用建议
在add_header指令中加上always参数,可以确保缓存控制头在所有响应状态码下都会生效,包括304 Not Modified响应。虽然浏览器通常会沿用首次200响应中的缓存策略,但加上always可以增强配置的明确性和兼容性,是一个值得推荐的做法。
总结
在澳洲云服务器上通过Nginx设置Cache-Control缓存策略,核心思路是根据资源类型分层处理:带哈希的静态资源设置长期缓存并标记immutable,普通静态资源设置中期缓存,HTML页面采用协商缓存,动态内容和敏感数据完全禁止缓存。配置时注意location规则的匹配顺序,确保精确规则优先于通用规则。合理的缓存策略不仅能大幅提升页面加载速度,还能有效降低服务器带宽成本,是网站性能优化中投入产出比最高的措施之一。
纵横云服务器租赁,欢迎随时联系,客服联系方式:QQ3494196421,手机微信19906048601。




使用微信扫一扫
扫一扫关注官方微信 

