静态站点上云指南

前言

  众所周知,云计算除了在VDI等直接使用虚拟机资源的应用领域外,对Web业务的适应场承担了重要的基础服务。s3使用静态站点的好处不言而喻,前后分离的设计、节省虚机资源、结合CDN可以实现网站加速、基于s3服务的天然优势、以及图片、视频、计量、数据等等一系列的好处。
  rgw作为s3网关可以托管html、css、js、mp4、pdf等静态文件。本文重点介绍ceph rgw在静态站点托管业务上的应用场景及趟坑注意事项。

方案介绍

  部署静态站点服务需要做如下准备:

用途 IP
域名解析服务 10.116.0.8
rgw服务ip地址 10.116.0.7
一套demo静态站点网页源码,作为功能验证 N/A

域名解析服务(10.116.0.8)

  根据解析范围,分为公网和内网。公有云通常有自己的智能路由,比如AWS的Route 53,以及阿里云收购万网做的都是这些事情。我们以内网IPV4为例,部署一个自己的linux域名解析服务器。
  首先在linux上安装dnsmasq

1
  apt-get install dnsmasq

  配置/etc/dnsmasq.conf,增加A记录。格式为objects-website-zonegroup.domain.com。

1
2
  address=/oss-default.mycloud.com/10.116.0.6
  address=/oss-website-default.mycloud.com/10.116.0.6

  配置/etc/dnsmasq.conf,增加CNAME别名。

1
2
  cname=*.oss-default.mycloud.com,oss-default.mycloud.com
cname=*.oss-website-default.mycloud.com,oss-website-default.mycloud.com

  配置/etc/hosts,增加解析记录,否则dnsmasq的CNAME功能无效

1
2
  10.116.0.6 oss-website-default.mycloud.com
  10.116.0.6 oss-default.mycloud.com

ceph rgw配置(10.116.0.7)

1
2
3
4
5
  rgw_enable_apis = s3website,s3,swift,swift_auth,admin
  rgw_enable_static_website = true
  rgw_dns_name = oss-default.mycloud.com
  rgw_dns_s3website_name = oss-website-default.mycloud.com
  rgw_resolve_cname = true

  此处注意,虽然ceph默认是开启所有api服务的,但是需要显式设置一下rgw_enable_apis,因为此选项是有优先级次序的,如果不将s3website放在选项最前面,会导致某些情况下本该通过静态站点解析的请求变成被s3服务解析,从而返回浏览器xml,而不是走website逻辑并返回网页。关键判断的代码如下:

1
2
3
  if (s3website_enabled && api_priority_s3website > api_priority_s3) {
    in_hosted_domain_s3website = 1;
  }

结果验证

  首先创建一个bucket,bucket名字为域名,比如www.test.com,并将权限设置为All Users Read
  然后将静态站点的所有文件上传到bucket中,比如通过linux的工具s3cmd:

1
  s3cmd put * s3://www.test.com --recursive --acl-public

  这里有个坑需要注意一下,上传到s3的文件的content-type需要设置正确,否则rgw无法解析,s3cmd只会自动设置html的格式。各文件Content-Type格式如下:

文件后缀 Content-Type格式
html text/html
css text/css
js application/x-javascript

  经过上述设置后,配置测试机器的dns为0.116.0.8,并在浏览器中输入网址,即可访问:

1
  http://www.test.com.oss-website-default.mycloud.com

  如果想以s3的方式访问,URL如下:

1
  http://www.test.com.oss-default.mycloud.com

  如果想以www.test.com的方式访问,需要配置cname如下:

1
  www.neunntest.com,www.neunntest.com.oss-website-default.neunncloud.com

  看完此文,读者已经了解了静态站点的基本原理。更多内容可以参考红帽的文档。