电商网站动静分离配置的核心思路,就是把商品图、CSS、JS这类静态资源从应用服务器里拆出去,交给对象存储和CDN处理;商品图缓存时长不能一刀切,促销图控制在7天以内,常规商品图30天,品牌图90天以上,再用版本号或文件hash强制刷新,才能同时保住加载速度和图片更新。
电商网站动静分离怎么配置才不踩坑
很多中小电商站点刚开始都把商品图和接口放在同一台服务器上,平时订单接口还能跑,一到秒杀或大促,带宽被图片请求占满,详情页突然变慢,这不是接口逻辑变复杂了,而是应用服务器干了太多不属于自己的活。
动静分离就是把这个局面拆开:动态请求继续走应用服务器,静态资源走单独的资源域名和存储。不做这一步,后面加CDN、做缓存都像在泥地上盖楼。
第一步:给静态资源单独开一个域名
别再用主域名直接访问图片,主域名带Cookie、带业务请求,图片混在里面会拖慢连接,拆一个专门域名,img.example.com,后面接CDN也方便。
操作路径如下:
- 在DNS解析里加一条CNAME,把
img.example.com指向对象存储或CDN的加速域名。 - 商品图、店铺Logo、分类图标、CSS、JS统一走这个域名。
- 主站页面里所有图片地址从
https://www.example.com/images/xxx.jpg改成https://img.example.com/images/xxx.jpg。
拆域名这个动作不难,但它是动静分离的地基,地基不打,后面配置再细也容易乱。
第二步:把商品图迁到对象存储
对象存储不是虚拟主机,它是按容量和请求次数计费的存储服务,电商商品图数量多、单个文件不大,但总量增长快,正适合放对象存储。
配置步骤:
- 在云厂商控制台创建Bucket,权限选择公共读,只适合公开图片场景。
- 保持目录结构不变,
/images/product/2026/07/,方便迁移和回滚。 - 上传时不要改变文件名,文件名最好带商品ID或SKU,方便后台定位。
- 批量迁移可用命令行工具,一条命令能把整个目录同步上去。
ossutil cp ./product/ oss://your-bucket/product/ --meta Cache-Control:max-age=2592000
上面的命令顺便给常规商品图写了30天缓存,后面再按目录分层调。
第三步:Nginx或应用层重写图片地址
上传到对象存储后,数据库或模板里的旧图片地址还在指向主站,你可以选择两种方式:
- 在应用代码里统一拼接资源域名,推荐后台配置一个资源域名变量。
- 在Nginx里对
/images/路径做重定向,把老地址转到新资源域名。
Nginx参考配置如下:
location /images/ {
return 301 https://img.example.com$request_uri;
}
但更稳的做法是直接改商品数据里的图片URL,301只能解决老链接,不能解决后续新上传图片的路径规范。
第四步:用版本号或文件hash处理缓存刷新
动静分离后最容易出的问题,是图片更新了但用户看到的还是旧图,原因不在CDN,而在缓存策略没和文件名绑定。
推荐两种方式:
- 文件名hash:
product_123_8f3a.jpg变了hash就变,适合长期缓存。 - 查询参数版本:
product_123.jpg?v=20260701没变但需要快速替换时加参数。
文件名hash比查询参数更适合商品图,因为电商商品主图更新频率不算高,但一旦换了新品图,旧缓存必须失效,hash能让缓存彻底跟着内容走。
商品图缓存时长设置多少合适?按场景给参数
商品图缓存不是越长越好,也不是越短越安全,行业共识认为,商品图的缓存分层比统一设置一个固定时长更实用。
缓存主要分两层:浏览器缓存和CDN节点缓存,浏览器先看本地缓存,本地没有才去CDN节点,CDN节点缓存到期后回源对象存储拉新文件,两层都配置正确,用户加载商品图才快。
分层缓存表
| 图片类型 | 推荐缓存时长 | 刷新方式 |
|---|---|---|
| 秒杀/促销主图 | 1-7天 | 查询参数+CDN刷新 |
| 常规商品主图 | 30天 | 文件名hash |
| 商品详情长图 | 60-90天 | 文件名hash |
| 品牌Logo、分类图标 | 90-365天 | 文件名hash |
| 用户评价图、头像 | 1-3天 | 用户ID或时间戳版本 |
促销图为什么必须短缓存
大促前的商品主图经常变:加角标、换价格、加“前100名半价”这类营销信息,如果促销图缓存30天,活动上线后用户看到的还是旧图,所以促销目录要单独设短缓存,7天已经够用,活动结束后再恢复常规策略。
操作上可以在对象存储里单独建 /promo/ 目录,对这个目录设 Cache-Control: max-age=604800,活动上线前手动刷新一次CDN目录,不需要全站刷新。
常规商品图30天的由来
常规商品图不频繁变,30天缓存能覆盖大多数用户的重复访问,同时不会因为换季改图导致长期不更新,配合文件名hash,图片一旦换了,地址就变,新地址自然没有缓存,旧地址30天后自动过期。
长尾商品图怎么取舍
有些长尾商品详情图几年都不动一次,可以设90天甚至365天,但前提是文件名必须hash化,否则某天修改一张详情长图,一年缓存会让更新几乎失去意义。
动静分离和CDN加速对比:钱该花在哪
很多人把动静分离和CDN当成一回事,其实它们解决的不是同一个问题。
| 维度 | 动静分离 | CDN加速 |
|---|---|---|
| 核心目标 | 降低应用服务器压力 | 降低用户访问延迟 |
| 实现方式 | 静态资源迁移到对象存储 | 多节点缓存内容 |
| 成本结构 | 按存储容量和请求次数 | 按下行流量 |
| 适用场景 | 所有电商站 | 用户分布广、跨地域访问多 |
先做动静分离,再上CDN。 如果静态资源还压在主站上,CDN回源会频繁打到应用服务器,这样CDN加速效果被源站拖累,钱也花得不值。
北京电商网站动静分离部署怎么选区域和节点
如果用户主要在北京、天津、河北一带,对象存储建议选华北区域,CDN加速节点要和源站区域匹配,避免用户在北京,CDN主节点却回源到华南。
具体操作:
- 对象存储Bucket选华北区域。
- CDN加速域名开启后,源站填对象存储的Bucket外网域名。
- 在CDN控制台看节点覆盖率,确保北京周边节点命中比例正常。
- 测试图片加载:用北京本地网络访问一次,看响应头里
x-cache是否为HIT。
地域选错,图片加载会多跳一段路,明明做个动静分离就能解决,结果绕了几百公里回源,体验自然差。
电商图片服务器配置价格由什么决定
很多站长问电商图片服务器配置价格多少,其实现在多数方案已经不用单独买一台图片服务器,价格主要由三块决定:
- 对象存储的存储容量,商品图总量越大,存储费越高。
- CDN的下行流量,访客越多、图片越大,流量费越高。
- 图片请求的HTTPS次数,小图多但每次请求都会计费。
起步阶段,商品图数量不多,访客量也小,这套方案的总成本通常低于自建一台图片服务器再加带宽的费用,流量上涨后,按量付费的优势更明显,因为不用为闲时带宽买单。
一次完整的分层缓存配置流程
这套流程可以直接照做:
- 在对象存储控制台建三个目录:
/promo/、/product/、/brand/。 - 分别设置缓存响应头:促销图7天、常规商品图30天、品牌图365天。
- 应用后台生成图片URL时,规则定为:促销图用查询参数版本,常规图和品牌图用文件名hash。
- 上传商品图时,按目录上传,不要混放。
- 大促活动上线前,在CDN控制台对
/promo/目录执行刷新。 - 监控图片回源率和缓存命中率,命中率长期偏低就检查缓存头是否被应用层覆盖。
这套流程不需要一步到位,先把常规商品图30天跑通,再细化促销和品牌图,动静分离和商品图缓存是电商网站优化的基本功,配置一次,后续大促不用再手忙脚乱。
电商网站动静分离与商品图缓存常见问题
电商网站动静分离配置多少钱?
没有固定报价,费用由对象存储容量、CDN下行流量和HTTPS请求次数决定,起步阶段图片少、流量小,多数站点的月度图片方案成本低于自建图片服务器,流量上涨后按量付费,也不需要为峰值长期预留带宽。
商品图缓存时长设置多少合适?
按图片角色分层最合适:促销主图1到7天,常规商品图30天,商品详情长图60到90天,品牌图90到365天,更新频繁的图用短缓存配合CDN刷新,长期不变的图用文件名hash配合长缓存。
动静分离和CDN加速有什么区别?
动静分离是把静态资源从应用服务器拆到对象存储,CDN是把内容分发到离用户更近的节点,动静分离降低源站压力,CDN降低用户访问延迟,两者通常搭配使用,动静分离在前,CDN加速在后,这样才能让商品图加载速度稳定。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/646266.html





