九游平台/ 对象存储服务 obs/ / / 静态网站托管
更新时间:2024-07-31 gmt 08:00

静态网站托管-九游平台

使用场景

obs服务允许在桶上托管静态网站,支持索引页、错误页展示和页面跳转。您可以将静态网站文件上传至obs的桶中,并对这些文件赋予匿名用户可读权限,然后将该桶配置成静态网站托管模式,就可以实现在obs上托管静态网站了。

静态网站通常仅包含静态网页,以及可能包含部分可在客户端运行的脚本,如javascript、flash等。相比之下,动态网站则依赖于服务器端处理脚本,包括php、jsp或asp.net等。obs当前尚不支持服务器端运行脚本。

图1 静态网站示意图

在设置了静态网站托管后,有以下两种方式访问obs。

  • 资源管理方式:资源管理方式通过普通的域名访问obs。您可以使用api及sdk方式,结合带有终端节点(endpoint)的obs默认域名,实现普通的上传、下载、删除、列举等桶和对象操作。
  • 静态网站方式:静态网站方式通过特定的域名访问obs。使用静态网站访问时,根据配置好的域名托管规则,实现访问目录的索引页、错误页展示和访问页面资源的跳转。

修改静态网站托管设置后会在两分钟内生效,静态网站托管设置生效后,用户可以通过如下形式的网址访问静态资源:

https://静态网站访问域名/对象名
http://静态网站访问域名/对象名

其中静态网站访问域名的结构为:bucketname.obs-website.endpoint,其中bucketname为桶名,endpoint为终端节点,各区域的终端节点详情请参见。例如您想使用静态访问域名访问位于华北-北京四的名为testbucket桶,华北-北京四的endpoint为cn-north-4.myhuaweicloud.com,则此时对应的静态网站访问域名应该为testbucket.obs-website.cn-north-4.myhuaweicloud.com。

  • 尽量避免目标桶名中带有“.”,否则通过https访问时可能出现客户端校验证书出错。
  • 静态网站托管场景需要设置匿名用户访问权限,当匿名用户访问静态网站文件时,会产生公网流出流量费用和请求费用。

为了使您的客户可以访问网站终端节点上的内容,您必须使您的所有内容公开可读。这样,您可以使用对象上的桶策略或acl来授予必要的权限。

资源管理方式和静态网站方式之间的主要差异如下:

主要差异

资源管理方式

静态网站方式

访问控制

同时支持公共内容和私有内容

仅支持公开可读的内容

错误消息处理

返回xml格式的错误响应

返回html文档

重定向支持

不适用

同时支持对象级和桶级重定向

支持的请求

支持所有桶和对象操作

仅支持对象上的get和head请求

对桶根级的get和head请求的响应

返回桶中对象key的列表

返回配置中指定的索引文档

注意事项

基于安全合规要求,华为云对象存储服务obs禁止通过obs的默认域名()使用静态网站托管功能,即使用上述域名从浏览器访问网页类型文件时,不会显示对象内容,而是以附件形式下载。

各区域将自以下两个时间点起生效:

自2022年1月1日起生效:华北-北京一、华北-北京四、华北-乌兰察布一、华东-上海一、华东-上海二、华南-广州、西南-贵阳一

自2022年3月25日起生效:中国-香港、亚太-曼谷、亚太-新加坡、非洲-约翰内斯堡、拉美-墨西哥城一、拉美-墨西哥城二、拉美-圣保罗一、拉美-圣地亚哥

通过自定义域名使用静态网站托管功能不受影响,仍然支持文件内容的直接预览,详情请参见如何在浏览器中在线预览obs中的对象?

如果您的obs桶开启了静态网站托管功能,请在配置cdn加速域名时勾选“静态网站托管”,这样用户访问时就不会显示桶中所有文件列表。

设置静态网站托管

概述

如果要为静态网站托管配置桶,则要将网站配置添加到桶。该配置包含以下信息:

索引文档

当您键入诸如http://example.com的url时,您不是在请求特定的页面。在这种情况下,web服务器将提供默认页面,该页面包含存储了请求的网站内容的目录。此默认页面称为索引文档,大多数情况下,它被命名为index.html。当您为网站托管配置桶时,您必须指定索引文档。当对根域或任何子文件夹发出请求时,obs将返回此索引文档。

