web-dev-qa-db-ja.com

Amazon S3リダイレクトとCloudfront

ここで参照されているオブジェクトを使用して、S3で301リダイレクトをセットアップしようとしています http://docs.aws.Amazon.com/AmazonS3/latest/dev/how-to-page-redirect.html 。私はいくつかの問題を抱えていて、私が間違っていることを理解できないようです。

私が取得するのは、「Website Redirect Location」メタデータ値が設定されていないかのような空白ページ(0バイトのファイル)です。

何が間違っているのですか?

また、これはAWS CloudFrontでも機能しますか?


S3コンソールのセットアップ S3 Console Setup

注意すべき点:

静的サイトをホストするためのこのセットアップがあります。 ssl/httpsを使用し、Cloudfrontディストリビューションにアップロードして設定した独自の証明書を使用しています。リダイレクトオブジェクトを除くすべてのページが機能しているようです。ルーティングルールを設定しようとしましたが、Cloudfrontで機能しないようです。

Cloudfront urlとs3 urlの両方からリダイレクトにアクセスしようとしています( https://s3.amazonaws.com/ {bucket}/users/sign_in)

59
Matt Smith

S3のリダイレクト、htmlエラーメッセージ、インデックスドキュメントなどのWebサイトのような機能の場合、RESTエンドポイント(${bucket_name}.s3.amazonaws.comまたは${bucket_name}.s3.${region}.amazonaws.com)は使用できないため、使用できません。 Webサイトのエンドポイント(${bucket_name}.s3-website.${region}.amazonaws.com)によってのみ提供されます。

http://docs.aws.Amazon.com/AmazonS3/latest/dev/WebsiteEndpoints.html

Cloudfrontで動作を使用可能にするには、コンソールのオートコンプリートによって提供されるRESTエンドポイントではなく、このエンドポイントを使用するようにCloudfrontを構成する必要があります。

バケットのAmazon S3静的ウェブサイトホスティングエンドポイントを入力します。この値は、Amazon S3コンソールのPropertiesページのStatic Website Hostingに表示されます。

この形式でバケット名を指定すると、Amazon S3リダイレクトとAmazon S3カスタムエラードキュメントを使用できます。

http://docs.aws.Amazon.com/AmazonCloudFront/latest/DeveloperGuide/DownloadDistS3AndCustomOrigins.html

WebエンドポイントはHTTPSをサポートしていませんが、クライアント接続がHTTPSでもバケットからHTTPで取得するようにCloudfrontを設定できます。


役立つヒント:CloudFrontを使用して変更のトラブルシューティングとテストを行う場合、ユーザーは、変更を行ってからCloudFrontが新しい動作を開始するまでの「レイテンシー」に混乱することがよくあります。エラーページの場合、CloudFrontにはデフォルトの5分がありますError Caching Minimum TTL失敗したページのリクエストをオリジンに再送信できないようにする、およびこれは、キャッシュ動作で設定された最小/デフォルト/最大TTLとは別のタイマーです。特にテスト時には、これらのタイマーを無効にして、エラーを返したページの後続のリクエストごとに再試行を強制することができます。これは、明らかな Amazon CloudFront Latency についての質問への回答で提供されたステップを使用します。

115

リダイレクトが失敗し、長さゼロのファイルがダウンロードされるという同じ問題がありましたが、Cloudfrontを使用していませんでした。

私の場合の根本的な原因は、Webサイトのエンドポイント(static.righto)ではなく、RESTエンドポイント(static.righto.com.s3-us-west-2.amazonaws.com)を指しているDNS CNAMEレコードでした。 .com.s3-website-us-west-2.amazonaws.com)。 CNAMEレコードを更新すると、リダイレクトが修正されました。

この問題の別の症状は、HTMLエラーページではなくXMLエラーページが表示されたページが見つからないことでした。

このドキュメント は、WebサイトのエンドポイントとRESTエンドポイントの違いについて説明しています。

9
Ken Shirriff

CloudFrontを使用せずにソリューションを見つけるためにここに来る場合、ここにあります:

S3cmd(もちろんbashスクリプトで)とそのパラメーターを使用できます。

  • --add-header with x-amz-website-redirect-location

たとえば、次のスクリプトはページ/about/の問題を解決します。

s3cmd \
--acl-public \
--add-header "x-amz-website-redirect-location: /about/" \
--no-preserve \
put "./path/to/any/small/file/at/your/local/drive/index.html" "s3://domain.com/about"

このスクリプトは、some既存のファイルをnewスラッシュなしのファイル名でコピーします。ブラウザはすぐにリダイレクトされるため、ファイルに何が含まれているかは重要ではありません。

(そしてより重要なweb-crawlers)ページ/aboutを開こうとすると、301/about/にリダイレクトされます。これにより、Google、Yandex、その他の検索エンジンの右側ページキャッシュ内を維持できます。

このコードを複数のページで繰り返すことができます。または、フォルダを検索するための機能を追加し、各フォルダを呼び出すことができます。おそらくあなたはここにそれを見せてくれるでしょう:)

1