一、背景

之前一直使用 gitee 仓库 + gitee Pages 服务来提供图床服务,最近图片访问不了了,发现是这个服务因维护而停止服务了,这就很烦,等了两周了,这个还是维护状态。

于是查看了 Aliyun OSS 的价格,发现对象存储还是蛮便宜的,而且可以选择“OSS 资源包”而不是“预留空间”的版本,这样就更加省钱了,才几块钱,而且 40GB 的空间只是用来存储图片的话完全是绰绰有余。

1、访问 OSS 资源方式

虽然 OSS 很便宜,但是公网访问很贵。OSS 下行流量 1TB 流量 1 年有效期要 4000 块钱。惊呆。

所以这个问题要怎么解决?还好我有 ECS,当时搞活动 99 买的 ECS,附带的是 3Mbps 的固定带宽,虽然有点慢,但是它便宜啊,而且我还有 CDN,应该可以加速一点点,但是为了省钱(CDN 的流量费用和 HTTPS 请求次数费用)CDN 也可以考虑不使用,但好像 CDN 的资源一年有效期用不完,所以后续还是配置上 CDN 吧。

2、最终确定的解决方案

所以最后确定的方案是:使用 ECS 对 OSS 中图片资源做代理,禁用 OSS 公网访问仅使用私网访问(这样就不会产生额外的公网流量),使用 CDN 对 OSS 中的资源做静态加速。

三、OSS 配置

OSS 创建 Bucket 的时候,需要阻止公网访问,并且读写权限配置为“私有”

创建 Bucket 成功之后,需要去设置授权策略,因为我们的需求是禁用公网访问对象资源,使用 ECS 访问对象资源。所以,需要将 Bucket 授权给 ECS 服务器,IP 填写 ECS 的内网 IP。

四、ECS Nginx 配置

打开 ECS 的/etc/nginx/conf.d/目录,在其中新增配置文件image.z2huo.cn.conf,编辑其中的内容为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
server {
listen 9999 default_server;
listen [::]:9999 default_server;
server_name _;

return 403;
}

server {
listen 9999;
listen [::]:9999;
server_name image.z2huo.cn;

location / {
proxy_pass https://z2huo-image-bed.oss-cn-aliyun-zyz-internal.aliyuncs.com;
}

}

其中的proxy_pass配置,指定要跳转的域名:

  • 当 ECS 实例与 Bucket 在同一地域时,填写目标 Bucket 的内网访问域名
  • 当 ECS 实例与 Bucket 不在同一地域时,填写目标 Bucket 的外网访问域名

之后重新加载 nginx 配置即可,当然还需要在阿里云 ECS 的安全组中加上刚才配置中监听的端口。

五、CDN 配置

1、添加域名

之前配置过博客的 CDN,现在需要增加另一个 CDN 专门用来加速 OSS 资源。

CDN 的源站类型选择 IP,值为 ECS 服务器的外网 IP,注意,这里不支持内网 IP。端口为上面 Nginx 配置的监听端口 9999。

2、回源配置

上面的 Nginx 配置中 server_name 配置的是image.z2huo.cn,且当请求不匹配 server_name 的时候,返回 403,这是为了禁止访问者通过 IP+9999 端口的形式直接获取资源,必须要通过域名的方式。因为配置的源站类型是 IP,所以在 CDN 回源请求 ECS 的 9999 端口时,需要在请求头中添加Host,值为image.z2huo.cn

所以需要在 CDN 的回源 HOST 中进行如下配置:

3、HTTPS 配置

之前配置博客 CDN 的时候,已经写过给 CDN 配置 SSL 证书开启 HTTPS 的过程。这里不再赘述,请参考:

博客网站图片获取速度过慢的解决方案#2.1 给CDN配置HTTPS证书

六、验证

可以在 Alibaba Cloud Client 中查看 OSS 对象存储的 Bucket,拷贝文件获取内网链接、外网链接进行访问以验证内网和外网访问是否生效。

上面的步骤都配置好之后,就可以通过 CDN 配置的加速域名来获取 OSS 中存储的对象资源了。

本文中所有的图片也都是存储在 OSS 中的。

下面这个儿儿的图片,也是来自对象存储,图片链接如下:https://image.z2huo.cn/avatar/erer_1.gif

相关链接

如何在基于Ubuntu的ECS实例上配置OSS的反向代理_对象存储(OSS)-阿里云帮助中心 (aliyun.com)

如何在CDN控制台加速OSS资源_CDN(CDN)-阿里云帮助中心 (aliyun.com)

CDN源站配置_CDN(CDN)-阿里云帮助中心 (aliyun.com)

博客网站图片获取速度过慢的解决方案#2.1 给CDN配置HTTPS证书

[[博客网站图片获取速度过慢的解决方案#2.1 给CDN配置HTTPS证书]]

OB tags

#OSS #阿里云 #CDN #Nginx #Hexo #建站