質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CDN

CDNは、Webコンテンツをインターネット経由で配信するのに最適化されたネットワークを指します。Webサイトにある静的コンテンツをWebサイトが管理されているサーバーとは異なるサーバーにキャッシュし代わりに配信することで、負荷が分散し速度を向上する仕組みです。

Amazon CloudFront

Amazon CloudFrontは、AWSの高速且つ高パフォーマンスなコンテンツ配信(CDN) サービス。容量の大きいコンテンツをキャッシュさせてWebサーバの負荷を軽減し、サーバダウンの防止など安定した配信が可能になります。

Elastic Load Balancing

Elastic Load Balancingは、Amazon社が提供する、 EC2インスタンス間で自動的にトラフィックの負荷分散を行うサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

1回答

1468閲覧

AWS CloudFrontを導入したら301(リダイレクト)でレスポンスが返ってくるので、リダイレクトされないようにしたい

jj-ii

総合スコア11

CDN

CDNは、Webコンテンツをインターネット経由で配信するのに最適化されたネットワークを指します。Webサイトにある静的コンテンツをWebサイトが管理されているサーバーとは異なるサーバーにキャッシュし代わりに配信することで、負荷が分散し速度を向上する仕組みです。

Amazon CloudFront

Amazon CloudFrontは、AWSの高速且つ高パフォーマンスなコンテンツ配信(CDN) サービス。容量の大きいコンテンツをキャッシュさせてWebサーバの負荷を軽減し、サーバダウンの防止など安定した配信が可能になります。

Elastic Load Balancing

Elastic Load Balancingは、Amazon社が提供する、 EC2インスタンス間で自動的にトラフィックの負荷分散を行うサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2022/09/16 03:22

編集2022/09/16 09:52

前提

ECSをターゲットにしたALBをオリジンにして、CloudFrontを新規でたてました。

curl -IでCloudFrontの挙動を確認したら、HTTP/2 301でリダイレクトでレスポンスが返ってきます。
ブラウザ上でも、代替えドメイン名からALBのドメインにリダイレクトされます。

実現したいこと

通常の200でレスポンスが返ってくるようにしたい
サブドメインがALBのドメインにリダイレクトされないようにしたいので
原因、解消方法をアドバイス頂きたいです。

発生している問題・エラーメッセージ

イメージ説明

試したこと

  • キャッシュキーにhostヘッダーを含める→今度は502を返すようになる(error from CloudFront)
  • CloudFront とオリジン間の通信を最初はHTTPのみにしていて、試しにマッチビューワーにした→変わらず
  • CloudFront とオリジン間の通信をHTTPSのみを利用するようにする→変わらず301応答
  • キャッシュポリシーをCachingOptimizedにする→変わらず

参考にしたドキュメント

https://qiita.com/yuta_vamdemic/items/f717a022539a3e6836f7
https://repost.aws/questions/QUC9nkA3S1Ti2y9vUyL7e2ZA/cloud-front-redirects-301-to-custom-origin-elb-instead-of-caching
https://aws.amazon.com/jp/premiumsupport/knowledge-center/custom-origin-cloudfront-fails/

補足情報(FW/ツールのバージョンなど)

オリジン

  • オリジンにはALBを指定
  • ALBのターゲットはポート80でECS(FAGATE)に向けている
  • リスナーはhttp(80)とhttps(443)で、httpはhttpsにリダイレクトされるようにしている
  • 証明書発行で指定しているサブドメインはCloudFrontとは別(例:test1.test.com)

CloudFront

  • サブドメインとして代替えドメインと証明書を発行して、Route53でエイリアスで指定している(例:test2.test.com)
  • オリジンプロトコルはHTTPSのみ
  • ビヘイビアはビューワープロトコルがHTTPからHTTPSへリダイレクト
  • httpメソッドはGET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE
  • キャッシュポリシーのヘッダーにAuthorizationHeaderを含めるようにしている
  • 他はデフォルト設定

不足情報あったらすみませんが教えてください、宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yu_1985

2022/09/16 05:06

> CloudFront とオリジン間の通信をHTTPSのみを利用するようにする→変わらず301応答 > オリジンプロトコルはHTTPSのみ と書いてありますが、これは途中からオリジンプロトコルをHTTPSに変えたということでしょうか。 CloudFrontがALBの返す301をキャッシュしちゃってるなんてことはないですか? CloudFrontのキャッシュを一度消したらどうなりますかね。
jj-ii

2022/09/16 05:20

