静态文件走长缓存,动态接口按数据时效做短缓存或禁缓存,才能同时保住命中率和数据准确性。
动静分离怎么设置缓存规则?先给每个URL打上业务标签
动静分离不是简单把HTML、CSS、JS拆到不同目录,真正影响缓存效果的是资源背后的业务属性,同一个URL,在电商站和资讯站里,缓存策略可能完全相反。
静态资源和动态接口的边界
- 静态资源:CSS、JS、图片、字体、视频切片,特征:文件内容稳定,带版本号或哈希。
- 动态接口:登录、购物车、订单、搜索、推荐,特征:依赖用户状态或实时数据,URL像静态,实际由后端模板渲染,/news/2026/03/01/123.html。
Nginx基础缓存规则落地
先看一套可用的Nginx配置:
location ~ .(css|js|jpg|jpeg|png|gif|webp|woff2|mp4)$ {
expires 30d;
add_header Cache-Control "public, max-age=2592000, immutable";
}
location ~ ^/api/(cart|checkout|order)/ {
proxy_pass http://backend;
add_header Cache-Control "no-store";
}
location ~ ^/api/ {
proxy_pass http://backend;
add_header Cache-Control "public, max-age=60";
}
解释:
- 带版本号的静态资源可以immutable,一年不变。
- 购物车、结算、订单接口必须no-store,防止串号。
- 普通API给60秒,既降低后端压力,又不会让数据太旧。
按业务类型而不是按文件后缀做决策
真正成熟的团队,会先画一张路由表,把每个URL模式归类。
| URL模式 | 业务类型 | 缓存策略 |
|---|---|---|
| /static/.css | 全站公共样式 | 长缓存30天 |
| /product//price | 电商价格 | no-store或10秒 |
| /news/list | 资讯列表 | 60秒 |
| /news/detail/ | 资讯正文 | 静态化后30天 |
| /user/profile | 用户资料 | no-store |
电商网站动静分离缓存怎么做?价格、库存与商品图不能同命
电商站最典型的错误,就是把商品详情页整体缓存,一张商品图可以缓存一个月,但价格和库存如果跟着缓存,就会出现下单时价格不一致。
商品详情页拆三层
- 商品主图、SKU图:CDN长缓存,配合版本号更新,描述:可以短缓存,比如10分钟。
- 价格、库存、优惠:no-store或5秒短缓存,必要时走边缘函数拼装。
这样拆开后,页面主体静态化,动态块单独请求,首屏速度不受影响,价格又能实时更新。
电商购物链路禁止缓存
- /cart、/checkout、/order、/payment:全部no-store。
- 用户地址、优惠券:no-store。
- 若使用CDN,需要在CDN控制台把这类路径设为“不缓存”。
北京企业网站动静分离配置价格受哪些因素影响
北京企业网站动静分离配置价格没有统一标准,多数情况下,价格由三个部分构成:技术工时、CDN流量包、规则维护成本,小型企业官网只做基础动静分离和缓存头配置,几百元到一两千元就能落地,电商或资讯类站点因为要改造模板、拆分接口、配置CDN刷新策略,价格会高一些,比价格更重要的是先把业务类型梳理清楚,否则低价配置后期改造成本更高。
资讯类网站动静分离缓存方案:列表页要新,正文页要快
资讯类网站对时效要求高,列表页和正文页必须分开设置,很多站长把整站缓存设成同一个TTL,结果要么新文章迟迟不显示,要么旧文章反复回源。
列表页与正文页的缓存差异
- 资讯列表:60秒到5分钟,新文章能在几分钟内出现,又不用每次回源,一旦发布,内容基本不变,可以静态化后长缓存30天,配合CDN刷新。
- 评论数、阅读数:动态接口短缓存30秒,或页面上异步加载。
伪静态正文的缓存陷阱
很多资讯站的正文URL是 /news/123.html,看起来像静态文件,实际可能是后端动态渲染,这种情况下,如果Nginx按.html后缀给长缓存,文章修改后不会更新,正确做法是:
location ~ /news/detail/ {
add_header Cache-Control "public, max-age=300";
}
或者直接生成真实静态HTML文件,再让CDN长缓存。
不同业务类型缓存策略对比:命中率、时效性和故障率怎么平衡
没有一套缓存策略能适合所有业务,需要把业务类型拆开,分别定目标。
对比表
| 业务类型 | 静态资源TTL | 动态数据TTL | 核心原则 |
|---|---|---|---|
| 电商 | 30天 | 价格/库存5秒 | 商品图快,交易数据准 |
| 资讯 | 30天 | 列表60秒,正文静态化 | 列表新,正文快 |
| 视频/下载 | 30-365天 | 很少动态 | 大文件缓存优先,防盗链 |
| 社交社区 | 头像30天 | 动态流60秒 | 短缓存,公共内容长缓存 |
| 企业官网 | 30天 | 表单no-store | 全站静态化,接口禁缓存 |
视频和下载站:大文件长缓存
视频切片、安装包、压缩包基本不会变,设置一年缓存都没问题,但要注意:
- 使用版本号或内容哈希,避免更新文件后用户仍拿到旧文件。
- 配合CDN带宽优化,能降低相当一部分回源成本。
社交社区:动态流不能一刀切
用户主页动态变化快,不适合长缓存,但头像、封面图变化少,可以长缓存,建议:
- 头像、封面:30天。
- 用户动态流:30秒到60秒。
- 评论列表:30秒。
- 私信、通知:no-store。
企业官网:静态化优先
企业官网页面数量有限,最省事的方案是全站静态化,再上CDN,表单提交接口、搜索接口必须no-store,这样北京地区访问速度快,也不怕提交信息被缓存。
一套可复用的差异化缓存配置路径
下面按操作顺序给出具体步骤,适合Nginx+CDN环境,每一步都能直接验证。
第一步:导出路由清单
把网站上所有URL模式列出来,至少包含:
- 路径
- 请求方法
- 是否依赖登录状态
- 数据更新频率
- 是否包含用户隐私
第二步:归入三类缓存级别
- 长缓存:public,max-age=2592000,immutable,适合带哈希的静态资源。
- 短缓存:public,max-age=60到300,适合列表、公共接口。
- 禁缓存:no-store或private,适合购物车、订单、用户资料。
第三步:写Nginx匹配规则
注意location匹配顺序,正则规则容易互相覆盖,建议把禁缓存规则放前面,长缓存规则放后面。
# 先匹配必须禁止缓存的接口 location ~ ^/(api/(cart|checkout|order|user)|cart|checkout|order) { add_header Cache-Control "no-store"; proxy_pass http://backend; } # 再匹配静态资源 location ~ .(css|js|jpg|jpeg|png|gif|webp|woff2)$ { expires 30d; add_header Cache-Control "public, max-age=2592000, immutable"; } # 最后兜底 location / { add_header Cache-Control "public, max-age=60"; proxy_pass http://backend; }
配置完成后执行 nginx -t 检查语法,再用 curl -I 查看响应头。
第四步:配置CDN缓存键和TTL
源站返回的Cache-Control只是基础,CDN控制台还可以针对路径、文件类型、查询字符串单独设置,常见做法:
- 静态目录 /static/ 缓存30天。
- /api/ 强制不缓存。
- 查询字符串影响内容的接口,把查询参数加入缓存键。
第五步:刷新与预热机制
长缓存最大的问题是更新不及时,需要在发布流程里加一步CDN刷新,比如资讯正文更新后,刷新对应URL,静态资源发版时,用哈希文件名避免刷新延迟。
第六步:用Vary处理多端和语言
如果同一个URL会根据User-Agent返回不同内容,需要设置Vary头,避免CDN把移动版缓存成桌面版。
- 图片WebP/AVIF:Vary: Accept。
- 多语言站点:Vary: Accept-Language。
- 移动适配页面:Vary: User-Agent。
配置示例:
add_header Vary "Accept, Accept-Language";
设置后,CDN会按这些请求头分别缓存,不会串版本。
动静分离的本质不是把文件分开,而是把业务节奏分开,静态资源追求长缓存命中率,动态接口追求数据准确性,按业务类型设置差异化缓存,才能让网站既快又准。
Q&A
动静分离缓存设置多久合适?
没有固定值,静态资源建议30天,列表页60秒到5分钟,商品价格或库存5秒到10秒,购物车和订单接口必须no-store,具体TTL要根据业务能容忍的数据延迟来定。
动静分离和CDN缓存规则冲突怎么办?
CDN通常遵循源站Cache-Control,如果两边规则冲突,以CDN控制台配置为准的较多,需要在CDN里对同一路径设置相同策略,避免源站说no-store,CDN却强制缓存,排查时可以用 curl -I 分别看源站和CDN节点的响应头。
北京企业网站动静分离配置价格一般多少?
北京企业网站动静分离配置价格差异较大,取决于站点类型和规则复杂度,普通企业官网只做静态资源长缓存和表单接口禁缓存,几百元到一两千元比较常见,涉及电商或资讯类改造、CDN刷新策略维护的,价格会更高,多数情况下按工时和流量计费。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/645937.html





