动静分离方案里为动态接口保留回源,核心不是把动态请求也缓存到边缘,而是让静态资源尽量在CDN命中,让登录、下单、支付、库存、搜索等动态路径明确走回源链路。 规则写进Nginx和CDN配置,才算真正落地。
动静分离方案里动态接口怎么保留回源
动静分离最怕做成半截子工程:静态资源上了CDN,动态接口却被缓存规则误伤,用户看到的是价格不更新、购物车串号、登录状态错乱,问题往往不在CDN,而在回源规则没有写清楚。
先分清静态资源和动态接口的边界
- 静态资源:图片、CSS、JS、字体、视频切片,文件名带内容指纹,适合长缓存。
- 动态接口:登录、下单、支付、库存、优惠券、搜索、用户中心,请求带Cookie或Token,不能做公共缓存。
- 半动态页面:商品详情、列表页、活动页,页面壳可以缓存,价格和库存要回源校验。
- 场景判断:商品主图走CDN,
/api/price、/api/stock保留回源,这是电商站常见的拆分方式。
行业共识认为,带用户身份的接口不适合做公共缓存,把这条当底线,后面配置不容易跑偏。
回源保留的三条硬规则
- 路径规则要显式:CDN缓存规则里把
/api/、/login/、/cart/设为不缓存,缓存过期时间设为0,直接回源。 - 缓存头要一致:源站对动态接口返回
Cache-Control: no-store, private,不要只靠CDN控制台。 - 源站要有兜底:回源限流、连接池、健康检查、超时重试都要配,动态接口保留回源不等于让源站裸奔。
Nginx和CDN规则怎么写才可验证
源站Nginx可以这样拆:
location ~ \.(?:css|js|png|jpg|jpeg|gif|webp|svg|woff2)$ {
expires 30d;
add_header Cache-Control "public, max-age=2592000, immutable";
}
location /api/ {
proxy_pass http://dynamic_upstream;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Authorization $http_authorization;
proxy_set_header Cookie $http_cookie;
proxy_cache off;
add_header Cache-Control "no-store, private";
}
CDN控制台按这个顺序检查:缓存配置、缓存规则、/api/不缓存、回源Host保持、回源SNI开启、真实IP头透传,验证时用两条命令:
curl -I https://www.example.com/static/app.3f2a.css curl -I https://www.example.com/api/user
静态资源应看到长缓存头,动态接口应看到no-store或private,并且X-Cache类响应头显示未命中缓存。动态接口不进入公共缓存,是动静分离方案里保留回源的第一条验收标准。
动静分离回源价格怎么算才不踩坑
回源价格不能只看CDN流量单价,静态资源缓存命中后,回源流量会下降;动态接口保留回源后,回源请求数不会消失,业内专家指出,回源成本要把源站带宽、动态请求处理、日志存储和故障损失一起算。
回源成本由哪些部分组成
| 成本项 | 计费逻辑 | 动静分离后的变化 | 控制动作 |
|---|---|---|---|
| CDN流量 | 按流量或带宽 | 静态命中率提升后下降 | 指纹缓存、图片压缩 |
| 回源流量 | 按回源流量计费 | 静态回源减少,动态回源保留 | 静态预热、合并小文件 |
| 动态请求 | 按请求数或加速套餐 | 动态接口回源请求不会消失 | 接口合并、业务层缓存 |
| 源站带宽 | 按带宽或实例规格 | 动态接口集中回源,压力更集中 | 连接池、限流、扩容 |
| 日志与监控 | 按存储量 | 回源日志增长 | 采样、保留周期管理 |
控制回源成本的四个动作
- 静态资源做内容指纹,
app.3f2a.css这类文件名可以放心长缓存。 - 图片转WebP或AVIF,视频切片,减少静态回源体积。
- 动态接口在业务层加Redis缓存,但库存、支付状态仍以源站为准。
- 监控回源率、动态回源QPS、5xx比例,发现异常先查缓存规则,再查源站容量。
便宜方案和稳定方案怎么取舍
小站可以先用“静态CDN+动态接口直连源站”,动态接口保留回源但不做公共缓存,预算可控,中大型站点再加动态加速、多源站和自动扩缩容,成本高一些,换来大促时的稳定性。回源价格要算总账,不能只看CDN单价。
电商大促场景下动静分离怎么配置回源
大促时静态资源流量冲高,动态接口的库存、价格、优惠券请求也会集中回源,动静分离要做的,是让静态流量在边缘消化,让动态接口有序回源。
大促前把规则和容量对齐
- 静态资源提前预热,活动页图片、CSS、JS刷新到CDN节点。
- 压测
/api/stock、/api/order、/api/coupon,确认缓存规则没有误开。 - 给动态接口配独立上游集群,设置回源QPS上限和连接数上限。
- 检查CDN回源超时、重试次数,避免源站慢时被重试放大。
大促中保护动态接口
- 库存接口单独集群,不和搜索、推荐抢资源。
- 对热点商品做本地缓存和队列削峰,空结果也做短缓存,减少缓存穿透。
- 动态加速只优化回源链路,不改变“动态接口不公共缓存”的规则。
- 源站多可用区部署,CDN回源自动切换。
大促后复盘三个指标
- 静态缓存命中率是否稳定。
- 动态接口回源QPS峰值是否超过源站容量。
- 接口P95、P99延迟和5xx比例是否在可接受范围。
北京网站动静分离回源怎么设置
北京及华北用户访问时,CDN节点就近接入,源站放在北京或华北区域,回源延迟通常更可控,据工信部公开信息,网站备案和接入信息需要保持一致,接入CDN后源站可追溯,别为了省事把源站直接暴露。
网络路径和合规检查
- 确认ICP备案、HTTPS证书、CNAME解析都正确。
- 源站安全组只放行CDN回源IP段,不要对全网开放动态接口。
- 跨地域回源时关注专线或云企业网,避免公网绕行。
- 日志里保留真实客户端IP,Nginx可配
set_real_ip_from和real_ip_header X-Forwarded-For。
本地化配置清单
- CDN缓存规则添加
/api/不缓存。 - 回源Host保持业务域名,回源SNI开启。
- 源站
/api/关闭proxy_cache,返回no-store。 - 安全组放行CDN回源网段,配置限流和健康检查。
- 用
curl -I分别验证静态和动态路径的响应头。
常见误区
- 全站开缓存,动态接口被边缘节点缓存。
- 忽略Cookie和Authorization,导致用户串号。
- 回源IP不鉴权,源站被绕过CDN直接访问。
- HTTPS回源证书过期,动态接口批量回源失败。
CDN加速和动态回源怎么选
CDN加速通常解决静态内容分发,动态回源解决动态请求回到源站处理,两者不是二选一,动静分离方案里更常见的是组合使用。
三种方案对比
| 方案 | 适用场景 | 动态回源处理 | 注意点 |
|---|---|---|---|
| 静态CDN+动态直连 | 小站、预算有限 | 动态接口直接回源 | 源站要限流 |
| 静态CDN+动态回源 | 常规业务站 | /api/显式回源 |
缓存头要一致 |
| 静态CDN+动态加速 | 大促、跨地域业务 | 动态请求走优化链路回源 | 成本更高,配置更复杂 |
推荐组合
静态资源走CDN长缓存,动态接口保留回源,关键接口加动态加速,API网关做鉴权和限流,源站做自动扩缩容。静态缓存做深,动态链路做稳,比单纯追求CDN命中率更重要。
动静分离的底线是动态接口保留回源,规则写进配置和监控,别靠口头约定,静态资源可以大胆缓存,动态接口必须清清楚楚回源。
关于动静分离动态接口保留回源的Q&A
动态接口设置了no-store,CDN还会缓存吗?
通常不会,但要看CDN是否忽略源站缓存头,更稳妥的做法是CDN缓存规则把/api/设为不缓存,源站同时返回Cache-Control: no-store, private,两边一致才可靠。
动静分离后动态接口回源会不会拖慢访问?
会有回源网络延迟,但可以通过动态加速、连接复用、就近源站和多可用区部署降低影响,静态资源不占回源带宽后,动态接口的源站资源反而更容易保障。
小网站预算有限,能不能只做静态CDN、动态直连?
可以,这是常见起步方案,静态资源走CDN,动态接口保留回源到源站,不做公共缓存;流量上来后再加动态加速和多源站。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/794728.html


