流量费砍半,顺手把盗链拦住

举报
yd_288136036 发表于 2026/10/27 15:07:22 2026/10/27
【摘要】 把静态站点从 OBS 直出迁到 OBS + CDN,40 分钟完成,月流量 100GB 场景下费用从约 50 元降到 27 元;文中给出静态托管、增量上传、缓存规则、HTTPS、Referer/URL 鉴权/私有桶回源三层防盗链及 6 个常见坑。

OBS + CDN 静态站点加速实战:流量费砍半,顺手把盗链拦住

上周把一个内部文档站从"OBS 直出"迁到了"OBS + CDN",整个过程大约 40 分钟,月流量按 100GB 估算,账单从 50 元出头降到 27 元左右,顺带把防盗链和 HTTPS 一起收口了。这篇把关键步骤、配置项和踩过的坑一次讲清楚,照着做基本能复现。

一、只放 OBS 的三个问题

静态站点直接扔进 OBS 桶确实能访问,但很快会遇到三件事:

  1. 源站单地域。OBS 桶只在一个区域,跨地域访问 RTT 明显变高,首屏 2 秒以上很常见。
  2. 流量贵。OBS 公网流出按量计费,访问量一上来账单增长很快。
  3. 资源裸奔。桶设成公共读之后,别人把图片、JS 直接引到自己的站上,流量仍然算你的。

CDN 解决的正是这三点:用户就近接入边缘节点,回源次数大幅下降;流量单价更低;防盗链、HTTPS、缓存策略全部收口在 CDN 层,OBS 退回成只读源站。

二、整体链路

访问链路:

用户 → CDN 边缘节点(缓存 / 防盗链 / HTTPS)→ 回源 → OBS 静态网站托管

发版链路:

本地构建 → obsutil 增量上传 → CDN 刷新首页

分工很清晰:OBS 负责存,CDN 负责送。

三、五步落地

第 1 步:建桶并开启静态网站托管

  • 区域选离主要用户近的,例如华北-北京四。
  • 桶名全局唯一。静态网站托管要求桶策略允许公共读,所以权限先设为公共读;如果后面启用 CDN 私有桶回源,再收紧为私有。
  • 进入"基础配置 → 静态网站托管",默认首页填 index.html,默认错误页填 404.html。
  • 记下静态网站托管域名,格式是 obs-website 域名,例如:
my-docs-site.obs-website.cn-north-4.myhuaweicloud.com

这个域名和普通桶域名不是一回事。静态托管域名才会在访问根路径时自动返回 index.html,后面 CDN 源站要指向它,别用普通桶域名。

第 2 步:obsutil 增量上传

obsutil config -i=<AK> -k=<SK> -e=obs.cn-north-4.myhuaweicloud.com
obsutil cp ./dist obs://my-docs-site/ -r -f -u

-r 递归,-f 覆盖,-u 只上传新增或变更的对象。几百个文件的站点通常几秒就能传完,比整站全量上传省事很多。

AK/SK 建议用 IAM 子账号,只授予这个桶的读写权限,不要图省事用主账号密钥。密钥写进脚本时,至少要放在环境变量里,别提交到代码仓库。

第 3 步:添加 CDN 加速域名

  • 业务类型选"网站加速",静态资源走这一档即可。
  • 源站类型选"OBS 桶",选中刚建的桶;如果控制台要求填源站域名,填静态网站托管域名,不要填普通桶域名。
  • 加速域名必须已完成备案,否则接不进来。
  • 创建完成后,把控制台给出的 CNAME 值添加到 DNS 服务商,等解析生效。

第 4 步:缓存规则与 HTTPS

缓存是静态站点加速收益的主要来源,规则建议按文件类型拆开:

资源类型 缓存时间 说明
index.html 0~60 秒 发版要即时生效,宁可回源
JS / CSS / 图片 / 字体 30 天 文件名带 hash,内容变则 URL 变
接口类 JSON 不缓存 避免脏数据

同时开启智能压缩和 Range 回源,前者减小传输体积,后者让大文件支持断点续传。

HTTPS 在 CDN 侧上传证书后开启,并打开"强制 HTTPS"。否则页面是 HTTPS、资源还是 HTTP,浏览器会直接拦截。

第 5 步:防盗链三重防护

第一层,Referer 白名单。 只放行自己的域名和本地调试地址。是否允许空 Referer 要看场景:浏览器直接打开、部分 App 内嵌页面不会带 Referer,一刀切拒绝会误伤正常用户。

第二层,URL 鉴权。 对下载、付费类资源使用带时间戳的签名 URL,由服务端用密钥生成,过期自动失效。密钥只放在服务端,绝不能出现在前端代码里。

第三层,源站收口。 这是最有效的一层:CDN 开启私有桶回源并完成授权,OBS 桶设为私有,桶不再公共读。这样即使有人拿到源站域名,也读不到对象,所有流量只能走 CDN。需要注意的是,私有桶回源时静态托管的默认首页不一定自动生效,切换后要验证根路径是否仍返回 index.html,必要时在 CDN 侧配置默认首页。

如果当前环境不支持私有桶回源,退一步也要做 Referer 白名单加 URL 鉴权。不要用"CDN 回源 IP 白名单"硬扛,回源 IP 并不固定,维护成本很高。

四、费用对比

按每月 100GB 流量、2GB 存储、100 万次 HTTPS 请求、缓存命中率 90%(回源 10GB)估算,单价取官网按需价的量级,实际以价格计算器为准:

项目 OBS 直出 OBS + CDN
存储 2GB 0.2 元 0.2 元
公网流量 100GB 50 元 —
CDN 流量 100GB — 20 元
回源流量 10GB — 1.5 元
HTTPS 请求 100 万次 — 5 元
合计 约 50.2 元 约 26.7 元

节省接近一半。流量越大、命中率越高,差距越明显。CDN 不是"多套一层",在静态站点上它同时是加速层和计费优化层。

五、踩坑清单

现象 原因 处理
访问根路径 404 CDN 源站填了普通桶域名 改为静态网站托管域名
回源 403 桶未开公共读,或私有桶未授权 CDN 回源 调整桶策略或开启私有桶回源
发版后页面还是旧的 index.html 被长缓存 HTML 单独短缓存 + 发版刷新
自定义域名接不进 CDN 域名未备案 先完成备案
HTTPS 页面资源被拦截 资源仍是 HTTP 全站 HTTPS + 强制跳转
字体加载跨域失败 桶未配置 CORS 允许源站域名 GET/HEAD

六、小结

这套方案没有复杂组件,核心就三个动作:用静态网站托管域名做源站、HTML 短缓存而静态资源长缓存、桶权限收紧配合 CDN 回源鉴权。做完之后,发版是一条 obsutil 命令,账单砍掉近一半,盗链也基本被挡住。

如果你的站点访问量还很小,先上 CDN 可能感知不明显;但一旦有推广、被聚合站收录,或者开始出现异常流量,越早把源站收口,后面越省心。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。