web-dev-qa-db-ja.com

S3バケットにリダイレクトするAWS Cloudfront

静的なWebサイトを提供するために、Cloudfrontディストリビューションを作成しました。 S3はOriginサーバーです。クラウドフロントのURLにアクセスすると、S3の場所にリダイレクトされます。

d2s18t7gwlicql.cloudfront.netまたはtest.telekha.in

ブラウザでは https://telekha-test-www.s3.ap-south-1.amazonaws.com/index.html#/dashboard を表示しています

私は期待しています https://test.telekha.in/#/dashboard

Curlで https://test.telekha.in にアクセスすると、index.htmlドキュメントが返されます

Curlを使用して http://test.telekha.in にアクセスすると、

<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>CloudFront</center>
</body>
</html>

ただし、ブラウザではhttpとhttpsの両方が https://telekha-test-www.s3.ap-south-1.amazonaws.com/index.html#/ にリダイレクトされます

この問題を解決する方法を教えてください。

19
Rajneesh

問題が見つかりました。クラウドフロント構成です。 これ ブログが助けてくれました。

Originを定義するときに、S3バケットを直接選択しました。 telekha-test-www.s3-website.ap-south-1.amazonaws.comのようなS3バケットのドメインを入力する必要があります

20
Rajneesh

これを見ていると思うかどうかを確認する最初のことは、以下のcurlコマンドを実行することです。 HTTP/1.1 307 Temporary Redirectが返される場合、この問題が発生しています。

$ curl -I https://YOUR_CF_DOMAINNAME.cloudfront.net/

HTTP/1.1 307 Temporary Redirect
Content-Type: application/xml
Content-Length: 0
Connection: keep-alive
x-amz-bucket-region: ap-southeast-2
Location: http://yourS3bucketname.s3-ap-southeast-2.amazonaws.com/
Date: Wed, 12 Jul 2017 00:20:27 GMT
Server: AmazonS3
Age: 1775
X-Cache: Hit from cloudfront
Via: 1.1 someid.cloudfront.net (CloudFront)
X-Amz-Cf-Id: someguid==

この問題について私が見つけた最高の説明は次のとおりです。

S3は、グローバルRESTエンドポイント階層* .s3.amazonaws.comのDNSを更新し、バケットの作成後短時間内にバケットの適切なリージョンにリクエストを送信するレコードで、CloudFrontが依存しているように見えますこの最初の更新が完了する前に、S3はリダイレクトを返し、CloudFrontはそのリダイレクトをブラウザーに返します〜 michael-sqlbot

この問題は、実際には、S3でバケットを構成するときに発生するS3バケット名の内部DNS伝播(100%明確ではないが、可能性が高いと思われる)が原因であるため、構成することでこの問題を回避できるはずです。 Cloudfrontディストリビューションを構成する前のS3のパブリックWebサイト、および doco に従って、S3パブリックWeb名をs3バケット名ではなくクラウドフロントオリジンとして構成します。

参考までに、S3バケット名とS3ウェブサイト名の両方をCloudfrontオリジンとして設定しており、両方とも機能していると言えます! (最終的に?)

参照:

19
Simon Hutchison

これは、すべてが正しく構成されていれば、しばらくしてから自動的に修正される単なるタイミングの問題であることがわかりました。詳細については、 this AWSフォーラムスレッドを参照してください。

ここで現在受け入れられている回答とリンク ブログ記事 S3バケットの静的Webサイトを有効にし、その静的Webサイトを指すようにCF Originを変更することをお勧めします。このソリューションはリダイレクトの問題を解決しますが、CF URLまたはカスタムCNAMEとS3 URLの両方を使用してWebサイトが利用可能になるという副作用があります。

7
Kiril

受け入れられた答えを拡張するには、特に参照されているブログ投稿の最後にあるこの部分が役立ちます。

数日前に微妙な「バグ」を見つけました。www.example.com/ about /のようなURLを使用すると、Amazon S3は実際にはフォルダー内の「index.html」ファイルを返します(静的ウェブサイトバケットとして設定されているため) )。

おもしろいことに、末尾のスラッシュ(www.example.com/about)を省略すると、S3は最初に「about」というオブジェクトが存在するかどうかをチェックします。そうでない場合、aboutはフォルダーであると見なされ、about /への301リダイレクトが発行されます。 CloudFrontを使用する場合、これはCloudFrontが実際にキャッシュすることを意味します...ファイル自体の代わりにリダイレクトを! したがって、無駄なリダイレクトを避けるために、すべてのURLが末尾のスラッシュで終わることを確認する必要があります。

0
DILP