###問題の概要
世界一丁寧なAWS解説。EC2を利用して、RailsアプリをAWSにあげるまで
https://qiita.com/naoki_mochizuki/items/f795fe3e661a3349a7ce
上記記事を参考にEC2のサーバー構築をしており、unicornとnginx両方正常に起動している状態でElasticIPにアクセスしようとしても
このサイトにアクセスできません
[xx.xx.xx.xx]からの応答時間が長すぎます。
と表示される。
その他にも特徴があり
- curlコマンドが弾かれる
$ curl http://xx.xx.xx.xx
- nginxのログ、unicornのログにエラーは出ていない。
###原因
SSL証明書を発行していないにもかかわらずHTTPS接続を要求しており、サーバー側が対応できず接続を拒否している。
原因は2つあり
-
ブラウザの問題
どこかのタイミングでブラウザからHTTPS接続を要求し、キャッシュに残っていた(→自動的にHTTPS接続を要求する) -
Railsの設定の問題
Railsのproduction.rb
でforce_ssl = true
になっている。
###解決策
-
production.rb
の設定をconfig.force_ssl = false
に変更する。
#Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
config.force_ssl = false
この段階でcurlコマンドが通るようになる
$ curl http://xx.xx.xx.xx
- ブラウザのキャッシュをクリアする。(chromeであれば右上のメニューボタン>その他のツール>閲覧履歴を消去)
###まとめ
エラーログが吐き出されないため初学者には原因を特定しづらい問題だと思います。
他の初学者の方の助けになれば幸いです。
また上記内容は参考にさせていただいたQiita記事[世界一丁寧な〜]のコメント欄にて@napojin様が書き込まれた解決法をまとめたものです。私が検索したかぎりでは一つの記事になっていなかったのでまとめさせていただきました。
この場を借りてお礼を申し上げます。