メニュー
Amazon Simple Storage Service
開発者ガイド (API Version 2006-03-01)

バケットの仮想ホスティング

一般的に仮想ホスティングとは、単一のウェブサーバーから複数のウェブサイトにサービスを提供することです。サイトを区別する方法の 1 つとして、単なる URI のパス名部分ではなく、リクエストの明確なホスト名を使用します。通常の Amazon S3 REST リクエストは、リクエスト URI パスのスラッシュで区切られた先頭コンポーネントを使用してバケットを指定します。これに対し Amazon S3 仮想ホスティングでは、HTTP Host ヘッダーを使用することで、REST API 呼び出しでバケットを指定することができます。実際には、Amazon S3 は Host を、http://bucketname.s3.amazonaws.com の CNAME として設定したとします。さらに、登録されたドメイン名を使用してバケットの名前を指定し、その名前を Amazon S3 の DNS エイリアスにすることによって、Amazon S3 リソースの URL を完全にカスタマイズすることができます(例: http://my.bucketname.com/)。

カスタマイズされた URL の利便性に加えて、仮想ホスティングの 2 つ目の利点として、バケットの仮想サーバーの「ルートディレクトリ」に公開する機能があります。多くの既存のアプリケーションがこの標準ロケーションでファイルを検索するため、この機能は重要です。たとえば、favicon.icorobots.txtcrossdomain.xml はすべて、ルートで見つかることが想定されています。

重要

Amazon S3 では、仮想ホステッドスタイルとパススタイルのアクセスがすべてのリージョンでサポートされます。ただし、パススタイル構文の場合は、バケットへのアクセスを試行するときにリージョン固有のエンドポイントを使用する必要があります。たとえば、バケットの名前が mybucket で 欧州 (アイルランド) リージョンにあり、パススタイル構文を使用したい場合、オブジェクト名が puppy.jpg なら、正しい URI は http://s3-eu-west-1.amazonaws.com/mybucket/puppy.jpg となります。

米国東部 (バージニア北部) リージョン以外のバケットにアクセスする際に、パススタイル構文で以下のいずれかを使用すると、HTTP レスポンスコード 307 Temporary Redirect エラー、およびリソースの正しい URI を伝えるメッセージが表示されます。

  • http://s3.amazonaws.com

  • バケットがあるリージョンとは異なるリージョンのエンドポイント。たとえば、http://s3-eu-west-1.amazonaws.com (米国西部 (北カリフォルニア) リージョンで作成されたバケットが対象)。

注記

Amazon S3 は、リージョン固有のエンドポイント(s3-eu-west-1 など)ではなく、米国スタンダードのエンドポイント(s3.amazonaws.com など) ではなく、米国東部 (バージニア北部) のエンドポイント (s3.amazonaws.com) を使用する場合、Amazon S3 は仮想ホスティング形式のリクエストをデフォルトで米国東部 (バージニア北部) リージョンにルーティングします。いずれのリージョンでも、バケットを作成すると、Amazon S3 は DNS を更新してリクエストを正しいロケーションにルーティングします。この処理には時間がかかる場合があります。その間、デフォルトのルールが適用されて、仮想ホスティング形式のリクエストは米国スタンダードリージョンに送信され、Amazon S3 は HTTP 307 リダイレクトによりこのリクエストを正しいリージョンにリダイレクトします。詳細については、「リクエストのリダイレクトと REST API」を参照してください。

SSL と共に仮想ホスティング形式のバケットを使用した場合、SSL ワイルドカード証明書は、ピリオドを含まないバケットのみと一致します。この問題を回避するには、HTTP を使用するか、または独自の証明書検証ロジックを記述します。

HTTP ホストヘッダーバケット仕様

