写在前面
这篇内容实质上只是阐述了一个使用nginx实现内网穿透的方法,允许OSS拥有者通过公网ip免流量费获取OSS资源,也相当于给云服务器扩充了一片对象存储的空间,对于其他关于OSS的骚操作,博主还在发掘中。
- ps:
获取OSS资源的速度仍受服务器带宽限制。例如,博主服务器的带宽是1M,那么通过内网穿透下载资源的速度最高为128kb/s,而不是OSS本身能支持的更高带宽。
前提
当购买的云服务器(Elastic Compute Service, ECS) 与对象存储服务(Object Storage Service,OSS)的设备部署在同一地区时,用户可以在云服务器上直接访问OSS内网IP来获取OSS资源,来避免额外流量费用产生。
起因
OSS是阿里云上类似于网盘的一个服务,用户可以在存储库中存放资源或者访问特定的域名直接下载已有资源,甚至可以存放搭建网站所需的静态页面和静态资源,而上下行速度几乎仅取决于用户自身带宽。美中不足的是,OSS虽然推出了包年服务,但这个服务只是针对存储空间有定量的免费,而对于下载资源产生的流量以及访问次数,有另外的一套计费方式(是的,博主被坑了),流量价格是0.12元/GB,虽然看起来不多,但资源访问量上去之后这个数字可能是以几何倍数增。由于已知前提中提到的机制,博主滋生了撸阿里羊毛的想法:公网ip不直接访问资源,而是访问ECS服务器,通过服务器内配置nginx反向代理OSS内网ip获取资源,这么做虽然下载带宽受到服务器带宽限制,但确实免了流量费,在仅调取小体积文件的场景下如网页调取静态组件,很爽。
实操
在服务器下找到nginx配置文件,博主的存放路径为/etc/nginx/conf.d/halo.conf,配置内容可见Nginx https反向代理http无法加载静态文件的问题
在监听自己网站端口的server块中添加以下location规则
#“zeki.oss-cn-hangzhou.aliyuncs.com”为自己的OSS Bucket域名,前后加“/”。
location /zeki.oss-cn-hangzhou.aliyuncs.com/
{
proxy_pass https://zeki.oss-cn-hangzhou-internal.aliyuncs.com/;
}
#“https://zeki.oss-cn-hangzhou-internal.aliyuncs.com/”为要跳转访问的OSS内网域名
假设自己的域名为 zeki.com,
server配置的端口为默认80,
OSS公网域名为zeki.oss-cn-hangzhou.aliyuncs.com,
OSS内网域名为zeki.oss-cn-hangzhou-internal.aliyuncs.com。
那么,当访问http://zeki.com/zeki.oss-cn-hangzhou.aliyuncs.com/menu/image/233.jpg时,
上面的location规则会使服务器去访问https://zeki.oss-cn-hangzhou-internal.aliyuncs.com/menu/image/233.jpg,
服务器通过内网获取到OSS资源后,再将此资源传输到你的本地,由此,就实现了内网穿透访问OSS。
- ps
1.没有域名也可以使用IP,或者非80端口也可以,只需将访问地址改为
https://IP地址:端口号/zeki.oss-cn-hangzhou.aliyuncs.com/menu/image/233.jpg
2.nginx location匹配规则:https://www.jianshu.com/p/c751250a5112