自建下载页的选型账:大文件、免费额度与那条藏在文档里的红线
给静态站点加一个资源分享页,听起来是件小事:起个子域名、把文件丢进对象存储、页面上列出来就行。真动手才发现,真正的决策不在”怎么做页面”,而在”用什么撑住下载流量”——而这一层的选择,几乎全被几条没写在定价页上的条款决定。
这篇记的是选型过程。配置部分可以看《腾讯云 COS + EdgeOne 静态资源分发实践》,那篇讲怎么配,这篇讲为什么这么选。
先纠正一个直觉:大文件本身不贵
动手前我的假设是”大文件 = 贵”。算完发现这个直觉是错的。
成本公式是:
1 | 月成本 = 月下载总量 × 流量单价 + 存储量 × 存储单价 |
跟单个文件多大没有任何关系。一个 500MB 的安装包被下载 100 次,是 50GB 流量;换成 5000 个 10MB 的小文件凑出同样 50GB,账单分毫不差。
真正要盯的是月下载总量,不是文件体积。想明白这点之后,选型标准立刻清晰了:我要找的是低流量单价与充足免费额度,而不是”能放大文件”的服务。
那条藏在文档深处的条款
调研 EdgeOne 免费版时,在《免费版套餐使用说明》里翻到这么一段:
免费套餐主要提供缓存并加速网页及网站内容的交付,不提供视频或其他大型文件业务(包括但不限于高比例图片、音视频文件,游戏安装包等),您可以通过订阅付费获得视频或其他大型文件业务。
若您未订阅相关付费服务而分发上述内容(或存在此类合理怀疑),EdgeOne 保留以下权利:暂停或限制您对 EdgeOne 的访问权限;限制终端用户通过 EdgeOne 获取您的特定资源。
这条对个人站的分量很重。EdgeOne 免费版在国内 CDN 里几乎是独一档的存在:0 元、长期有效、含中国大陆节点、流量与请求均不计量。我原本打算直接用它扛下载流量——如果真的这么用了,一旦往上放安装包,整站可能被连坐停权。
值得注意的是后半句”您可以通过订阅付费获得视频或其他大型文件业务”。这说明该红线是免费版专属政策,付费套餐并不受约束。它同时也是后面选型的转折点。
把几家摊开算
以中国大陆 HTTPS 口径,2026 年 10 月的公开费率:
| 方案 | 存储(元/GB/月) | CDN 流量(元/GB) | 回源(元/GB) | 长期免费额度 | 大文件红线 |
|---|---|---|---|---|---|
| EdgeOne 免费版 + COS | 0.13 | 0(不计量) | 0.15 | 无 | ⚠️ 有 |
| EdgeOne 个人版 + COS | 0.13 | 含 50GB,超出买流量包 | 0.15 | 50GB/月 + 300 万请求 | 无 |
| 七牛云 Kodo + 融合 CDN | 0.099 | 0.28 | 0.15(首 10GB 免) | 存储 10GB + 回源 10GB + HTTP 下载 10GB | 无 |
| 又拍云 | 0.129 | 0.29 | 免费 | 只有代金券 | 无 |
| 腾讯云 CDN + COS | 0.13 | 0.21 | 0.15 | 无 | 无 |
| 阿里云 CDN + OSS | 0.12 | ~0.20 | 0.23 | 40GB 存储包 9 元/年(活动) | 无 |
主流 CDN 的流量单价其实挤在 0.20~0.29 元/GB,差距不到 50%。 也就是说,在这个量级上挑最便宜的那家,省下来的绝对金额每月不过几元。
真正的分水岭是另外两件事:有没有长期免费额度,以及有没有大文件红线。
又拍云为什么不选
又拍云 0.29 元/GB 是主流里最贵的一档,而它的”免费额度”并不是额度——新用户送 61 元代金券(1 个月)、又拍云联盟送 67 元(12 个月),按 0.29 元/GB 折算大约抵 231GB 流量,用完即止。联盟通常还要求站上挂标识。
它唯一的优势是 CDN 回源流量免费、请求免费。但回源费用在我的量级下每月只有几毛钱。多付 40% 单价换这个,账算不过来。
七牛有个容易踩的坑
七牛的长期免费额度是真的:每月 10GB 标准存储、10GB CDN 回源、100 万次 GET 请求,不是新用户限期的那种。存储单价 0.099 元/GB/月也是主流里最低的。
但那个 10GB 的 CDN 下载免费额度,只限 HTTP,不覆盖 HTTPS:
| 七牛融合 CDN 中国大陆 | 单价 |
|---|---|
| HTTP 下载流量 0–10GB | 免费 |
| HTTP 下载流量 10GB 以上 | 0.24 元/GB |
| HTTPS 下载流量 | 0.28 元/GB(无免费额度) |
全站 HTTPS 的站点,等于这个免费额度拿不到。看资费页时很容易只看第一行。
顺带纠正一个流传很广的旧数据
很多文章还在写”COS 每月有 10GB 免费流量”。查官方文档可知,现行免费额度是仅 50GB 标准存储容量、6 个月有效期、仅新用户——流量与请求均不在免费额度内。按旧数据估成本会严重偏低。
结论:EdgeOne 个人版
月下载 100GB + 存储 20GB 的场景下(假设缓存命中率 90%):
| 方案 | 月成本 |
|---|---|
| EdgeOne 免费版 + COS | ≈ 4 元(但触犯红线) |
| EdgeOne 个人版 | ≈ 14 元 |
| 腾讯云 CDN + COS | ≈ 25 元 |
| 阿里云 CDN + OSS | ≈ 25 元 |
| 七牛云 | ≈ 29 元 |
| 又拍云 | ≈ 31 元 |
个人版 36 元/年(1 折活动价,原价 358.8 元/年),除了解除大文件红线,还顺带解锁了三件正需要的东西:
- 单连接下载限速(免费版没有)——防止单个 IP 打满带宽
- 速率限制规则从 1 条变成 20 条
- 50GB/月流量 + 300 万次请求
⚠️ 有个容易忽略的点:这 50GB 是站点级共享额度,不是域名级。本站的网页流量和下载域名共用这一份,做容量规划时要扣掉页面本身那部分。
另外得留个后手:1 折活动若不续上,成本会跳到 30 元/月左右。那种情况下就不值得了,退回”免费版管小文件、大文件走 CNB Generic 制品库”更划算。
只有做下载分发才会遇到的配置坑
下面这几条,是通用 CDN 配置文档里不太会强调、但在下载场景下会真金白银踩到的:
1. 源站类型必须选「腾讯云 COS」。 手填 COS 域名到「自有源站」也能跑通,但那样 COS 侧会按外网下行流量计费(约 0.5 元/GB),是 CDN 回源价(0.15 元/GB)的三倍多。选 COS 源站类型才能走回源计费口径。
2. 存储桶设私有读写。 公有读的桶一旦路径泄露,别人可以直接访问 *.cos.*.myqcloud.com,按外网下行计费且完全不可控。私有桶 + 只授权 EdgeOne 回源,从根上堵死这条路。
3. 开启「忽略 query string」。 否则 ?v=1、?from=xxx 这类参数会把同一个文件在边缘缓存成 N 份,回源量直接翻倍。
4. 大文件关闭分片回源。 开启 Range 分片回源后,一个文件会在边缘存成多块,命中率下降。整文件缓存对大文件更划算。
5. Referer 规则要放行空 Referer。 防盗链如果设成”禁止空 Referer”,浏览器直接打开地址、命令行 wget、部分下载工具都会 403——跟”把文件分享出去”这个目的直接冲突。推荐配置是:允许空 Referer + 允许自己域名、拒绝其他域名,这样既挡住外站盗链嵌入,又不影响正常直链下载。
6. CDN 域名不要做分线路解析。 主域名按运营商分线路解析是为了直连源站,但 CDN 域名应该交给 CDN 自己的调度。人为分线路反而会干扰它选最优节点,统一一条 CNAME 即可。
静态站的资源清单怎么做
页面本身没有后端,清单用 JSON 驱动即可,与本站说说页同一套模式:一个 resources.json 作为唯一数据源,页面用原生 JS 的 fetch 拉取后渲染。加资源只改 JSON,不动 HTML。
几个必须坚持的细节:
1 | // 1. 重入保护:pjax 换页后脚本会重新执行 |
还有两个来自本站的既有约定:脚本标签要加 data-pjax 属性,否则 pjax 换页后不会重新执行;页面里成段的 HTML 内部不能有空行,否则会被 marked 当成代码块渲染。
生成清单时不必手抄体积和校验值,扫本地目录即可:
1 | python tools/gen-resources.py ./dist > source/resources/resources.json |
文件在上传到对象存储之前一定在本地,扫本地目录和扫 COS 得到的结果一致,还不需要处理密钥、也不让构建过程依赖外部服务。脚本只填算出 size / sha256 / updated,name / desc / category 这三个字段留 TODO 由人补——描述本来就该自己写。
成本台账
以存储 20GB 计,个人版按 36 元/年折算:
| 月下载量 | EdgeOne | COS 存储 | COS 回源 | 合计 |
|---|---|---|---|---|
| 30GB | 3 元 | 2.6 元 | 0.45 元 | ≈ 6 元/月 |
| 100GB | 3 元 + 流量包 7 元 | 2.6 元 | 1.5 元 | ≈ 14 元/月 |
可以看出缓存命中率直接等于省钱率:绝大部分请求命中边缘节点时,回源流量几乎可以忽略,贵的是那段被 EdgeOne 吃掉的边缘流量。所以长 TTL、忽略 query string、缓存预刷新这几项配置,不是调优,是省钱。
小结
- 成本取决于下载总量而非文件体积,别把大文件当成本杀手
- EdgeOne 免费版的大文件红线是真实存在的,但付费套餐不受约束——条款原文就写明了
- 主流 CDN 单价差距不到 50%,选型的分水岭是免费额度与业务红线,不是单价
- 七牛的 CDN 下载免费额度不覆盖 HTTPS,又拍云只有代金券没有真额度
- 下载场景下务必选 COS 源站类型、私有桶、忽略 query string、放行空 Referer
最后一条经验:定价页之外的文档,往往比定价页本身更值钱。这次真正改变结论的两条信息——大文件红线、HTTPS 不享免费额度——都不在定价页上,而是藏在套餐说明的注意事项和费率表的行间。