GET リクエストが SSL エンドポイントを使用しないかぎり、HTTP Host ヘッダーを使用してリクエストに対してバケットを指定できます。REST リクエストの Host ヘッダーは、次のように解釈されます。

  • Host ヘッダーを省略するか、その値を "s3.amazonaws.com" にすると、リクエスト URI のうち、スラッシュで区切られた最初の部分がリクエストのバケットになり、リクエスト URI の残りの部分はリクエストのキーとなります。このセクションの最初および 2 つ目の例に示すように、これが通常の方式です。ホストヘッダーは、HTTP 1.0 リクエストでのみ省略可能です。

  • 前記のいずれの条件も該当せず、Host ヘッダーの値が ".s3.amazonaws.com" で終わる場合、バケット名は Host ヘッダーの値のうち、先頭から ".s3.amazonaws.com" までの部分になります。リクエストのキーはリクエスト URI になります。このように解釈される場合、このセクションの 3 つ目および 4 つ目の例に示すように、バケットは s3.amazonaws.com のサブドメインとして公開されます(このセクションの 3 つ目および 4 つ目の例を参照)。

  • それ以外の場合、リクエストのバケットは Host ヘッダーの小文字の値、リクエストのキーはリクエスト URI になります。この解釈は、バケット名と同じ DNS 名を登録してして、その名前を Amazon S3 の CNAME エイリアスとして設定している場合に有用です。このドキュメントではドメイン名の登録および DNS の設定の手順については扱いませんが、このセクションの最後の例にその結果を示します。

このセクションでは、URL およびリクエストの例を示します。

例 パス形式の方法

この例では、バケット名として johnsmith.net を、キー名として homepage.html を使用します。

URL は次のとおりです。

Copy
http://s3.amazonaws.com/johnsmith.net/homepage.html

リクエストは次のとおりです。

Copy
GET /johnsmith.net/homepage.html HTTP/1.1 Host: s3.amazonaws.com

HTTP 1.0 でのリクエストと host ヘッダーの省略は次のとおりです。

Copy
GET /johnsmith.net/homepage.html HTTP/1.0

DNS 互換名については、「制約事項」を参照してください。キーの詳細については、「キー」を参照してください。

例 仮想ホスティング形式のメソッド

この例では、バケット名として johnsmith.net を、キー名として homepage.html を使用します。

URL は次のとおりです。

Copy
http://johnsmith.net.s3.amazonaws.com/homepage.html

リクエストは次のとおりです。

Copy
GET /homepage.html HTTP/1.1 Host: johnsmith.net.s3.amazonaws.com

仮想ホスティング形式の方法では、バケット名は DNS 準拠である必要があります。

例 米国スタンダード以外のリージョンにおけるバケットの仮想ホスティング形式の方法

この例では、欧州 (アイルランド) リージョンのバケットの名前として johnsmith.eu を、キー名として homepage.html を使用します。

URL は次のとおりです。

Copy
http://johnsmith.eu.s3-eu-west-1.amazonaws.com/homepage.html

リクエストは次のとおりです。

Copy
GET /homepage.html HTTP/1.1 Host: johnsmith.eu.s3-eu-west-1.amazonaws.com

バケットがどのリージョンに存在する場合でも、リージョン固有のエンドポイントではなく、米国スタンダードのエンドポイントを使用することができます。

Copy
http://johnsmith.eu.s3.amazonaws.com/homepage.html

リクエストは次のとおりです。

Copy
GET /homepage.html HTTP/1.1 Host: johnsmith.eu.s3.amazonaws.com

例 CNAME 方式

この例では、バケット名として www.johnsmith.net を、キー名として homepage.html を使用します。この方式を使用するには、DNS 名を bucketname.s3.amazonaws.com の CNAME エイリアスとして設定する必要があります。

URL は次のとおりです。

Copy
http://www.johnsmith.net/homepage.html

例は次のとおりです。

Copy
GET /homepage.html HTTP/1.1 Host: www.johnsmith.net

CNAME による Amazon S3 URL のカスタマイズ

要件によっては、ウェブサイトやウェブサービスに "s3.amazonaws.com" を表示したくない場合もあります。たとえば、ウェブサイトの画像を Amazon S3 でホストしている場合、http://johnsmith-images.s3.amazonaws.com/. でなく http://images.johnsmith.net/ のほうがよい場合があります。

