web-dev-qa-db-ja.com

S3リダイレクトを使用したAmazon Cloudfront

比較的簡単なことをしようとしています。いくつかのドメインとサブドメインをセットアップして、サイトのコアドメインにリダイレクトしたいのですが、リダイレクトをCloudfrontに配置したいと思います。ルートパスのリダイレクト以外はすべて機能します。これにより、S3バケットを部分的に説明するXMLファイルが取得されます。

バックグラウンド

S3

S3では、次のように all-redirectバケットをセットアップ できます。

S3 with Redirect all requests setup

これをテストすると、Webエンドポイント(brass9-com.s3-website-us-west-1.amazonaws.com)は、本来あるべきことを実行します-brass9.comにリダイレクトします。良い。

クラウドフロント

CloudfrontではS3バケットを指すことができますが、そうすることを示唆する方法は間違っています-ブラス9-com.s3.amazonaws.comのように、バケットをその名前で指すのではなく Webエンドポイント 上記。それ以外は、すべてをデフォルトのままにして、適切なリダイレクト動作を得ることができます。したがって、 www.brass9.com/portfolio のようなパスは、本来あるべき場所に正しくリダイレ​​クトされます。また良い。

問題-ルートドメインのリダイレクト

その後、機能しないのは、単純な www.brass9.com からリダイレクトすることです。リダイレクトを取得する代わりに、次の奇妙な結果を取得します。

<?xml version="1.0" encoding="UTF-8"?>
<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Name>brass9-com</Name><Prefix></Prefix>
<Marker></Marker><MaxKeys>1000</MaxKeys><IsTruncated>false</IsTruncated>
</ListBucketResult>

OK... 。つまり、 これは完全に予期しないことではありません -デフォルトのルートオブジェクトがないためです。しかし、この動作を防ぐために、どのデフォルトルートオブジェクトを指定できるでしょうか。指し示す必要があるS3リダイレクトオブジェクトがある場合、その名前は何ですか?または、他に適切な構成がありますか、これは、Amazonが修正する必要があるCloudfrontとS3の相互作用のバグにすぎませんか?

機能しない既知のソリューション:デフォルトのルートオブジェクト

Index.htmlのデフォルトルートオブジェクトを指定することは可能ですが、それは何の助けにもなりません-問題を変更するだけです。代わりに、CloudfrontのURLは、404であるメインサイトの/index.htmlにリダイレクトします(index.htmlファイルは使用しません。サーバー側のフレームワーク駆動型サイトです)。サーバーにindex.htmlを配置することもできますが、これは最初にCloudfrontを使用することによるわずかな速度向上を無効にします。

同様の質問

1つの質問が似たような質問をしますが、何らかの理由で、XML応答ではなく 空白、0バイトの応答 が返されます。その問題や解決策に関する質問は含まれていません。

関連記事

1つの記事では、単に サイト全体をベアドメインとwwwドメインの両方で提供する を提案しています。これは、ユーザーのブックマーク、検索ランキングなどに影響します。これを行うべきではありません。

リダイレクトスキームではなく S3およびCloudfrontで静的Webサイトをホストする について議論しているため、関連性はありません。

それで、これを適切に行うにはどうすればよいですか?

Cloudfront構成のスクリーンショット-デフォルトルートオブジェクトなし、S3オリジンを指します。 InProgressを無視-テストのためにデフォルトルートオブジェクトのオンとオフを切り替えました。

Cloudfront Distribution with no Default Root Object pointing at S3

そしてそのディストリビューションのOrigin設定:

Origin - points to S3, defaults

10
Chris Moschini

解決策:質問に記載されているようにリダイレクトを設定してから、S3とCloudFrontのキャッシュ時間を待ちます。彼らは4時間以上になる可能性があるので、あなたはそれをすべて設定してから待って最高のものを期待する必要があります。

(これはコメントからのマイケルの解決策ですが、それは今では年月であり、これは回答済みとマークされるのに値します)。

2
Chris Moschini

この問題が発生した場合は、まずクラウドフロントのs3バケットOriginを構成するときに、オートコンプリートs3 RESTエンドポイントを返す domain.amazonaws.comをチェックして、このListBucketResultレスポンスを返します。

書き留める必要があります手動 Webサイトのエンドポイントdomain.s3-website-region.amazonaws.com

重要: RESTエンドポイントを使用して誤ってcloudfrontを構成した場合、無効化によってキャッシュを無効にする必要があります。そうしないと、REST応答が返され続けます

4
lapinkoira

コメントできないので答えとして書く- http://docs.aws.Amazon.com/AmazonCloudFront/latest/APIReference/DistributionConfigDatatype.html#DistributionConfigDatatype_Elements のドキュメントから、空白のデフォルトルートオブジェクト:

ディストリビューションを作成するときにデフォルトのルートオブジェクトを指定したくない場合は、空のDefaultRootObject要素を含めます。

0
Dani_l