2.13. 静的 Web ホスト用ゲートウェイの設定

従来の Web ホストでは、各 Web サイトに Web サーバーを設定し、コンテンツが動的に変更されない場合にリソースを効率的に使用できます。Ceph Object Gateway は、S3 バケットの静的 Web サイトをホストすることができます。つまり、PHP、サーブレット、データベース、nodejs などのサーバー側のサービスを使用しないサイトです。このアプローチは、各サイトに Web サーバーを使用する仮想マシンを設定するよりも、大幅に困難です。

2.13.1. 静的 Web ホストアライディングの前提条件

静的な Web ホストには、Ceph Storage クラスターを 1 つ以上実行し、静的 Web サイト用に Ceph Object Gateway インスタンスが少なくとも 2 つ必要です。Red Hat は、各ゾーンに HAProxy/keepalived が複数のゲートウェイインスタンスの負荷を分散していることを前提としています。

HAProxy/keepalived の詳細は、「HAProxy/keepalived の設定」を参照してください。

注記

Red Hat は、Ceph Object Gateway インスタンスを使用した標準の S3/Swift API と静的 Web ホストの両方を同時にデプロイすることはサポート されません

2.13.2. 静的 Web ホストの要件

静的な Web ホスト機能は独自の API を使用するため、ゲートウェイが S3 バケットで静的 Web サイトを使用するように設定するには、以下が必要です。

  1. S3 の静的 Web ホストは、標準の S3/Swift API のユースケースで使用されるインスタンスとは別の Ceph Object Gateway インスタンスを使用します。
  2. S3 静的 Web サイトをホストするゲートウェイインスタンスには、標準の S3/Swift API ゲートウェイインスタンスから別の、オーバーランディングされていないドメイン名が必要です。
  3. S3 静的 Web サイトをホストするゲートウェイインスタンスは、標準の S3/Swift API ゲートウェイインスタンスとは別の公開用 IP アドレスを使用する必要があります。
  4. S3 静的 Web サイトの負荷分散、および必要な場合には HAProxy/keepalived を使用して SSL が終了しているゲートウェイインスタンス。

2.13.3. 静的 Web ホストゲートウェイの設定

静的 Web ホスト用のゲートウェイを有効にするには、Ceph 設定ファイルを編集して以下の設定を追加します。

[client.rgw.<STATIC-SITE-HOSTNAME>]
...
rgw_enable_static_website = true
rgw_enable_apis = s3, s3website
rgw_dns_name = objects-zonegroup.domain.com
rgw_dns_s3website_name = objects-website-zonegroup.domain.com
rgw_resolve_cname = true
...

rgw_enable_static_website 設定は true にする必要があります。rgw_enable_apis 設定 は s3website API を有効にする必要があります。rgw_dns_name 設定および rgw_dns_s3website_name 設定は、完全修飾ドメインを提供する必要があります。サイトが標準的な名前の拡張子を使用する場合は、rgw_resolve_cnametrue に設定します。

重要

rgw_dns_name および rgw_dns_s3website_name の完全修飾ドメイン名は重複 しないでください

2.13.4. 静的 Web ホスト DNS 設定

以下は、想定される DNS 設定の例です。1 行目は、標準の S3 インターフェースを使用してゲートウェイインスタンスのドメインを指定し、IPv4 アドレスと IPv6 アドレスをそれぞれ参照します。3 行目は、正規名拡張機能を使用して S3 バケットのワイルドカード CNAME 設定を提供します。4 行目と 5 行目は、S3 Web サイトインターフェースを使用するゲートウェイインスタンスのドメインを指定し、その 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
注記

最初の 2 行目の IP アドレスは、4 行目と 5 番目の行の IP アドレスとは異なります。

マルチサイト設定で Ceph Object Gateway を使用する場合には、ルーティングソリューションを使用して、クライアントに最も近いゲートウェイにトラフィックをルーティングすることを検討してください。

Amazon Web Service(AWS)では、静的な Web ホストバケットがホスト名と一致する必要があります。Ceph は DNS を設定するいくつかの方法を提供し、プロキシーに適合する証明書がある場合に HTTPS は機能します

サブドメインのバケットへのホスト名

AWS スタイルの S3 サブドメインを使用するには、DNS エントリーでワイルドカードを使用し、要求をバケットにリダイレクトできます。DNS エントリーは以下のようになります。

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

以下の方法でバケット名にアクセスします。

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

バケット名は bucket1 です。

hostname から一致しないバケット

Ceph は、リクエストにバケット名を含めずにドメイン名をバケットへのマッピングをサポートします。これは Ceph Object Gateway に固有のものです。ドメイン名を使用してバケットにアクセスするには、ドメイン名をバケット名にマップします。DNS エントリーは以下のようになります。

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

バケット名は bucket2 です。

以下の方法でバケットにアクセスします。

http://www.example.com

CNAME を使用した長いバケットへのホスト名

通常、AWS ではバケット名がドメイン名と一致する必要があります。CNAME を使用して静的 Web ホストに DNS を設定するには、DNS エントリーは以下のようになります。

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

以下の方法でバケットにアクセスします。

http://www.example.com

CNAME を使用しない長いバケットへのホスト名

DNS 名には、SOANSMXTXT などの他の非 CNAME レコードが含まれている場合、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

2.13.5. 静的 Web ホストサイトの作成

静的な Web サイトを作成するには、以下の手順を実行します。

  1. S3 バケットを作成します。バケット名 MAY は Web サイトドメイン名と同じです。たとえば、mysite.com のバケット名は mysite.com になります。これは AWS に必要ですが、Ceph には不要です。詳細は「DNS 設定」を参照してください。
  2. 静的 Web サイトコンテンツをバケットにアップロードします。コンテンツには、HTML、CSS、クライアント側 JavaScript、イメージ、音声/ビデオコンテンツ、およびその他のダウンロード可能なファイルが含まれる場合があります。Web サイトには index.html ファイルが必要で、error.html ファイルも利用できます。
  3. Web サイトの内容を確認します。この時点で、バケットの作成者はコンテンツにアクセスできます。
  4. 一般に読み取り可能になるように、ファイルにパーミッションを設定します。