S3 Webサイトのリダイレクト先にCloudFrontが続かないのはなぜですか?


18

Amazon S3でホストされているウェブサイトがあります。これは、WordPressでホストされている古いWebサイトの新しいバージョンです。

Website Redirect Location古い場所を処理し、それらを新しいWebサイトページにリダイレクトするために、メタデータでいくつかのファイルを設定しました。

たとえばhttp://www.mysite.com/solution、リダイレクトしたいことがあったhttp://mysite.s3-website-us-east-1.amazonaws.com/product.htmlのでsolution、正しいメタデータを使用して、バケット内に名前の空のファイルを作成しました。

Website Redirect Location= /product.html

S3リダイレクトメタデータは301 Moved Permanently、SEOに最適なものと同等です。これは、S3ドメインからURLに直接アクセスする場合に最適です。

また、Webサイトバケットに基づいてCloudFrontディストリビューションをセットアップしました。そして、ディストリビューションを介してアクセスしようとすると、リダイレクトが機能しません。つまり:

http://xxxx123.cloudfront.net/solution リダイレクトせず、代わりに空のファイルをダウンロードします。

私の質問は、CloudFrontディストリビューションを通じてリダイレクトを維持する方法ですか?または、SEOを悪化させることなくリダイレ​​クトを処理する方法についてのアイデアはありますか?

ありがとう

回答:


47

最近この問題に遭遇しましたが、うまくいくように見える回避策を見つけました。

バケットのホスト名ではなく、S3静的ウェブサイトのホスト名を指すカスタムオリジンを使用してCloudfrontディストリビューションを作成しました。OPの場合、望ましい起点は次のとおりです。

mysite.s3-website-us-east-1.amazonaws.com

バケットが実際にリダイレクトを提供しないため、バケットをオリジンとして使用するだけでCloudfrontディストリビューションをヒットしても機能しません。ファイルのみを提供し、メタデータを保存します。

お役に立てば幸いです。


ただし、Cloudfrontはリダイレクト応答をキャッシュするのではなくキャッシュすることに注意してください。その結果、Cloudfrontをバイパスするためにリダイレクトするリソースのダウンロード。
tfischbach

2
bmatsuo-これに対して10億のレップポイントを提供できれば、できます。どうもありがとうございます。本当に助かりました。
スナイプ

これは大いに役立ちました!S3を初めて使用する場合は、静的バケットを作成するには、バケットに移動して[プロパティ]タブにアクセスしてください。[静的Webサイトホスティング]をクリックします。これにより、転送が可能な正しいURLが得られます:)
rick6

2

分析

文書によると、カスタムの起源のための要求と応答の動作、およびサポートされているHTTPステータスコードアマゾンCloudFrontのは従わないリダイレクトを残念ながら、:

[...]リダイレクトを構成した後、エンドユーザーがオブジェクトのリクエストを初めて送信すると、CloudFront Frontはリクエストをオリジンに送信し、オリジンはリダイレクト(たとえば、302 Moved Temporarily)で応答します。CloudFrontはリダイレクトをキャッシュし、エンドユーザーに返します。CloudFrontはリダイレクトに従いません。 [強調鉱山]

もちろん、カスタムオリジンではなくAmazon S3を使用しており、関連セクションはAmazon S3 Originsのリクエストとレスポンスの動作に特にありませんが、Amazon S3リダイレクトはごく最近追加されただけです(Amazon S3-ウェブサイトのサポートを参照)リダイレクト)、まだそこに欠けている可能性があります。

したがって、HTTPステータスコード200 OKの空のファイルを受け取っているのではなく、HTTPステータス301が本体なしで永続的に移動しているという推測を思いつきます。例:cURLまたはHTTPie?後者のツールは通常、リダイレクトを追跡するために明示的なパラメーターを必要とするため、これは簡単に気付かれない場合があります。

潜在的なソリューション

分析が正しいことが判明した場合は、代わりに明示的にCloudFrontをターゲットにするようにリダイレクトを構成する必要があります。再びリダイレクトを参照してください。

次のいずれかの場所にリクエストをリダイレクトするようにWebサーバーを構成できます。

  • オリジンサーバー上のオブジェクトの新しいURL。エンドユーザーが新しいURLへのリダイレクトに従うと、エンドユーザーはCloudFrontをバイパスして、オリジンに直接進みます。そのため、リクエストをオリジンのオブジェクトの新しいURLにリダイレクトしないことをお勧めします。

  • オブジェクトの新しいCloudFront URL。エンドユーザーが新しいCloudFront URLを含むリクエストを送信すると、CloudFrontはオリジンの新しい場所からオブジェクトを取得し、エッジの場所にキャッシュして、オブジェクトをエンドユーザーに返します。オブジェクトに対する後続の要求は、エッジロケーションによって処理されます。これにより、オリジンからオブジェクトを要求する視聴者に関連する待ち時間と負荷が回避されます。ただし、オブジェクトに対するすべての新しいリクエストには、CloudFrontへの2つのリクエストに対して料金が発生します。


CloudFrontディストリビューションを介してリダイレクトする必要があるURLをcURLで取得 HTTP/1.0 200 OK Content-Type: application/octet-stream Content-Length: 0 すると、リダイレクトはS3によって管理され、この場合、ファイルはCloudFrontによってホストされ、S3 As S3に設定されたリダイレクトヘッダーを気にしないメタデータ以外のリダイレクトをマッピングできないファイルのWebサーバーです。
ヤニックチャズ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.