HTTPS対応503にハマった


Railsのwebアプリをhttps対応する時に、503のエラーで鬼ハマったので、、、記事にまとめてみました。
参考にしてください。

基本以下の記事を参考にしております。
https://oji-cloud.net/2019/09/15/post-3017/

段取り

AWSのロードバランサー(ALB)を使いました!

ルートは以下となります。

①EC2 → ②ロードバランサー(ALB) → ③Route53 → ④クライアント

②のところで、HTTPSにします!

環境

Rails5
unicorn
nginx
capistrano

AWS

EC2
ロードバランサー(ALB)
ACM
Route53

前提

EC2にデプロイ完了済とします。
デプロイでnginxを使っています。
route53に登録済とします。

やり方

ACMの登録

ACMを利用して、SSlの証明書を発行します。

こちらは以下の記事を参考にしてください!
https://oji-cloud.net/2019/09/15/post-3017/

ロードバランサー(ALB)の作成

まずは、EC2にあるロードバランサーの作成をクリック
すると以下の画面になるので、ALBの作成をクリック

以下の画面になります。
・名前は何でもいいです。好きな名前を付けてください!
・スキームとIPアドレスタイプはデフォルトのままで構いません。
・リスナーのプロトコルにHTTPSの追加をしましょう。(HTTPをHTTPSに変更でも良いですが、そうするとHTTPからアクセスできなくなります。)

画面下に行くと、以下になります。
・VPCはデフォルトで、アベイラビリティーゾーンは最低2つ選びましょう。

次はセキュリティの構成です。
先ほど発行した証明書を選びます。

次はセキュリティグループの設定です。
・私は新規作成してインバウンドグループを以下のようにしました。

次にターゲットグループの作成です。

・ここでポイントです。
ターゲットグループのプロトコルはHTTPにしましょう。
HTTPS対応の色んな記事をみましたが、どこもHTTPSにするように記載されていました。
そのせいなのか、503エラーが発生し、かなりの時間を溶かしてしまいました。。。
理由は、EC2とロードバランサー間の通信はHTTPで行うためのようです。

・名前は任意で大丈夫です。
・ヘルスチェックもデフォルトのままで問題ないと思います。

次にターゲットの登録を行います。
・下のインスタンスに紐付けをします。関連付けるインスタンスにチェックして登録済に追加します。

最後は確認して、ロードバランサー(ALB)の作成完了です。

Route53に登録

Route53にて、ロードバランサーのアドレスを登録します。
エイリアスの選択で「はい」を選ぶと、エイリアス先に先ほど作成したロードバランサーが選べると思います。

ここで、確認でRoute53のアドレスを叩くと、おそらくnginxの画面が出ると思います。

nginxを調整が必要です。

nginxの調整

・nginxのserver_nameにRoute53のドメインが必要です!

/etc/nginx/conf.d/rails.conf
.
.
server {
  listen 80;
  server_name 11.111.111.11 111111111111.com;
.
.

これで再度、httpsで対応できているか確認しましょう。

以上