错误文档

如果出现错误,则obs将返回html错误文档。对于4xx类错误,您可以选择性地提供您自己的自定义错误文档,您可以在该文档中向您的用户提供其他指南。

重定向所有请求

如果根域为example.com,且您需要响应对http://example.com和http://www.example.com的请求,则可以创建名为example.com和www.example.com的两个桶,仅在一个桶中保留网站内容(如example.com),将另一个桶配置为将所有请求重定向到example.com桶。

高级条件重定向

您可以根据请求中的特定对象名称或前缀,或者根据响应代码按条件对请求进行重定向。例如,假设您在桶中删除或重命名了某个对象。您可以添加一个将请求重定向到其他对象的路由规则。

通过设置重定向规则特定请求,设置语法格式如下:

 
     
        index.html 
     
        someerrordocument.html 
     
     
        ……routingrules……
     

routingrules语法格式如下,中括号[]中的内容为可选项:

 = 
     
        ... 
        [... ...] 
     
 = 
     
        [ ... ] 
        ... 
     
 = 
      
        [ ... ] 
        [ ... ] 
     
 = 
     
        [ ... ] 
        [ ... ] 
        [ ... ] 
        [ ... ][ 
        ... ] 
    

重定向所有请求website配置元素和设定重定向规则website配置元素,详情请参见。

以下是一些示例:

例1修改对象名前缀进行重定向

假设您的桶包含了以下对象:

index.html

docs/article1.html

docs/article2.html

现在,您决定将该文件夹从docs/重命名为documents/。修改后,将需要对前缀/docs的请求重定向到documents/。例如,对docs/article1.html的请求需要重定向到documents/article1.html。

在这种情况下,您可以将以下路由规则添加到网站配置中:

  
     
     
      docs/ 
     
     
      documents/ 
     
     
  

例2:把发往已删除的文件夹的请求重定向到指定页面

假设您删除了images/文件夹(即,您删除了对象名前缀为images/的所有对象)。您可以添加路由规则,该规则将把对象名前缀为images/的所有对象的请求重定向到名为folderdeleted.html的页面。

 
     
     
       images/ 
     
     
      folderdeleted.html 
     
     
  

例3:为http错误进行重定向

假设在未找到请求的对象时,需要将请求重定向到www.example.com。您可以添加重定向规则,以便当返回http状态代码404(未找到)时,站点访问者可重定向到www.example.com。以下示例也将在重定向中插入对象名前缀report-404/。例如,如果您请求页面examplepage.html,且它导致了http 404错误,该请求将重定向到www.example.com上的页面report-404/examplepage.html。如果没有路由规则,且发生了http错误404,将返回在配置中指定的错误文档。

 
     
     
      404 
     
     
      www.example.com 
      report-404/ 
     
     
  

索引文档支持

索引文档是当对网站的根或任何子文件夹发出请求时返回的网页。例如,如果用户在浏览器中输入http://www.example.com,则该用户没有请求任何特定页面。在这种情况下,obs将提供索引文档,该文档有时也称为默认页面。

当您将您的桶配置为网站时,您应该提供索引文档的名称。您必须上传具有此名称的对象并将其配置为公开可读。

根级url的尾部斜杠是可选的。例如,如果您将具有index.html的网站配置为索引文档,以下任意一个url将返回index.html。

http://bucketname.obs-website.example.com/
http://bucketname.obs-website.example.com

在obs中,对象在桶中是水平存储的;它不会像计算机上的文件系统那样提供任何分层组织。您可以通过使用表示文件夹结构的对象名称创建逻辑层级结构。例如,考虑具有三个对象的桶和以下对象名。

  • sample1.jpg
  • photos/2006/jan/sample2.jpg
  • photos/2006/feb/sample3.jpg

虽然它们没有按任何物理分层组织进行存储,但您可以从对象名推断以下逻辑文件夹结构。

  • sample1.jpg对象位于桶的根级
  • sample2.jpg对象位于photos/2006/jan子文件夹中。
  • sample3.jpg对象位于photos/2006/feb子文件夹中。

自定义错误文档支持

表1列出了发生错误时obs返回的http响应代码的子集。

表1 错误码列表

http错误代码

说明

301 永久移动

