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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Amazon CloudFront

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

Amazon Route 53

Amazon Route 53 はAmazonが提供する、 可用性と拡張性に優れた ドメインネームシステム(DNS)サービスです。

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

AWS(Amazon Web Services)

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

Q&A

解決済

1回答

4741閲覧

EC2+Cloudfrontの構成でSSL対応しようとしたら、オリジンへリダイレクトされてしまう

ryujno

総合スコア19

Amazon CloudFront

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

Amazon Route 53

Amazon Route 53 はAmazonが提供する、 可用性と拡張性に優れた ドメインネームシステム(DNS)サービスです。

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

AWS(Amazon Web Services)

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

0グッド

0クリップ

投稿2020/12/30 03:04

編集2021/01/02 13:31

概要

EC2+Cloudfrontの構成でSSL化対応させ、
https://xxx.comとアクセスできるようにしたいです。

しかし現状は、https://xxx.comとアドレス入力すると、
サイトにはつながるものの、URLが、http://ec2-xxx.ap-northeast-1.compute.amazonaws.com
という風に、オリジンのEC2へとhttpのままリダイレクトされてしまう状態です。

ドメインの取得やDNS設定は、Route53で行い、証明書はACMで取得しています。

URLを入力して、

URLでアクセス

Enter...

エンター後
となってしまう状態です。

かれこれ数ヶ月解決できていない状態でして、どうかアドバイスいただけますと幸いです。

構成

下図のように構成しているWebアプリです。
イメージ説明

設定

実際の設定についてキャプチャを貼り付けます。

Cloudfront

General
General設定

Origin
Origin設定

Behavior
Behavior一覧
Behavior設定

Route53

Route53設定

EC2 ※追記

セキュリティグループ
セキュリティグループ

Curlコマンドの結果

bash

1$ curl -vvv https://xx.com 2 3* Trying xxx... 4* TCP_NODELAY set 5* Connected to xxx.com (xxx) port 443 (#0) 6* ALPN, offering h2 7* ALPN, offering http/1.1 8* successfully set certificate verify locations: 9* CAfile: /etc/ssl/cert.pem 10 CApath: none 11* TLSv1.2 (OUT), TLS handshake, Client hello (1): 12* TLSv1.2 (IN), TLS handshake, Server hello (2): 13* TLSv1.2 (IN), TLS handshake, Certificate (11): 14* TLSv1.2 (IN), TLS handshake, Server key exchange (12): 15* TLSv1.2 (IN), TLS handshake, Server finished (14): 16* TLSv1.2 (OUT), TLS handshake, Client key exchange (16): 17* TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1): 18* TLSv1.2 (OUT), TLS handshake, Finished (20): 19* TLSv1.2 (IN), TLS change cipher, Change cipher spec (1): 20* TLSv1.2 (IN), TLS handshake, Finished (20): 21* SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256 22* ALPN, server accepted to use h2 23* Server certificate: 24* subject: CN=xxx.com 25* start date: Aug 30 00:00:00 2020 GMT 26* expire date: Sep 29 12:00:00 2021 GMT 27* subjectAltName: host "xxx.com" matched cert's "xxx.com"' 28* issuer: C=US; O=Amazon; OU=Server CA 1B; CN=Amazon 29* SSL certificate verify ok. 30* Using HTTP2, server supports multi-use 31* Connection state changed (HTTP/2 confirmed) 32* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0 33* Using Stream ID: 1 (easy handle xxx) 34> GET / HTTP/2 35> Host: xxx.com 36> User-Agent: curl/7.64.1 37> Accept: */* 38> 39* Connection state changed (MAX_CONCURRENT_STREAMS == 128)! 40< HTTP/2 302 41< content-type: text/html; charset=UTF-8 42< location: http://ec2-xxx.ap-northeast-1.compute.amazonaws.com 43< server: nginx 44< x-powered-by: PHP/7.3.13 45< cache-control: no-cache, private 46< date: Wed, 30 Dec 2020 02:41:20 GMT 47< x-cache: Miss from cloudfront 48< via: 1.1 xxx.cloudfront.net (CloudFront) 49< x-amz-cf-pop: xxx 50< x-amz-cf-id: xxx 51< 52<!DOCTYPE html> 53<html> 54 <head> 55 <meta charset="UTF-8" /> 56 <meta http-equiv="refresh" content="0;url='http://xxx'" /> 57 58 <title>Redirecting to http://xxxap-northeast-1.compute.amazonaws.com</title> 59 </head> 60 <body> 61 Redirecting to <a href="http://xxx.ap-northeast-1.compute.amazonaws.com">http://xxx.ap-northeast-1.compute.amazonaws.com/</a>. 62 </body> 63* Connection #0 to host xxx.com left intact 64</html>* Closing connection 0

