# oss 实现反向代理
# 背景
阿里云对象存储 OSS(Object Storage Service)
是一款海量、安全、低成本、高可靠的云存储服务,可提供 99.9999999999% 的数据持久性,99.995% 的数据可用性。多种存储类型供选择,全面优化存储成本。它可以用来存储各种静态资源。
OSS 支持以下计费方式。
- 按量付费:所有计费项默认采用按量付费。按照各计费项的实际用量结算费用,先使用,后付费,适用于业务用量经常有变化的场景。更多信息,请参见按量付费。
- 资源包:针对部分常用计费项支持专用的资源包。预先购买针对不同的计费项推出的优惠资源包,在费用结算时,优先从资源包抵扣用量,先购买,后抵扣,适用于业务用量相对稳定的场景。更多信息,请参见资源包概述。
- 存储容量单位包 SCU:针对存储费用支持 SCU。SCU 除了用于抵扣 OSS 的存储费用,还可用于抵扣多种云存储产品存储容量费用。更多信息,请参见存储容量单位包 SCU。
其计费项包括下面几类:
- 存储费用
- 流量费用
- 请求费用
- 数据处理费用
- 对象标签费用
- 传输加速费用
- 临时存储费用
- DDoS 防护费用
- 数据索引费用
- 敏感数据保护费用
- OSS 加速器费用
- OSS-HDFS 元数据管理费用
- 跨区域复制 RTC 费用
对于轻量应用来说,流量费用是最常见的花销,尤其是外网流出流量,目前官网费用为 0.5元/GB
, 虽然也有资源包,但对于轻量应用,也是不合适的。为了减少流量花销,最合适的方法就是从内网请求资源,走免费的内网流量,为此需要一台阿里云的服务器实现 OSS 反向代理。
计费项 | 计费规则 | 计费周期 | 付费方式 |
---|---|---|---|
外网流出流量(NetworkOut) | 数据通过互联网从OSS传输到客户端产生的流量。 | 按小时计费,实时扣费(账单出账时间通常在当前计费周期结束后,具体出账时间以系统为准)。 | 按量付费:外网流出流量费用(>5 GB)=(外网流出流量-5 GB)×每GB单价 资源包:按月计费 |
外网流入流量 | 数据通过互联网从客户端传输到OSS所产生的流量。 | 免费 | |
内网流出流量 | 数据通过内网从OSS传输到客户端所产生的流量。关于如何使用内网访问域名的更多信息,请参见通过内网访问OSS。 | 免费 | |
内网流入流量 | 数据通过内网从客户端传输到OSS所产生的流量。 | 免费 | |
CDN回源流出流量(CdnOut) | 数据从OSS传输到阿里云CDN边缘节点所产生的回源流量。 | 按量付费:CDN回源流出流量费用=CDN回源流出流量(GB)×每GB单价 资源包:打开对象存储OSS资源包购买页,选择资源包类型为回源流量包。 说明 如果同时使用OSS和CDN,将使用OSS的外网域名,默认走外网进行数据传输。 | |
跨区域复制流量(ReplicationDatasize) | 使用跨区域复制功能将源存储空间的数据同步复制到目标存储空间时所产生的流出流量。 | 按量付费:跨区域复制流量=跨区域复制流量(GB)×每GB单价 资源包:不支持 |
# 反向代理
反向代理服务器位于用户与目标服务器之间,起到一个中转的作用,用户无需了解目标服务器,直接向代理服务器请求资源就可以正常使用目标服务器提供的功能,对于 OSS 来说示意图如下:
因此我们可以在 nginx 配置文件中进行修改
server { | |
listen 80; | |
server_name www.static.jluyeyu.com static.jluyeyu.com; | |
location / { | |
proxy_pass http://bucketName.oss-cn-beijing-internal.aliyuncs.com/; | |
} | |
} |
其中 static.jluyeyu.com
是定义的二级域名,其域名解析的地址是阿里云服务器 ipv4 地址。
参数 | 说明 |
---|---|
server_name | 对外提供反向代理服务的IP,即ECS实例的外网地址,此处也可以写已解析的域名。个人采用的是二级域名 |
proxy_pass | 目标服务器地址。 当ECS实例与Bucket在同一地域时:填写目标Bucket的内网访问域名。关于内网访问域名的更多信息,请参见通过内网访问OSS。 当ECS实例与Bucket不在同一地域时:填写目标Bucket的外网访问域名。关于外网访问域名的更多信息,请参见通过外网访问OSS。 * 您的用户需通过浏览器预览Bucket中的图片或网页文件:因OSS的安全设置,当使用默认域名通过浏览器访问OSS中的图片或网页文件时,会直接下载。所以,如果您的用户需通过浏览器预览Bucket中的图片或网页文件,需为Bucket绑定自定义域名,并在此项中添加已绑定的域名。如何绑定自定义域名,请参见绑定自定义域名。 |
如果采用的是自定义域名的方式,需要首先在域名解析的时候,添加一条 A 记录的二级域名,
然后在 oss管理页面
/ Bucket 配置 / 域名管理中绑定自定义的二级域名。
然后重启 nginx
,只要域名解析正常,那么就可以通过 二级域名.jluyeyu.com/路径地址
的方式来访问 oss
中 public
权限的文件。