自从利用阿里云OSS存储对象搭建了个人云盘后,自己的很多资料都传到了网盘中,更重要的是这些资料大多都会分享出来。原本以为只需要购买储存空间40GB 每年9元,结果还需要掏外网流量费,并且还不便宜,每GB需要0.5元。详情见《慎入!阿里云OSS对象储存 外网流出流量收费》。就这些东西已经用掉我十几块钱了。但是我一直不死心,就想找出一种能够免费使用的方式。终于被我给找到了,其实很简单。
首先我们要明白一点,就是内网访问是免流量费用的,那我们要实现免费就只能在这上面入手。参考官方资料《ECS实例通过OSS内网地址访问OSS资源》
通过OSS内网地址访问OSS资源有以下两种方式:
与OSS同地域ECS实例可以直接通过内网访问有权限的OSS资源。
与OSS不同地域的ECS实例或公网用户可通过配置ECS反向代理,间接实现通过OSS内网地址访问OSS资源。
获取OSS内网地址
通过OSS控制台获取
登录OSS管理控制台,打开指定Bucket的概览页面,在访问域名区域查看Bucket的Endpoint和Bucket域名,如下图所示。
通过固定格式获取
OSS的访问地址为固定格式:
BucketName.Endpoint
。其中,BucketName
为您的存储空间名称,Endpoint
为存储空间所在的地域对应的访问域名。详情请参见OSS访问域名使用规则。
与OSS同地域的ECS实例可以通过以下方式使用内网访问OSS资源:
通过URL直接访问OSS资源
您可以直接使用OSS资源的内网地址访问有权限的OSS资源。例如,杭州地域某Bucket名为test,根目录下有个Object名为1.jpg,处于公共读状态。此时,杭州地域的ECS实例均可以使用http://test.oss-cn-hangzhou-internal.aliyuncs.com/1.jpg
访问此Object。因此,您可以将OSS资源的访问URL嵌入到您的网站中,提供给同地域的ECS用户或已通过专线接入到与OSS同地域内网的用户访问。通过ECS反向代理访问OSS资源
不同地域的ECS实例或外网用户是无法直接通过OSS内网地址访问OSS资源的,但是您可以通过配置ECS反向代理来间接实现:
在OSS同地域创建一个有公网地址的ECS实例。详情请参见创建ECS实例。
在ECS实例上配置反向代理。详情请参见基于CentOS的ECS实例实现OSS反向代理和基于Ubuntu的ECS实例实现OSS反向代理。
OSS配置Bucket Policy,允许该ECS实例的内网地址访问OSS资源。详情请参见使用Bucket Policy授权其他用户访问OSS资源。
以上步骤配置完成后,您的用户将通过您的ECS公网地址访问您的OSS资源。当用户访问时,ECS实例通过内网向OSS请求资源,之后再返回给用户。
了解了这些后,我们就可以操作了
一、首先我们要有一个与对象储存OSS同区域的ECS服务器。
二、获取储存对象Bucket的内网访问地址
三、打开ECS远程服务器,测试地址访问是否成功
本地访问:
ECS服务器访问:
出现这些信息说明能够访问成功
四、ECS服务器apache(nginx)设置反向代理
由于我使用的宝塔面板集成的环境,所以在宝塔面板中配置,也可以选择直接在apache中配置
五、使用代理地址在本地访问
六、修改原域名为设置的代理链接
七、测试应用是否正常
文件下载正常,如果不放心可以特意将地址设置成错误的,再尝试下载,会发现报404错误
大功告成!可以放肆下载,再也不用担心流量费啦!!!
发表评论