※特定情報には、xxxとマスクをかけています。

使用技術

AWS

  • サーバ:EC2
  • DNS設定:Route53
  • ドメイン取得:Route53
  • 証明書取得:ACM
  • CDN:cloudfront

EC2内部

  • 仮想化:docker(Laradock)
  • 使用言語:PHP
  • フレームワーク:Laravel
  • webサーバ:nginx
  • DBサーバ:postgreSQL

参考記事

以下のような記事を参照してトライしていますが、かれこれ数ヶ月解決できていない状態です。

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

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

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

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

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

guest

回答1

0

ベストアンサー

Origin ProtocolがHTTP Onlyだからではないでしょうか。
CloudFront と使用するカスタムオリジン間の通信で HTTPS を必須にする

質問の前提をひっくり返すような質問をしちゃいますけど、あえてELB(ALB)ではなくCloudFrontのみを使ってHTTPS化しようとしている理由は何でしょうか?
ELBのコストさえ気にならなければそちらのほうが簡単ですし、CloudFront自体のエンドポイントにHTTPSで接続しても、今回のように結局オリジン側でHTTPSで接続できる設定をちゃんとしておかないといけなくなりますし、何より肝心のEC2がスケーラブルではない構成になりますが…。

投稿2020/12/31 09:20

yu_1985

総合スコア7588

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

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

ryujno

2021/01/02 13:34

ご確認、コメントありがとうございます! まさに「ELBのコスト」が気になり、またかなり少人数利用を想定しているもののため、 スケーラビリティもさほど必要がなかったため、 意地になってCloudFrontのみでHTTPS化を試みていました。 遅いお返事に重ねて質問をしてしまい恐縮なのですが、 >オリジン側でHTTPSで接続できる設定をちゃんとしておかないと というのは、EC2(オリジン側)の「セキュリティグループ」設定のことを指していらっしゃるという認識でよろしいでしょうか? (今しがた質問本文内にキャプチャを追記しました)
yu_1985

2021/01/03 22:45

> まさに「ELBのコスト」が気になり、またかなり少人数利用を想定しているもののため、 スケーラビリティもさほど必要がなかったため、 意地になってCloudFrontのみでHTTPS化を試みていました。 それであればCloudFrontすら必要なくてEC2だけでHTTPS化を試みればいいと思うのですが…。 わざわざCloudFrontを使う理由が見えてきません。 コストが気になるならCloudFrontをかますとEC2を単体で使うよりコストがかかりますし。 WAFと連携したいのならわからなくもないです。 > というのは、EC2(オリジン側)の「セキュリティグループ」設定のことを指していらっしゃるという認識でよろしいでしょうか? セキュリティグループはもちろんのこと、そもそもサーバ自体でHTTPSでの通信を受け付けられる状態にしていなければ通信はできません。 ELBを使えばそこでHTTPS通信を終端することができるのでEC2インスタンスではHTTPだけ受け付けられるようにしておけば十分になります。 つまるところ、結局CloudFrontとEC2両方でHTTPSを受け付けられるようにしておかなければならず、CloudFrontのみを使ってHTTPS化することはさして意味がないと思っています。 というのも、それで暗号化されるのはクライアントとエッジサーバの間の通信だけで、結局エッジサーバとオリジン間の通信を暗号化しなければセキュアではないような気がしますね。 今回はそもそもCloudFrontのOrigin Protocol PolicyがHTTP OnlyになっているからHTTPで転送されているのでは、という指摘です。
ryujno

2021/01/04 02:46

ご丁寧にありがとうございます。 EC2だけでHTTPS化するのは無理らしいと、 どこかの記事を読んで、その方法は取らずにおりました。 調べ不足でしたありがとうございます。 また、ELBを導入することによるメリットのご説明もご丁寧にありがとうございました。 まずは、以前ご指摘いただいた > CloudFrontのOrigin Protocol PolicyがHTTP Onlyになっている この部分を修正して試してみた後、ELBの導入を検討してみるよういたします。 諸々ご丁寧にありがとうございました。
yu_1985

2021/01/04 05:38

> EC2だけでHTTPS化するのは無理らしいと、 どこにそんなことが書いてあったんでしょうか…? EC2インスタンス自体はただの仮想サーバなので、通常のサーバと同様に設定するだけです。 AWSマネージドのサービスを用いてHTTPS化するのはたしかに無理ですが、普通に証明書を用意すれば可能です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問