阿里云ECS实现反向代理内网访问OSS资源
1. 本机环境
- Ubuntu 16.04 (64位)
- Apache2 2.4.18
2. 什么是对象存储 OSS
阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。
你可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。
其优点在于可靠性高,相对于 ECS 服务器的数据盘来说,费用较低,适合存储图片、视频等文件。
费用对比:
在 ECS 实例中额外挂载一块 500GB 数据盘需要花费 1785 元人民币。
购买一年 OSS 对象存储,500GB 空间仅需要 486 元人民币。
3. OSS 地理区域限制
说明:
- 同地域的 ECS 可以通过内网访问 OSS。
- 跨账户的 ECS 和 OSS 可以内网互连。
- 不同地域的 ECS 与 OSS 无法通过内网访问。
例如:
位于深圳的 ECS 与同处于深圳的 OSS,可以通过内网直接访问,不收取流量费。
但深圳的 ECS 与北京的 OSS,只能通过外网访问,需要按量付费。
我们在购买 OSS 资源包时需要注意机房的地理位置。
4. 购买 OSS 资源包
红框: 资源包类型选择 标准型存储包
。
绿框: 地域选择你 ECS 所在地,我的是华南1区(深圳)
。
选择你需要的容量,支付费用即可。
5. 获取 Bucket 内网地址 & 绑定自定义域名
5.1 获取 Bucket 内网地址
在 OSS 控制台中创建一个 Bucket
。
红框: 新建一个 Bucket
。
绿框: 你的 Bucket
列表。
在 Bucket
列表中找到刚刚创建的,你会看到下图所示的几个域名。ECS 的经典网络访问(内网)
最后面对应的便是我们的 Bucket 域名
。
5.2 Bucket 绑定自定义域名
因 OSS 的安全设置,当使用默认域名通过浏览器访问 OSS 中的图片或网页文件时,会直接下载。如果需要通过浏览器预览 Bucket 中的图片或网页文件,需为 Bucket 绑定自定义域名,方法如下:
6. 上传测试文件
可以上传一张图片,作为我们的测试文件。
7. ECS 内网访问 OSS 原理
8. 配置步骤
8.1 启用 Apache2 模块
需要启用以下模块:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
启用方法:
sudo a2enmod <model> // 启用模块
sudo a2dismod <model> // 禁用模块
示例:
sudo a2enmod proxy
sudo a2enmod proxy_ajp
sudo a2enmod proxy_balancer
···
8.2 Apache2 虚拟主机配置
我要将 oss.wujiayi.vip
反向代理到 Bucket 域名
。
Apache2 虚拟主机的搭建请参照我的另一篇教程:Linux环境下Apache2配置多个虚拟主机
8.3 配置反向代理
打开虚拟主机配置文件:
vim /etc/apache2/sites-enabled/000-default.conf
在oss.wujiayi.vip
配置中新增以下代码:
ProxyRequests Off
ProxyPass / http://xxxxx-xxxxx-cn-shenzhen-internal.aliyuncs.com/
ProxyPassReverse / http://xxxxx-xxxxx-cn-shenzhen-internal.aliyuncs.com/
SetEnv force-proxy-request-1.0 1
SetEnv proxy-nokeepalive 1
如下图:
注意: Bucket 域名后面一定一定一定要加上 /
,否则无法访问 OSS 资源。
8.4 重启服务器
/etc/init.d/apache2 restart
9. 验证
输入域名:xxx.xxxx.xxx/1.jpg
10. 图片链接直接下载的问题
Bucket 权限设置为公共读
11. 使用 HTTPS 访问
在域名管理上传 HTTPS 证书。