使用腾讯云对象存储(Cloud Object Storage,COS)搭建图床服务

# 简介

图床服务提供图片存储、图片加工处理、图片全网分发等功能。
由于博客中使用的图床不稳定,现尝试使用腾讯云的对象存储服务搭建图床服务。
参考 腾讯云文档中心相关内容

# 存储桶

# 简介

存储桶(Bucket)是对象的载体,可理解为存放对象的 “容器”,且该 “容器” 无容量上限。对象以扁平化结构存放在存储桶中,无文件夹和目录的概念,用户可选择将对象存放到单个或多个存储桶中。

# 创建存储桶

  1. 登录 对象存储控制台
  2. 在左侧导航中,单击存储桶列表,进入存储桶列表页面。
  3. 单击创建存储桶。
  4. 在弹出的创建存储桶对话框中,配置如下信息:
  • 基本信息
    • 所属地域:请选择与您业务(或用户数量)相对集中的物理区域所对应的 COS 地域,设置后不可修改。地域的更多信息请参见 地域和访问域名。
    • 名称:请输入自定义的存储桶名称。设置后不可修改。命名说明请参见存储桶的命名规范。
    • 访问权限:存储桶默认提供三种访问权限:私有读写、公有读私有写和公有读写,设置后仍可修改。详细信息请参见存储桶访问权限。
    • 请求域名:自动生成。创建完存储桶后,您可以使用该域名对存储桶进行访问。
  1. 确认信息无误后,单击创建,即可创建存储桶。在存储桶列表界面中,您可以看到刚才已创建的存储桶。

# 存储桶命名规范

存储桶的命名由存储桶名称(BucketName)和 APPID 两部分组成,两者以中划线 “-” 相连。
例如 examplebucket-1250000000 ,其中 examplebucket 为用户自定义字符串, 1250000000 为系统生成数字串(APPID)。在 API、SDK 的示例中,存储桶的命名格式为 <BucketName-APPID>

# 权限

存储桶默认提供两种权限类型:公共权限和用户权限。

公共权限包括:私有读写、公有读私有写和公有读写。其访问权限可通过对象存储控制台上的存储桶的权限管理进行修改。

  • 私有读写
    只有该存储桶的创建者及有授权的账号才对该存储桶中的对象有读写权限,其他任何人对该存储桶中的对象都没有读写权限。存储桶访问权限默认为私有读写,推荐使用。
  • 公有读私有写
    任何人(包括匿名访问者)都对该存储桶中的对象有读权限,但只有存储桶创建者及有授权的账号才对该存储桶中的对象有写权限。
  • 公有读写
    任何人(包括匿名访问者)都对该存储桶中的对象有读权限和写权限,不推荐使用。

用户权限:主账号默认拥有存储桶的所有权限(即完全控制)。另外 COS 支持添加子账号有数据读取、数据写入、权限读取、权限写入,甚至完全控制的最高权限。
通过对象存储控制台,在存储桶列表页面创建存储桶。

# PicGo

# 安装 PicGo

PicGo 是一款支持多种云存储配置、快捷生成图片链接的工具。
更多相关内容参考 PicGod 的官方 指南
下载 PicGo-Setup-2.3.1-ia32.exe ,安装 2.3.1 稳定版到本地 windows 环境。

# 参数设置

在图床设置里找到腾讯云 COS,并配置以下相关参数项

  • COS 版本:选择 COS v5。
  • 设定 Secretld:开发者拥有的项目身份识别 ID,用于身份认证,可在 API 密钥管理 页面中创建和获取。
  • 设定 SecretKey:开发者拥有的项目身份密钥,可在 API 密钥管理 页面获取。
  • 设定 Bucket:存储桶,COS 中用于存储数据的容器。有关存储桶的进一步说明,请参见 参数说明 - 存储桶。
  • 设定 AppId:开发者访问 COS 服务时拥有的用户维度唯一资源标识,用以标识资源,可在 API 密钥管理 页面获取。
  • 设定存储区域:存储桶所属地域信息,例如 ap-beijing、ap-hongkong、eu-frankfurt 等。
  • 设定存储路径:图片存放到 COS 存储桶中的路径。
  • 设定自定义域名:可选,若您为上方的存储空间配置了自定义源站域名,则可填写。相关介绍可参见 开启自定义源站域名。
  • 设定网址后缀:通过在网址后缀添加 COS 数据处理参数实现图片压缩、裁剪、格式转换等操作,相关介绍可参见 图片处理。

# 自定义源站域名

将自定义域名绑定至存储桶中,可通过这个自定义域名访问存储桶内的文件。

