首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >使用腾讯云 COS 构建静态资源存储与 CDN 加速方案

使用腾讯云 COS 构建静态资源存储与 CDN 加速方案

原创
作者头像
用户11846116
发布2026-05-13 17:41:17
发布2026-05-13 17:41:17
1090
举报
文章被收录于专栏:软件合集软件合集

一、背景

在 Web 项目中,图片、视频、CSS、JavaScript、安装包等静态资源通常会消耗大量带宽。如果所有静态资源都由业务服务器直接提供,会带来几个问题:

业务服务器带宽压力变大; 用户访问速度受服务器地域影响明显; 静态资源与动态接口混在一起,不利于缓存和扩展; 文件备份、权限管理和防盗链配置复杂。

更合理的方案是将静态资源上传到腾讯云对象存储 COS,再结合 CDN 做全球或全国范围的访问加速。业务服务器只负责动态 API 和业务逻辑,静态资源交给 COS 与 CDN 承担。

二、方案架构

推荐架构如下:

用户访问网站页面; 页面中的图片、CSS、JS 等静态资源使用 CDN 域名; CDN 节点如果有缓存,直接返回资源; 如果没有缓存,CDN 回源到 COS 获取文件; COS 作为源站存储完整资源。

访问路径可以理解为:

用户 → CDN 边缘节点 → COS 源站

这种方式可以降低源站压力,提高用户访问速度,并减少业务服务器带宽成本。

三、创建 COS 存储桶

在腾讯云控制台创建 COS 存储桶时,需要注意以下配置:

存储桶地域应尽量靠近主要用户或业务系统; 访问权限根据业务场景选择私有读写或公有读私有写; 如果用于网站公开静态资源,可以结合 CDN 对外访问,而不是直接暴露 COS 默认域名; 文件目录建议按业务类型划分,例如:

代码语言:javascript
复制
/static/css/
/static/js/
/images/avatar/
/images/product/
/downloads/

清晰的目录结构有助于后续做缓存策略、防盗链和生命周期管理。

四、上传静态资源

开发阶段可以通过控制台上传文件,生产环境更推荐使用 SDK 或 CI/CD 自动上传。

以 Node.js 为例,可以使用 COS SDK 上传文件:

代码语言:javascript
复制
const COS = require('cos-nodejs-sdk-v5');

const cos = new COS({
  SecretId: process.env.TENCENT_SECRET_ID,
  SecretKey: process.env.TENCENT_SECRET_KEY,
});

cos.putObject({
  Bucket: 'demo-1250000000',
  Region: 'ap-guangzhou',
  Key: 'static/js/app.js',
  Body: require('fs').createReadStream('./dist/app.js'),
}, function(err, data) {
  if (err) {
    console.error(err);
    return;
  }
  console.log('upload success', data);
});

在真实项目中,不建议将 SecretId 和 SecretKey 写死在代码中,应通过环境变量、密钥管理或临时密钥方式管理。

五、配置 CDN 加速

配置 CDN 时,可以将 COS 作为源站。然后绑定自定义域名,例如:

代码语言:javascript
复制
static.example.com

这样页面中引用静态资源时,就可以使用:

代码语言:javascript
复制
<link rel="stylesheet" href="https://static.example.com/static/css/app.css">
<script src="https://static.example.com/static/js/app.js"></script>
<img src="https://static.example.com/images/product/1.png">

为了让资源更好地被缓存,建议对不同类型文件设置不同缓存策略:

图片、字体、版本化 JS/CSS 文件可以缓存较长时间; HTML 文件缓存时间较短; 频繁更新的配置文件可以设置短缓存或不缓存。

如果前端构建产物带 hash,例如:

代码语言:javascript
复制
app.8f3a2c1.js
style.9c21d0.css

则可以安全地设置较长 CDN 缓存时间。因为每次内容变化后,文件名也会变化,用户不会拿到旧文件。

六、防盗链与访问控制

如果静态资源是公开的,但不希望被其他网站直接引用,可以配置 Referer 防盗链。允许自己的域名访问,拒绝未知域名访问。

例如允许:

代码语言:javascript
复制
example.com
www.example.com

拒绝空 Referer 是否开启,需要根据业务判断。如果用户可能直接在浏览器打开图片,拒绝空 Referer 可能会影响正常访问。

对于私有文件,例如用户合同、付费资料、内部文档,不建议设置为公有读。可以使用私有存储桶加临时签名 URL 的方式访问。

示例:

代码语言:javascript
复制
https://private-bucket.cos.ap-guangzhou.myqcloud.com/file.pdf?sign=xxx

签名 URL 可以设置过期时间,到期后链接自动失效。

七、生命周期管理

静态资源长期积累后,存储桶中的历史文件会越来越多。对于临时文件、日志文件、转码中间文件,可以配置生命周期规则自动清理。

例如:

上传超过 30 天的临时文件自动删除; 超过 90 天的归档文件转为低频存储; 超过 180 天的备份文件转为归档存储。

合理使用生命周期规则可以降低存储成本。

八、实践建议

第一,静态资源尽量使用独立域名,避免和主站 API 共用域名。 第二,前端构建产物建议开启文件 hash,方便长缓存。 第三,不要在前端代码中暴露永久密钥。 第四,公开资源和私有资源应使用不同存储桶或不同目录策略。 第五,重要资源开启版本控制或做好备份。 第六,结合 CDN 监控查看命中率、流量和状态码分布。

九、总结

COS 与 CDN 的组合是云上静态资源托管的常见方案。COS 负责稳定、低成本地存储文件,CDN 负责将文件缓存到离用户更近的边缘节点。

通过这种方式,业务服务器可以专注处理动态请求,静态资源访问速度也能明显提升。对于官网、电商、小程序、内容社区、在线教育等场景,这都是一套简单而实用的基础架构。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、背景
  • 二、方案架构
  • 三、创建 COS 存储桶
  • 四、上传静态资源
  • 五、配置 CDN 加速
  • 六、防盗链与访问控制
  • 七、生命周期管理
  • 八、实践建议
  • 九、总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档