情報抜けていてすみません、最初はhttpのみにしていて、途中からマッチビューワー→httpsのみに変更しました。 その可能性もあるような気がするので、キャッシュを消す方法調べて試してみます。
yu_1985

2022/09/16 06:06

CloudFrontのステータスコードとそのときに考えられる原因についてはドキュメントにあるのでそちらを確認してみてください。 https://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/http-502-bad-gateway.html ALBへのリクエストをHTTPSにするのはいいんですが、そのALBはちゃんとCloudFrontからのHTTPSのリクエストを受けることはできるようになっていますか? カスタムドメインを使って証明書を適用する必要があるかと思いますが…。
jj-ii

2022/09/16 06:13 編集

ありがとうございます、確認します。 ALBへのリクエストをHTTPSにするのはいいんですが、そのALBはちゃんとCloudFrontからのHTTPSのリクエストを受けることはできるようになっていますか? 上記についてはリスナーの設定のことであってますか?httpsを有効にするように、カスタムドメインで証明書を適用しています
yu_1985

2022/09/16 06:17

オリジンを指定するときにちゃんとALBのカスタムドメインを指定していますか?
jj-ii

2022/09/16 06:33

オリジンを指定するときに、プルダウンで出てくるALBを選択しています。 証明書発行したときのカスタムドメイン名で指定するのが正しい、ということでしょうか?
yu_1985

2022/09/16 06:54

そうしないと証明書のドメインと別のドメインでアクセスしてることになって証明書が効かないと思います。
jj-ii

2022/09/16 07:31 編集

なるほど、、CloudFrontでもALBでも、同じカスタムドメインのそれぞれ違うサブドメインを使っているのですが それだと証明書が効かない、またはドキュメントにあるように502エラーの要因になっているということですかね? ALBとバックエンドのサーバーに影響でないように、サブドメインでCloudFrontをたてて、CloudFrontの証明書もそのサブドメインで発行しているので、そこをALBと同じにしないといけないってことですよね
yu_1985

2022/09/16 08:23

> なるほど、、CloudFrontでもALBでも、同じカスタムドメインのそれぞれ違うサブドメインを使っているのですがそれだと証明書が効かない、またはドキュメントにあるように502エラーの要因になっているということですかね? いえ、そうではなくCloudFrontのオリジンとしてALBを指定するときにALBに割り当てたドメインで指定しないとHTTPSでオリジン(ALB)にアクセスするときに証明書のエラーになるのではないかということです。
jj-ii

2022/09/16 08:58

失礼しました、証明書のエラーが起きてるのって目視で確認できるのでしょうか? 今のところ、改めて確認しても301応答は変わらずですがそれっぽいエラーが出ているようには見えなくて
yu_1985

2022/09/16 09:07

キャッシュを消したら502になったと書いてあるのでそうではないかと思ったのですが、また何か設定を変えましたか?
jj-ii

2022/09/16 09:16

すみません、そうですよね CloudFrontのオリジンを、一度ALBに割り当てているドメインに変更して、curl -Iで試してみたら、今度は401エラーが返ってきたので、 一度もとのプルダウン式で出るALBを指定し直したら、301に戻りました
yu_1985

2022/09/16 13:35

「xxxのエラーが出た」だけではあまり状況がわかりません。 まずCloudFrontが返しているエラーなのかオリジンが返しているエラーなのかを切り分けてください。 CloudFrontが返したエラーならドキュメントを読んでからさらに切り分けてください。 オリジンが返しているならALBのえらーなのかその先のサーバーやアプリケーションのエラーなのかを切り分けてください。
jj-ii

2022/09/17 12:35 編集

知識不足で説明がかけてしまいすみません。 恐らく、オリジンサーバーのAPIで Bearer認証をするようにしているので Authorization: Bearerをリクエストで渡す必要があったんじゃないかと思います。 curl -H GET 'https://XXXX' -H 'Authorization: Bearer XXXX' 上記を試したら curl: (92) HTTP2 stream 0 was not closed cleanly:PROTOCOL_ERROR(err 1) を返されたので、プロトコルに問題がありそうな気がしてます。 仰るようにドキュメントなど読んで原因追及したいと思います。
guest

回答1

0

自己解決

cloudfront側の設定が問題でした。

CloudFrontのオリジンとしてALBを指定するときに、ALBに割り当てたドメインで指定していなかった。
HTTPSでオリジン(ALB)にアクセスするときに証明書のエラーになる要因となった。
(コンソールでオリジンドメインを指定する時に、プルダウンで出てくるALBを選択していた)

投稿2022/09/30 10:06

jj-ii

総合スコア11

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問