# 操作步骤

  1. 登录 对象存储控制台
  2. 在左侧导航栏中,单击存储桶列表,进入存储桶列表页面。
  3. 单击需要配置域名的存储桶,进入存储桶配置页面。
  4. 在左侧导航栏中,选择域名与传输管理 > 自定义源站域名。
  5. 单击添加域名,配置项说明如下:
  • 域名与 CNAME:输入待绑定的自定义域名(例如 www.example.com)或者下拉选择已有的腾讯云域名。请确保输入的域名已 备案 且在 DNS 解析 DNSPod 控制台 添加解析(详细指引请参见 快速添加域名解析),并已在 DNS 服务商处设置好对应的 CNAME,详情请参见 CNAME 配置。
  • 源站类型:分为以下几种。
    • 默认源站:如果您希望将自定义域名用作默认源站,请选择默认源站。
    • 静态网站源站:如果您希望将自定义域名用作静态网站,请先为存储桶开启静态网站功能,然后选择静态网站源站。
    • 全球加速源站:如果您希望将自定义域名用作全球加速,请先为存储桶开启全球加速功能,然后选择全球加速源站。
  1. 配置完成后,点击创建,即可在列表页看到已配置的自定义源站域名。
  2. 如需配置证书,请单击绑定证书进行配置。绑定后,预计 30 分钟内生效。证书来源支持选择新上传证书和已托管证书。说明如下:
    • 新上传证书:原自有证书。若您希望使用自有证书,请选择此项。
    • 已托管证书:原腾讯云证书。若您希望使用腾讯云申请的证书,请选择此项。
  3. 根据所选的证书来源,选择配置如下信息
  • 证书内容:
    • 通常证书是以 .crt 或 .pem 等为扩展名的文件(例如 imgsc.aa.com_bundle.crt),请使用相应文本编辑器打开证书文件。
    • 证书格式以 “-----BEGIN CERTIFICATE-----” 开头,以 “-----END CERTIFICATE-----” 结尾。
    • 证书内容请包含完整的证书链。
  • 私钥内容:
    • 通常私钥是以 .key 或 .pem 等为扩展名的文件(例如 imgsc.aa.com.key),请使用相应文本编辑器打开私钥文件。
    • 私钥格式以 “-----BEGIN (RSA) PRIVATE KEY-----” 开头,以 “-----END (RSA) PRIVATE KEY-----” 结尾。
  • 托管 SSL:
    • 支持将新上传证书托管至 SSL,默认勾选。建议您托管至 SSL,托管后可在 SSL 控制台 对证书进行管理,享受证书到期提示、告警、更新等托管服务。
      • 通常私钥是以 .key 或 .pem 等为扩展名的文件(例如 imgsc.aa.com.key),请使用相应文本编辑器打开私钥文件。
      • 私钥格式以 “-----BEGIN (RSA) PRIVATE KEY-----” 开头,以 “-----END (RSA) PRIVATE KEY-----” 结尾。
  1. 绑定成功后,在自定义源站列表页,您可看到当前证书的证书 ID 和到期时间。
  2. 若您希望重新绑定证书,可单击绑定证书。若您不希望绑定当前证书,可单击解绑证书。

# CNAME 记录

# 操作场景

如果需要将域名指向另一个域名,再由另一个域名提供 IP 地址,就需要添加 CNAME 记录,最常用到 CNAME 的场景包括做 CDN、做企业邮箱。本文档指导您如何添加 CNAME 记录。

# 操作步骤

  1. 登录 腾讯云 DNS 解析控制台
  2. 在 “域名解析列表” 中,选择需要进行 CNAME 记录转发的域名,单击操作栏的解析,进入该域名的记录管理页面。
  3. 单击添加记录,填写以下记录信息
    • 主机记录:如果在步骤 2 中选择的是子域名,则此处填写 "@"。如果选择的是一级域名,则此处填写子域名。在实际操作过程中,选择在子域名中添加 CNAME 记录,主机记录选择 “@”。如果在一级域名中,添加 www.123.com 的解析,您在 “主机记录” 处选择 “www” 即可。如果只是想添加 123.com 的解析,您在 “主机记录” 处选择 “@” 即可。“@” 的 CNAME 会影响到 MX 记录的正常解析,添加时请您慎重考虑。
    • 记录类型:选择 “CNAME”。
    • 线路类型:选择 “默认” 类型,否则会导致部分用户无法解析。
      例如,您需要将联通用户指向 2.com,所有非联通用户都指向 1.com。您可以通过添加线路类型为默认、记录值为 1.com 和线路类型为联通、记录值为 2.com 的两条 CNAME 记录来实现。
    • 记录值:CNAME 指向的域名,即存储桶对应的域名,只可以填写域名。
    • MX 优先级:不需要填写。
    • TTL:为缓存时间,数值越小,修改记录各地生效时间越快,默认为 600 秒。
  4. 单击确认,完成添加。
  5. 验证 CNAME 配置是否生效。
    配置 CNAME 后,不同的 DNS 服务商 CNAME 配置生效的时间也不同。您可以通过输入 ping 或 dig 您所添加的加速域名来验证,如果被转向,即表示 CNAME 配置已经生效,CDN 功能也已生效。

# CDN

# 简介

为存储桶配置内容分发网络 (CDN),实行相应的安全策略,此处将二级域名的 CNAME 解析到 CDN,停用原有 CNAME 到存储桶的解析。

