4.7. 静态 Web 托管
作为存储管理员,您可以将 Ceph 对象网关配置为托管 S3 存储桶中的静态网站。传统网站托管涉及为各个网站配置 Web 服务器,当内容未动态更改时,此服务器会以低效的方式使用资源。例如,站点不使用 PHP、servlets、database、nodejs 等服务器端服务。这种方法比设置具有每个站点 Web 服务器的虚拟机更经济。
先决条件
- 一个正常运行的 Red Hat Ceph Storage 集群。
4.7.1. 静态 Web 托管假设
静态 Web 托管至少需要一个运行 Red Hat Ceph Storage 集群,以及至少两个用于静态网站的 Ceph 对象网关实例。红帽假定每个区域都将具有多个使用负载平衡器的网关实例,如高可用性(HA)代理和 keepalived
。
红帽 不支持 使用 Ceph 对象网关实例来同时部署标准 S3/Swift API 和静态 Web 主机。
其它资源
- 有关使用高可用性的更多详细信息,请参阅 Red Hat Ceph Storage 对象网关指南中的 高可用性服务部分。 https://access.redhat.com/documentation/zh-cn/red_hat_ceph_storage/7/html-single/object_gateway_guide/#high-availability-service_rgw
4.7.2. 静态 Web 托管要求
静态 Web 托管功能使用自己的 API,因此将网关配置为在 S3 存储桶中使用静态网站需要以下内容:
- S3 静态 Web 托管使用 Ceph 对象网关实例,这些实例与用于标准 S3/Swift API 用例的实例不同。
- 托管 S3 静态网站的网关实例应具有独立于标准 S3/Swift API 网关实例的单独、非覆盖域名。
- 托管 S3 静态网站的网关实例应使用与标准 S3/Swift API 网关实例独立的面向公共的 IP 地址。
- 托管 S3 静态 web 站点负载均衡的网关实例,如有必要,使用 HAProxy/keepalived 终止 SSL。
4.7.3. 静态 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
设置需要为 true
。rgw_enable_apis
设置需要启用 s3website
API。rgw_dns_name
和 rgw_dns_s3website_name
设置必须提供其完全限定的域。如果站点使用规范名称扩展,则将 rgw_resolve_cname
选项设置为 true
。
rgw_dns_name
和 rgw_dns_s3website_name
的 FQDN 不能 重叠。
4.7.4. 静态 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 记录,如 SOA
、NSX
或 TXT
,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.7.5. 创建静态 Web 托管站点
要创建静态网站,请执行以下步骤:
创建 S3 存储桶。bucket 名称 MIGHT 与网站的域名相同。例如,
mysite.com
可能具有 bucket 名称mysite.com
。AWS 需要此功能,但 Ceph 不需要它。- 详情请参阅 Red Hat Ceph Storage 对象网关指南中的 静态 Web 托管 DNS 配置部分。
-
将静态网站内容上传到 bucket。内容可能包括 HTML、CSS、客户端 JavaScript、图像、音频/视频内容和其他可下载的文件。网站 MUST 有一个
index.html
文件,可能有一个error.html
文件。 - 验证网站内容。此时,只有存储桶的创建者有权访问其内容。
- 设置文件的权限,以便可以公开读取。