4.6. 静态 Web 托管

作为存储管理员,您可以将 Ceph 对象网关配置为托管 S3 存储桶中的静态网站。传统网站托管涉及为各个网站配置 Web 服务器,当内容未动态更改时,此服务器会以低效的方式使用资源。例如,站点不使用 PHP、servlets、database、nodejs 等服务器端服务。这种方法比设置具有每个站点 Web 服务器的虚拟机更经济。

4.6.1. 先决条件

  • 一个正常运行的 Red Hat Ceph Storage 集群。

4.6.2. 静态 Web 托管假设

静态 Web 托管至少需要一个运行 Red Hat Ceph Storage 集群,以及至少两个用于静态网站的 Ceph 对象网关实例。红帽假定每个区域都将具有多个使用负载平衡器的网关实例,如高可用性(HA)代理和 keepalived

重要

红帽 不支持 使用 Ceph 对象网关实例来同时部署标准 S3/Swift API 和静态 Web 主机。

其它资源

  • 有关使用 高可用性 的更多详情,请参阅 Red Hat Ceph Storage Object Gateway Guide 中的高可用性服务部分。

4.6.3. 静态 Web 托管要求

静态 Web 托管功能使用自己的 API,因此将网关配置为在 S3 存储桶中使用静态网站需要以下内容:

  1. S3 静态 Web 托管使用 Ceph 对象网关实例,这些实例与用于标准 S3/Swift API 用例的实例不同。
  2. 托管 S3 静态网站的网关实例应具有独立于标准 S3/Swift API 网关实例的单独、非覆盖域名。
  3. 托管 S3 静态网站的网关实例应使用与标准 S3/Swift API 网关实例独立的面向公共的 IP 地址。
  4. 托管 S3 静态 web 站点负载均衡的网关实例,如有必要,使用 HAProxy/keepalived 终止 SSL。

4.6.4. 静态 Web 托管网关设置

要为静态 Web 托管启用 Ceph 对象网关,请设置以下选项:

语法

ceph config set client.rgw OPTION VALUE

示例

[ceph: root@host01 /]# ceph config set client.rgw rgw_enable_static_website true
[ceph: root@host01 /]# ceph config set client.rgw rgw_enable_apis s3,s3website
[ceph: root@host01 /]# ceph config set client.rgw rgw_dns_name objects-zonegroup.example.com
[ceph: root@host01 /]# ceph config set client.rgw rgw_dns_s3website_name objects-website-zonegroup.example.com
[ceph: root@host01 /]# ceph config set client.rgw rgw_resolve_cname true

rgw_enable_static_website 设置需要为 truergw_enable_apis 设置需要启用 s3website API。rgw_dns_namergw_dns_s3website_name 设置必须提供其完全限定的域。如果站点使用规范名称扩展,则将 rgw_resolve_cname 选项设置为 true

重要

rgw_dns_namergw_dns_s3website_name 的 FQDN 不能 重叠。

4.6.5. 静态 Web 托管 DNS 配置

以下是假定的 DNS 设置示例,其中前两行使用标准 S3 接口指定网关实例的域,并指向 IPv4 和 IPv6 地址。第三行使用规范名称扩展为 S3 存储桶提供通配符 CNAME 设置。第四和第五行使用 S3 网站接口为网关实例指定域,并指向其 IPv4 和 IPv6 地址。

objects-zonegroup.domain.com. IN    A 192.0.2.10
objects-zonegroup.domain.com. IN AAAA 2001:DB8::192:0:2:10
*.objects-zonegroup.domain.com. IN CNAME objects-zonegroup.domain.com.
objects-website-zonegroup.domain.com. IN    A 192.0.2.20
objects-website-zonegroup.domain.com. IN AAAA 2001:DB8::192:0:2:20
注意

前两行中的 IP 地址与第四和第五个行中的 IP 地址有所不同。

如果在多站点配置中使用 Ceph 对象网关,请考虑使用路由解决方案将流量路由到最接近客户端的网关。

Amazon Web Service(AWS)需要静态 Web 主机存储桶才能与主机名匹配。Ceph 提供了几种不同的配置 DNS 的方式,如果代理具有匹配的证书,HTTPS 将正常工作

Subdomain 中 Bucket 的主机名

要使用 AWS 风格的 S3 子域,在 DNS 条目中使用通配符,可以将请求重定向到任何存储桶。DNS 条目可能类似如下:

*.objects-website-zonegroup.domain.com. IN CNAME objects-website-zonegroup.domain.com.

访问存储桶名为 bucket1 的存储桶名称,其方式如下:

http://bucket1.objects-website-zonegroup.domain.com

主机名到非匹配问题

Ceph 支持将域名映射到 bucket,而不在请求中包含 bucket 名称,这对 Ceph 对象网关而言是唯一的。要使用域名访问 bucket,请将域名映射到 bucket 名称。DNS 条目可能类似如下:

www.example.com. IN CNAME bucket2.objects-website-zonegroup.domain.com.

存储桶名称为 bucket2

使用以下方法访问存储桶:

http://www.example.com

使用 CNAME 到 Long Bucket 的主机名

AWS 通常需要存储桶名称来匹配域名。要使用 CNAME 为静态 Web 托管配置 DNS,DNS 条目可能类似如下:

www.example.com. IN CNAME www.example.com.objects-website-zonegroup.domain.com.

使用以下方法访问存储桶:

http://www.example.com

没有 CNAME 的 Long Bucket 的主机名

如果 DNS 名称包含其他非CNAME 记录,如 SOANS NS、MXTXT,DNS 记录必须直接将域名映射到 IP 地址。例如:

www.example.com. IN A 192.0.2.20
www.example.com. IN AAAA 2001:DB8::192:0:2:20

使用以下方法访问存储桶:

http://www.example.com

4.6.6. 创建静态网站

要创建静态网站,请执行以下步骤:

  1. 创建 S3 存储桶。bucket 名称 MIGHT 与网站的域名相同。例如,mysite.com 可能具有 bucket 名称 mysite.com。AWS 需要此功能,但 Ceph 不需要它。

  2. 将静态网站内容上传到 bucket。内容可能包括 HTML、CSS、客户端 JavaScript、镜像、音频/视频内容和其他可下载的文件。网站 MUST 有 index.html 文件,可能有一个 error.html 文件。
  3. 验证网站内容。此时,只有存储桶的创建者才能访问其内容。
  4. 设置文件的权限,以便可以公开读取。