# 操作步骤

  1. 登录 内容分发网络控制台
  2. 在左侧导航栏中,单击服务概览,进入 CDN 概览页面。
  3. 单击添加域名,进入 CDN 配置页面。
  4. 在加速域名中填写二级域名,加速类型选择 CDN 网页小文件。
  5. 源站配置中选择 COS 源,回源协议选择协议跟随。
  6. 关闭私有存储桶访问权限。
  7. 配置 CNAME,在 云解析控制台 中,将二级域名的 CNAME 再次配置向 CDN。
  8. 访问控制,此处设置了 IP 访问限频,阈值 100 次 / 秒。
  9. 开启 HTTPS 服务,HTTPS 的免费额度为每月 300 万次。
  10. 用量封顶配置
    • 每 5 分钟流量大于 1G 将会封禁,大于阈值的 80%则告警
    • 每 5 分钟 HTTPS 请求数大于 1 百万次将会封禁,大于阈值的 80%则告警
  11. 保存并确认配置,在左侧导航栏 - 域名管理中可查看配置。
  12. 此时,COS 已可以使用加速域名访问,在 对象控制台 中找到存储桶的自定义源站域名一栏,将自定义的源站域名下线。以后访问 COS 文件可选择加速域名访问。

# 防盗链设置

# 原理

防盗链是通过请求 Header 里的 Referer 地址来进行判断:

  • Referer 是 Header 的一部分,当浏览器向 Web 服务器发送请求的时候,一般会带上 Referer,告诉服务器该请求是从哪个页面链接过来的,服务器就可以禁止或允许某些来源的网站访问资源。
  • 如果直接在浏览器直接打开文件链接 https://examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com/1.jpg,请求 Header 里不会带有 Referer。

假设,用户 A 在 COS 上传了图片资源 1.jpg,得到图片的可访问链接为 https://XXXX/1.jpg。

  • 用户 A 将该图片嵌入到自己的网页 https://example.com/index.html 上,图片能正常访问。
  • 用户 B 在用户 A 网页上看到了该图片,决定将该图片嵌入在他自己的网页 https://b.com/test/test.html 上,此时用户 B 的网页也能正常显示该图片。

以上案例中,用户 A 的图片资源 1.jpg 就被用户 B 盗链了。此时用户 A 在不知情的情况下,COS 上的资源持续被用户 B 网页正常使用,用户 A 负担了额外的流量费用,造成了费用损失。

根据以上案例分析 ,用户 A 可以通过给存储桶设置防盗链规则防止用户 B 盗链图片,有两种实现方式:

  • 方式一:配置黑名单模式,域名设置填入 *.b.com 并保存生效。
  • 方式二:配置白名单模式,域名设置填入 *.example.com 并保存生效。

# 操作步骤

  1. 登录 对象存储控制台,在左侧导航栏中单击存储桶列表,进入存储桶列表页。
  2. 选择需要设置防盗链的存储桶,进入存储桶。
  3. 在左侧菜单栏中单击安全管理 > 防盗链设置,进入存储桶防盗链设置的配置页。
  4. 在 “防盗链设置” 栏中,单击编辑,进入编辑状态。
  5. 开启防盗链,并配置名单类型和域名,此处选择开启方式二,详细说明如下:
    • 类型:有黑、白名单两种:
      • 黑名单:限制名单内的域名访问存储桶的默认访问地址,若名单内的域名访问存储桶的默认访问地址,则返回 403。
      • 白名单:限制名单外的域名访问存储桶的默认访问地址,若名单外的域名访问存储桶的默认访问地址,则返回 403。
    • Referer :设置域名支持最多十条域名且为前缀匹配,支持域名、IP 和通配符 * 等形式的地址。一个地址占一行,多个地址请换行。配置规则说明和示例如下:
      • 支持带端口的域名和 IP,如 example.com:8080、10.10.10.10:8080 等地址。
      • 配置 example.com,可命中如 example.com/123 等以 example.com 为前缀的地址。
      • 配置 example.com,可命中如 https://example.comhttp://example.com 为前缀的地址。
      • 配置 example.com,可命中它的带端口域名 example.com:8080
      • 配置 example.com:8080,不会命中域名 example.com
      • 配置 *.example.com,可限制它的二级、三级域名 example.comb.example.coma.b.example.com
  6. 配置完成之后,单击保存即可。

# 安全设置记录

对 COS 相关的安全配置进行记录以便后续查阅

# CDN

用量封顶配置

  • 每 5 分钟流量大于 1G 将会封禁,大于阈值的 80%则告警
  • 每 5 分钟 HTTPS 请求数大于 1 百万次将会封禁,大于阈值的 80%则告警

访问控制

  • IP 访问限频,阈值 100 次 / 秒。

# 告警管理配置

腾讯云可观测平台 侧边栏的告警管理 - 策略管理中,同样可以进行安全策略配置。

  1. 设置策略名称,在策略类型处选择对象存储并选择实例 ID。
  2. 选择手动配置,阈值类型静态,告警配置如下
    • 外网下行流量纯粒度 1 分钟内大于 100MB,持续 3 个数据点,每小时告警一次
    • 低频存储读请求纯粒度 1 分钟内大于 1000 次,持续 3 个数据点,每小时告警一次