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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

SSL

SSL(Secure Sockets Layer)とは、暗号化されたプロトコルで、インターネット上での通信セキュリティを提供しています。

AWS(Amazon Web Services)

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

Q&A

3回答

1252閲覧

AWSでのSSL化について

tetsuya.k

総合スコア1

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

SSL

SSL(Secure Sockets Layer)とは、暗号化されたプロトコルで、インターネット上での通信セキュリティを提供しています。

AWS(Amazon Web Services)

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

0グッド

0クリップ

投稿2021/06/10 01:58

AWS初心者です。
宜しくお願いいたします。

表題の件ですが、AWSでドメインを取得しSSL化をしようとしたところハマってしまってます。
SSL化を完遂させたいです。

まずここまでの流れと状況を箇条書きにし、下部に各パート詳細のスクショを貼ります。

①RailsアプリをAWS EC2でデプロイ(サーバはNginxを利用してます。)
②Route53でドメイン取得(※この時点でhttp://ドメイン名でアクセスできました。)
③ACMにて証明書取得
④Route53にてレコードタイプCNAMEのレコード作成(この時点で証明書は発行済みになりました。)
⑤ターゲットグループの作成
⑥ロードバランサー及びセキュリティグループの作成
⑦セキュリティグループのポート範囲の編集
⑧インスタンスと紐付け
⑨Route53にてレコードタイプAかつエイリアス”はい”のレコード作成

そしてhttps://ドメイン名でアクセスしましたが”アクセスできません”となり、各パート確認するとターゲットグループで”unhealthy”となっていることに気づきました。
ステータスは”Health checks failed with these codes: [502]”となっており、原因を調べながらターゲットグループのプロトコルポートを変えてみたりセキュリティグループのポート範囲を変えてみたり等、いくつかのパターンを試してみましたがステータスは変わりませんでした。

Nginx

1upstream app_server { 2 server unix:/var/www/movietweet/shared/tmp/sockets/unicorn.sock; 3} 4 5server { 6 listen 80; 7 8 server_name Elastic IP; 9 10 client_max_body_size 2g; 11 12 root /var/www/movietweet/current/public; 13 14 location ^~ /assets/ { 15 gzip_static on; 16 expires max; 17 add_header Cache-Control public; 18 root /var/www/movietweet/current/public; 19 } 20 21 try_files $uri/index.html $uri @unicorn; 22 23 location @unicorn { 24 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 25 proxy_set_header Host $http_host; 26 proxy_redirect off; 27 proxy_pass http://app_server; 28 } 29 30 error_page 500 502 503 504 /500.html; 31} 32

【インスタンスのセキュリティグループ】
イメージ説明

【ターゲットグループ】
イメージ説明

【ロードバランサー】
イメージ説明

【Route53 レコード】
イメージ説明

状況説明としましては以上になりますが、もし足りない情報等あれば追加いたします。

解決策わかる方いらっしゃいましたら、何卒ご教示のほど宜しくお願いいたします。

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

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

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

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

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

guest

回答3

0

”Health checks failed with these codes: [502]”

この内容からわかることは 次の2点です。

  1. ロードバランサーから ターゲット(EC2) に対してのヘルスチェックが失敗している
  2. EC2が返した応答が 502 Bad Gateway エラーである

ターゲットグループの「ヘルスチェック」の設定を確認してください。ここで設定された情報をもとに、ロードバランサーは、ターゲット(EC2) に対して ヘルスチェックを行います。

ヘルスチェックに成功すると、ロードバランサーは ターゲットを Healthy(正常) とみなします。逆に失敗すると Unhealthy(非正常) と判断されます。ロードバランサーは Healthy 状態のターゲットにしかリクエストを割り振りしませんので、Unhealthy の状態から Healthy の状態に 変える必要があります。

502 エラーについて

エラーの内容から、ターゲットが ロードバランサーに対して 502 Bad Gateway 応答を返した事がわかります。EC2側の NginxとUnicornのいずれかで 502応答を返している箇所を探してください。一般的にはアクセスログ、エラーログなどに出力されていると思います。

ロードバランサーでHTTPSを処理する

エラーが解決できたら 次に、ロードバランサーのリスナーの設定で HTTPS を有効化して、ACMで発行した証明書を インストールしてください。

ご参考)https://aws.amazon.com/jp/premiumsupport/knowledge-center/associate-acm-certificate-alb-nlb/

投稿2021/06/18 22:05

take88

総合スコア1379

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

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

0

SSL云々は関係なくて、ヘルスチェックが失敗していることが問題です。
ヘルスチェックはEC2のターゲットグループで指定したポートとパスに対してリクエストを送り、そのレスポンスコードによって成功したか失敗したか(デフォルトだと200のみ)
EC2側でヘルスチェックのリクエストを受けているはずですが、それがどうして502になっているのかを調べてください。
nginxやunicornのログを見ながらトラブルシュートすることになるでしょう。
また、ヘルスチェックは黙っていてもHealthyには戻らないのでEC2側で何かを直したら一度ターゲットグループから外して再度ターゲットグループに追加する必要があります。

細かいことを言うと、今はもうSSLではなくほぼTLSです。
SSLとTLSとは?意外に知らないSSLとTLSの違い(簡単編)

投稿2021/06/10 02:28

yu_1985

総合スコア7447

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

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

tetsuya.k

2021/06/15 01:01

ご回答ありがとうございます。 Unicornログには問題がなく、Nginxログから設定ファイルの加筆修正を行ないましたがダメでした。 またSSLとTLSについてご教示いただきありがとうございます。
yu_1985

2021/06/15 02:40

何をもって問題がないと言ったのかもわかりませんし、どう対処したのかも全くわからないので何もいえません。 同じようなことをもう一度書くことになりますが 現状はまずunhealthyなのでALBからのリクエストが届いていません ヘルスチェックをする際はALBからヘルスチェックのリクエストが送られているはずですが、それに対して502を返しているところがあるはずです。 そこで何が起こっているかを調べ、解消する必要があります。
guest

0

httpsは一般にport443で接続されるのでport443での設定を書かないといけないと思います。

みた感じnginxの設定ファイルはconfdに書いてると思います。
port80の時と同様に443の時の設定を書いて秘密鍵のpathを設定しないとできないです。
httpで接続できたのはhttpがport80で接続されてその場合の設定を書いてあり、暗号化しないため秘密鍵が必要ないからです。

AmazonLinuxなら/etc/nginx/nginx.confの中にhttps用の設定がコメントアウトで書いてあると思うのでそれを参考に書いてみるといいと思います。

投稿2021/06/18 17:17

kyokio

総合スコア560

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問