3. OSS功能简介
3.1 OSS基本功能
OSS为用户提供数据存储服务,用户可以通过以下操作来处理OSS上的数据:
n 创建、查看、罗列、删除 Bucket
n 修改、获取Bucket的访问权限
n 上传、查看、罗列、删除、批量删除Object
n 对于大文件支持分片上传(Multi-Part Upload)
n 访问时支持If-Modified-Since和If-Match等HTTP参数
3.2 Object外链地址的构成规则
如果一个bucket设置成公开读权限(详见下一章:访问控制),意味着你允许其他用户来访问属于你的object。你的object的外链地址构成规则如下:
http:// <你的bucket名字>.oss.aliyuncs.com/<你的object名字>例如,在一个名为oss-example的bucket中,有一个名为"aliyun-log.png"的object(content-type为image/png)。那么这个object的外链URL为:
http://oss-example.oss.aliyuncs.com//image/aliyun-logo.png构成规则的示意图如下:
用户可以直接该URL链接放入HTML中使用:
<img src="http://oss-example.oss.aliyuncs.com/aliyun-logo.png"/>3.3 OSS防盗链
OSS是按使用收费的服务,为了防止用户在OSS上的数据被其他人盗链,OSS支持基于HTTP header中表头字段referer的防盗链方法。目前,只有通过OSS的控制台(http://oss.aliyun.com)可以对一个bucket设置referer字段的白名单和是否允许referer字段为空的请求访问。例如,对于一个名为oss-example的bucket,设置其referer白名单为http://www.aliyun.com。则所有referer为http://www.aliyun.com的请求才能访问oss-example这个bucket中的Object。
细节分析:
1) 用户只有通过URL签名或者匿名访问Object时,才会做防盗链验证。请求的Header中有“Authorization”字段的,不会做防盗链验证。
2) 一个bucket可以支持多个referer参数,这些参数之间由“,”号分隔。
3) Referer参数支持通配符“*”和“?”。
4) 用户可以设置是否允许referer字段为空的请求访问。
5) 白名单为空时,不会检查referer字段是否为空(不然所有的请求都会被拒绝)。
6) 白名单不为空,且设置了不允许referer字段为空的规则;则只有referer属于白名单的请求被允许,其他请求(包括referer为空的请求)会被拒绝。
7) 如果白名单不为空,但设置了允许referer字段为空的规则;则referer为空的请求和符合白名单的请求会被允许;其他请求都会被拒绝。
8) Bucket的三种权限(private,public-read,public-read-write)都会检查referer字段。
注意:OSS更多的防盗链的规则正在开发中。
3.4 自定义域名绑定(CNAME)
OSS支持用户将自定义的域名绑定在属于自己的bucket上面,这个操作必须通过OSS控制台(http://oss.aliyun.com)来实现。按照中国《互联网管理条例》的要求,所有需要开通这项功能的用户,必须提供阿里云备案号,域名持有者身份证等有效资料,经由阿里云审批通过后才可以使用。在开通CNAME功能后,OSS将自动处理对该域名的访问请求。
CNAME应用场景例子:
Ø 用户A拥有一个域名为abc.com的网站;这个网站的所有图片存储在img.abc.com这个子域名下;
Ø 为了应对日益增长的图片流量压力,用户A在OSS上创建了一个名为abc-img的bucket,并将所有图片存在OSS上;
Ø 通过OSS控制台,提交将img.abc.com CNAME成 abc-img.oss.aliyuncs.com的申请,并提供相应的材料
Ø 通过阿里云审核后,在自己的域名服务器上,添加一条CNAME规则,将img.abc.com映射成abc-img.oss.aliyuncs.com,这样所有对img.abc.com的访问都将变成访问abc-img这个bucket。例如:一个对http://img.abc.com/logo.png的访问,实际上访问的是http://abc-img.oss.aliyuncs.com/logo.png。
3.5 访问日志记录[2](Server Access Logging)
OSS为用户提供自动保存访问日志记录功能。Bucket的拥有者可以通过OSS控制台(http://oss.aliyun.com),为其所拥有的bucket开启访问日志记录功能。当一个bucket(源Bucket,Source Bucket)开启访问日志记录功能后,OSS自动将访问这个bucket的请求日志,以小时为单位,按照固定的命名规则,生成一个Object写入用户指定的bucket(目标Bucket,Target Bucket)。
存储访问日志记录的object命名规则:
<TargetPrefix><SourceBucket>-YYYY-mm-DD-HH-MM-SS-UniqueString
命名规则中,TargetPrefix由用户指定;YYYY, mm, DD, HH, MM和SS分别是该Object被创建时的阿拉伯数字的年,月,日,小时,分钟和秒(注意位数);UniqueString为OSS系统生成的字符串。一个实际的用于存储OSS访问日志的Object名称例子如下:
MyLog-oss-example-2012-09-10-04-00-00-0000
上例中,“MyLog-”是用户指定的Object前缀;“oss-example”是源bucket的名称;“2012-09-10-04-00-00”是该Object被创建时的北京时间;“0000” 是OSS系统生成的字符串。
LOG文件格式(从左至右,以空格分隔):
名 称 | 例 子 | 含 义 |
Remote IP | 119.140.142.11 | 请求发起的IP地址(Proxy代理或用户防火墙可能会屏蔽该字段) |
Reserved | - | 保留字段 |
Reserved | - | 保留字段 |
Time | [02/May/2012:00:00:04 +0800] | OSS收到请求的时间 |
Request-URI | “GET /aliyun-logo.png HTTP/1.1“ | 用户请求的URI(包括query-string) |
HTTP Status | 200 | OSS返回的HTTP状态码 |
SentBytes | 5576 | 用户从OSS下载的流量 |
RequestTime (ms) | 71 | 完成本次请求的时间(毫秒) |
Referrer | http://oss.aliyun.com | 请求的HTTP Referrer |
User-Agent | curl/7.15.5 | HTTP的User-Agent头 |
HostName | oss-example.oss.aliyuncs.com | 请求访问域名 |
Request ID | 505B01695037C2AF032593A4 | 用于唯一标示该请求的UUID |
LoggingFlag | true | 是否开启了访问日志功能 |
Reserved | - | 保留字段 |
Requester Aliyun ID | 1657136103983691 | 请求者的阿里云ID;匿名访问为“-” |
Operation | GetObject | 请求类型 |
Bucket | oss-example | 请求访问的Bucket名字 |
Key | /aliyun-logo.png | 用户请求的Key |
ObjectSize | 5576 | Object大小 |
Server Cost Time (ms) | 17 | OSS服务器处理本次请求所花的时间(毫秒) |
Error Code | NoSuchBucket | OSS返回的错误码 |
UserID | 1657136103983691 | Bucket拥有者ID |
Delta DataSize | 280 | Bucket大小的变化量;若没有变化为“-” |
细节分析:
1) 源Bucket和目标Bucket必须属于同一个用户。
2) “TargetPrefix”表示存储访问日志记录的object名字前缀,可以为空。
3) 源bucket和目标bucket可以是同一个Bucket,也可以是不同的Bucket;用户也可以将多个的源bucket的LOG都保存在同一个目标bucket内(建议指定不同的TargetPrefix)。
4) OSS以小时为单位生成bucket访问的Log文件,但并不表示这个小时的所有请求都记录在这个小时的LOG文件内,也有可能出现在上一个或者下一个LOG文件中。
5) OSS生成的Log文件命名规则中的“UniqueString”仅仅是OSS为其生成的UUID,用于唯一标识该文件。
6) OSS生成一个bucket访问的Log文件,算作一次PUT操作,并记录其占用的空间,但不会记录产生的流量。LOG生成后,用户可以按照普通的Object来操作这些LOG文件。
7) OSS会忽略掉所有以“x-”开头的query-string参数,但这个query-string会被记录在访问LOG中。如果你想从海量的访问日志中,标示一个特殊的请求,可以在URL中添加一个“x-”开头的query-string参数。如:
http://oss-example.oss.aliyuncs.com/aliyun-logo.png
http://oss-example.oss.aliyuncs.com/aliyun-logo.png?x-user=admin
OSS处理上面两个请求,结果是一样的。但是在访问LOG中,你可以通过搜索“x-user=admin”,很方便地定位出经过标记的这个请求。
8) OSS的LOG中的任何一个字段,都可能出现“-”,用于表示未知数据或对于当前请求该字段无效。
9) 根据需求,OSS的LOG格式将来会在尾部添加一些字段,请开发者开发Log处理工具时考虑兼容性的问题。