当用户将请求直接发送到obs网站终端节点时,obs返回301 moved permanently (301 永久移动)响应。

302 found (302 已找到)

当obs收到对不包含尾部斜杠的键x的请求时,它首先查找键名称为x的对象。如果未找到对象,则obs确定该请求是针对子文件夹x发出的,并通过在末尾添加斜杠重定向请求并返回302 found (302 已找到)

304 not modified (304 未修改)

obs用户请求标头if-modified-since、if-unmodified-since以确定所请求的对象是否与客户端保存的缓存副本相同。如果对象相同,网站终端节点将返回304 not modified响应。

403 禁止访问

当用户请求转换为不可公开读取的对象时,网站终端节点的响应包含403 forbidden。对象所有者必须使用桶策略或acl使该对象公开可读。

404 未找到

由于以下原因,网站终端节点的响应包含404 not found

  • obs确定网站url引用了不存在的对象键
  • obs推断该请求针对不存在的索引文档
  • 在url中指定的桶不存在
  • 在url中指定的桶存在,但它未配置为网站

您可以创建为404 not found返回的自定义文档。确保该文档已上传到配置为网站的桶,且网站托管配置已设置为使用该文档。

500 service error

当出现内部服务器错误时,网站终端节点的响应包含500 service error

503 服务不可用

当obs确定您需要降低请求频率时,网站终端节点的响应包含503 service unavailable (503 服务不可用)

网站访问所需的权限

当您将桶配置为网站时,您必须使要提供的对象公开可读。要执行此操作,您需要编写向每个人授予getobject权限的桶策略。在网站终端节点上,如果用户请求的对象不存在,则obs返回http响应代码404 (not found)。如果该对象存在,但您未授予对对象的读取权限,则网站终端节点将返回http响应代码403 (access denied)。用户可以使用该响应代码推断特定对象是否存在。如果您不需要此行为,则不要启用对桶的网站支持。

静态网站托管场景需要设置匿名用户访问权限,当匿名用户访问静态网站文件时,会产生公网流出流量费用和请求费用。

以下示例桶策略向每个人授予了访问指定文件夹中的对象的权限。有关桶策略的更多信息,请参见。

{ 
   "statement":[{ 
    "sid":"publicreadgetobject", 
      "effect":"allow", 
      "principal": {"id":"*"}, 
      "action":["getobject"], 
      "resource":["example-bucket/*"  ] 
    } 
  ] 
}

桶策略仅适用于桶拥有者拥有的对象。如果桶包含非桶拥有者拥有的对象,则应使用对象acl对这些对象授予公有read权限。

您可以通过桶策略或对象acl授予对您的对象的公开读取权限。如果要使用acl使对象公开可读,您可以向everyone授予read权限,如以下授权元素所示。您可以将此授权元素添加到对象acl。有关管理acl的信息,请参见。

 
   
    everyone 
   
  read 

与其他功能的关系

功能

静态网站托管与该功能的关系

参考文档

跨域资源共享

默认情况下,托管在obs的静态网站仅允许响应同域网站的访问请求。通过对保存静态网站资源的obs桶进行跨域资源共享配置,可以实现跨域访问功能。

自定义域名配置

obs支持通过自定义域名访问托管在obs上的静态网站,用户无需修改网站代码,即可使用原域名访问网站。

cdn加速

默认情况下,用户访问托管在obs的静态网站是通过url直接从obs请求数据。一般情况下文件只存储在一个区域,不同区域的用户访问obs的响应速度存在差异。在需要频繁访问的场景下,直接访问obs来获取相应文件,还会消耗大量的流量费用。为提升用户访问体验,且降低存储成本,可以选择通过cdn加速访问静态网站。

防盗链

用户将网站托管在obs后,为了防止网站数据被其他人盗链,obs支持基于http header中表头字段referer的防盗链方法。

配置防盗链防止非法流量盗用

前提条件

静态网站所需的网页文件已上传到指定桶中。

桶内的静态网站文件必须配置为所有用户可访问。

如果静态网站文件为“归档存储”或“深度归档存储”类别,则需要先恢复,具体操作步骤请参见。

使用方式

obs支持通过控制台、api、sdk方式配置静态网站托管,不支持通过obs browser 、obsutil方式配置静态网站托管。

相关文档

网站地图