バケット名は CNAME と同じである必要があります。その場合、http://images.johnsmith.net/filenamehttp://images.johnsmith.net.s3.amazonaws.com/filename と同じになります(ただし、images.johnsmith.netimages.johnsmith.net.s3.amazonaws.com を提供するようになりました。

DNS 互換名を持つすべてのバケットは、http://[bucketname].s3.amazonaws.com/[Filename](例: http://images.johnsmith.net.s3.amazonaws.com/mydog.jpg)として参照することができます。CNAME を使用して images.johnsmith.net を Amazon S3 ホスト名にマップすることができます。その場合、前述の URL は http://images.johnsmith.net/mydog.jpg になります。

CNAME DNS レコードは、ドメイン名を適切な仮想ホスティング形式のホスト名にエイリアス設定する必要があります。例えば、バケット名およびドメイン名が images.johnsmith.net である場合、CNAME レコードは images.johnsmith.net.s3.amazonaws.com を提供するようになりました。

Copy
images.johnsmith.net CNAME images.johnsmith.net.s3.amazonaws.com.

エイリアス先を s3.amazonaws.com に設定することも有効ですが、余分な HTTP リダイレクトが発生する場合があります。

Amazon S3 はホスト名を使用してバケット名を決定します。たとえば、www.example.comwww.example.com.s3.amazonaws.com の CNAME として設定したとします。http://www.example.com にアクセスすると、Amazon S3 は次のようなリクエストを受け取ります。

Copy
GET / HTTP/1.1 Host: www.example.com Date: date Authorization: signatureValue

Amazon S3 は元のホスト名 www.example.com のみを認識し、リクエストの解決に使用される CNAME マッピングは認識しないため、CNAME とバケット名は同じである必要があります。

CNAME では、任意の Amazon S3 エンドポイントを使用できます。たとえば、s3-ap-southeast-1.amazonaws.com を CNAME で使用できます。エンドポイントの詳細については、「Request Endpoints」を参照してください。

CNAME を使用してホスト名を Amazon S3 バケットに関連付けるには

  1. 管理するドメインに属するホスト名を選択します。この例では、images ドメインの johnsmith.net サブドメインを使用します。

  2. ホスト名と一致するバケットを作成します。 この例では、ホスト名およびバケット名は images.johnsmith.net です。

    注記

    バケット名はホスト名と完全に一致する必要があります。

  3. ホスト名を Amazon S3 バケットのエイリアスとして定義する CNAME レコードを作成します。(例:

    images.johnsmith.net CNAME images.johnsmith.net.s3.amazonaws.com

    重要

    リクエストルーティングの理由により、CNAME レコードは、前述の例と完全に一致するように定義する必要があります。そうしない場合、正しく動作するように見えても、最終的には予期しない結果を招くことがあります。

    注記

    DNS 設定の手順は、お使いの DNS サーバーまたは DNS プロバイダーによって異なります。個別の情報については、お使いのサーバーのマニュアルをご覧になるか、プロバイダーにお問い合わせください。

制約事項

HTTP Host ヘッダーを使用してリクエストのバケットを指定する処理は、非 SSL リクエストで、REST API の使用時にサポートされます。別のエンドポイントを使用して SOAP でバケットを指定することはできません。

注記

SOAP のサポートは HTTP 経由では廃止されましたが、HTTPS 経由では引き続き利用可能です。SOAP 用に Amazon S3 の新機能をサポートする予定はありません。REST API か AWS SDK を使用することをお勧めします。

下位互換性

以前のバージョンの Amazon S3 は、HTTP Host ヘッダーを不正に無視していました。文書化されていないこの動作に依存するアプリケーションは、Host ヘッダーを正しく設定するように更新する必要があります。Amazon S3 は Host(存在する場合)からバケット名を判断するため、この問題の最も起こりうる症状として、予期せぬ NoSuchBucket エラー結果コードを受け取ることがあります。